commit 56985997aef24bec99572c66e7afc28277500cb0 Author: lyf <169361657@qq.com> Date: Sat Mar 21 11:57:34 2026 +0800 对上交代码进行修改,主要将能量机关去掉,添加了同济的PnP位姿解算,但是同济有个四元数,获取IMU部分没有启用,可能导致精度不够。当前还存在反陀螺功能,修改为逻辑和弹道预测相结合,主要在时间关系上进行调整。 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0a74973 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +cmake-build-debug +build +.idea +.xmake +.vscode/.cache +.vscode/compile_commands.json +Mark +armor_box_photo +tools/TrainCNN/.idea +tools/TrainCNN/model +tools/TrainCNN/__pycache__ +others/include/config/config.h +others/MV-UB31-Group0.config +.DS_Store +video diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..aa46b6d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "clangd.arguments": [ + "--compile-commands-dir=${workspaceFolder}/build", + "--completion-style=detailed", + "--query-driver=/usr/bin/clang", + "--header-insertion=never" + ], +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5123de0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,61 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.5) + +PROJECT(SJTU-RM-CV) +SET(CMAKE_CXX_STANDARD 11) +SET(CMAKE_BUILD_TYPE RELEASE) +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPATH=\"\\\"${PROJECT_SOURCE_DIR}\\\"\"") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${CMAKE_SYSTEM_NAME}") +SET(BIN_NAME "run") + +SET(CMAKE_EXPORT_COMPILE_COMMANDS ON) + + +FIND_FILE(CONFIG_FOUND "config.h" "others/include/config") +if (CONFIG_FOUND) + MESSAGE("Found config.h") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITH_CONFIG") +endif() + + +FIND_PROGRAM(CCACHE_FOUND ccache) +IF(CCACHE_FOUND) + SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) + SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) + MESSAGE("< Use ccache for compiler >") +ENDIF() + +FIND_PACKAGE(Eigen3 REQUIRED) +FIND_PACKAGE(OpenCV 4 REQUIRED) +FIND_PACKAGE(Threads) +FIND_PACKAGE(yaml-cpp REQUIRED) + + +LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/others) + +INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIR}) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/armor/include) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/others/include) + +FILE(GLOB_RECURSE sourcefiles "others/src/*.cpp" "armor/src/*.cpp") +ADD_EXECUTABLE(${BIN_NAME} main.cpp ${sourcefiles}) + +TARGET_LINK_LIBRARIES(${BIN_NAME} ${CMAKE_THREAD_LIBS_INIT}) +TARGET_LINK_LIBRARIES(${BIN_NAME} ${OpenCV_LIBS}) +TARGET_LINK_LIBRARIES(${BIN_NAME} yaml-cpp) + +IF (CMAKE_SYSTEM_NAME MATCHES "Linux") + MESSAGE(STATUS "current platform: Linux ") + TARGET_LINK_LIBRARIES(${BIN_NAME} "${PROJECT_SOURCE_DIR}/others/libMVSDK.so") +ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows") + MESSAGE(STATUS "current platform: Windows") + TARGET_LINK_LIBRARIES(${BIN_NAME} "${PROJECT_SOURCE_DIR}/others/MVCAMSDK_X64.lib") +ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Darwin") + MESSAGE(STATUS "current platform: Mac") + TARGET_LINK_LIBRARIES(${BIN_NAME} "${PROJECT_SOURCE_DIR}/others/libmvsdk.dylib") +ELSE () + MESSAGE(STATUS "Unsupport platform: ${CMAKE_SYSTEM_NAME}") +ENDIF() + +ADD_CUSTOM_TARGET(create-startup COMMAND "${PROJECT_SOURCE_DIR}/tools/create-startup.sh" "${PROJECT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}") +ADD_CUSTOM_TARGET(train-cnn COMMAND "gnome-terminal" "--" "bash" "-c" "${PROJECT_SOURCE_DIR}/tools/TrainCNN/backward.py") \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8510013 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 xinyang + +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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..ef1a302 --- /dev/null +++ b/README.md @@ -0,0 +1,187 @@ +# 上海交通大学 RoboMaster 2019赛季 视觉代码 + +本代码是上海交通大学RoboMaster2019赛季步兵车辆的视觉部分,分为三个模块:**装甲板识别**,**能量机关**,以及**封装的设备驱动和配置文件**。可以提取能量机关以外的模块并修改main函数直接作为哨兵识别代码。 + +本代码统一使用**640×480**大小的图像进行处理 + +| 作者 | 负责部分 | 微信号 | +| ------ | -------------- | -------------------- | +| 唐欣阳 | 自瞄装甲板识别 | xinyang_tang | +| 卫志坤 | 自瞄装甲板识别 | | +| 孙加桐 | 能量机关识别 | SJTxixiliadorabarryU | +| 罗嘉鸣 | 能量机关识别 | | + +**如有BUG或者想交流的朋友欢迎积极联系我们** + +**分享部分比赛时摄像头录制的视频:** + +链接: https://pan.baidu.com/s/1LwxEpeYYblX3cSzb59MTVg 提取码: 84ju 复制这段内容后打开百度网盘手机App,操作更方便哦 + +--- + +运行效果:自瞄帧率120(摄像头最大帧率),识别距离根据环境不同大约8米左右(5mm焦距镜头)。 + +![front](https://github.com/lloi7/SJTU-RM-CV-2019/blob/master/picture0.png) +![side](https://github.com/lloi7/SJTU-RM-CV-2019/blob/master/picture1.png) + +## 一、代码运行环境 + +| 硬件设备 | 操作系统 | 运行库 | ToolChain | +| ---------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------- | +| IntelNUC
MindVision工业相机×1
USB转TTL×1 | Ubuntu18.04
Ubuntu16.04
Windows10 | OpenCV3.4.5
OpenCV_contrib3.4.5
Eigen3
MindVision相机驱动 | Ubuntu18/16 : cmake3+gcc7+g++7
Win10 : cmake3+VS2019 | + +MindVision相机型号:MV-UBS31GC + +**关于Windows环境下的运行支持,仅保证程序可以编译运行。对与部分辅助功能,如生成自启动脚本则不支持。** + +**实际装载在步兵和哨兵上的运行环境为Ubuntu18.04。** + +相机驱动下载地址:[相机驱动](https://www.mindvision.com.cn) + +OpenCV下载地址:[OpenCV](https://github.com/opencv) + +OpenCV安装教程 : [linux](https://docs.opencv.org/3.4.5/d7/d9f/tutorial_linux_install.html) [Windows](https://docs.opencv.org/3.4.5/d3/d52/tutorial_windows_install.html) + +Eigen下载方法: +* Ubuntu16/18: ```sudo apt install libeigen3-dev``` +* Windows10 : [Eigen下载地址](http://eigen.tuxfamily.org/) + +## 二、程序编译运行以及调试方式 + +### 1.编译运行 + +* Ubuntu16/18(在项目文件夹下) + +```shell +mkdir build +cd build +cmake .. +make -j8 +sudo ./run +``` + +* Windows10 + + 打开cmake-gui,选择项目文件夹和build文件夹,生成VS工程。在VS中编译项目。 + +### 2.调试方式 + +```./run --help```可以查看所有命令行参数及其作用。所有调试选项都集成到了命令行参数中。 + +**不使用任何参数直接运行将没有任何图像显示。** + +需要调参的部分:主要需要根据车辆情况而调参的参数存放在others/include/config/setconfig.h中 + +### 3.工作条件 + +* 对于自瞄,由于使用了数字识别,务必保证光照充足,图像上数字清晰可见。光照不足时,调整摄像头曝光或增益数值,直到数字清晰可见。 +* 务必保证摄像头焦距正确,同时镜片干净无污物。 + +## 三、文件目录结构 +``` +. +├── armor // 存放自瞄主要算法代码 +│ ├── include // 自瞄头文件 +│ └── src // 自瞄源码 +├── CMakeLists.txt // cmake工程文件 +├── energy // 存放能量机关主要算法代码 +│ ├── include // 能量机关头文件 +│ └── src // 能量机关源码 +├── main.cpp // 主函数 +├── others // 存放摄像头、串口、配置文件等 +│ ├── include // others头文件 +│ ├── libmvsdk.dylib // mac相机驱动链接库 +│ ├── libMVSDK.so // linux相机驱动链接库 +│ ├── MVCAMSDK_X64.dll // win10相机驱动链接库 +│ ├── MV-UB31-Group0.config // 相机配置文件 +│ └── src // others源码 +└── tools // 存放分类器训练代码及参数,自启动脚步等 + ├── auto-pull.sh // 自动代码更新脚本 + ├── create-startup.sh // 自启动文件创建脚本 + ├── monitor.bat // win10进程守护脚本 + ├── monitor.sh // linux进程守护脚本 + ├── para // 分类器参数 + └── TrainCNN // 分类器训练源码 +``` +## 四、关键类解析 + +| 类名 | 主要成员 | 主要接口 | 类的作用 | +| --------------- | ------------------------------------------------------------ | ---------------------- | ------------------------------------------------------- | +| ArmorFinder | 过多,不做赘述 | void run(cv::Mat &src) | 将一帧图像中装甲板的detection以及数据发送封装为一个类 | +| Energy | 过多,不做赘述 | void run(cv::Mat &src) | 将一帧图像中能量机关的detection以及数据发送封装为一个类 | +| EnergyPartParam | 过多,不做赘述 | 无 | 能量机关所有参数的集合 | +| LightBlob | 灯条位置
灯条颜色 | 无 | 灯条类定义 | +| ArmorBox | 装甲板位置
装甲板的两个灯条
装甲板颜色
装甲板数字id | 无 | 装甲板类定义 | + +## 五、程序运行基本流程 + +            ↗ 大能量机关 ↘ + +各项初始化→读取当前状态 → 小能量机关 → 回到读取状态 + +  ↓         ↘  自瞄  ↗ + +数据接收线程 + +## 六、识别方式 + +### 1.自瞄装甲板识别方式 + +​ 首先对图像进行通道拆分以及二值化操作,再进行开闭运算,通过边缘提取和条件限制得出可能为灯条的部分。再对所有可能的灯条进行两两匹配,根据形状大小特性进行筛选,得出可能为装甲板的候选区。然后把所有候选区交给分类器判断,得出真实的装甲板及其数字id。最后根据优先级选取最终击打目标以及后续处理。 +​ ![autoaim](https://github.com/lloi7/SJTU-RM-CV-2019/blob/master/自瞄流程图.png) +### 2.能量机关识别方式 + +​ 首先对图像进行二值化操作,然后进行一定腐蚀和膨胀,通过边缘提取和条件限制得出待击打叶片(锤子形)。在待击打叶片范围内进一步用类似方法寻找目标装甲板和流动条,在二者连线上寻找中心的“R”。根据目标装甲板坐标和中心坐标计算极坐标系下的目标角度,进而预测待击打点的坐标(小符为装甲板本身,大符需要旋转)。最后将待击打点坐标和图像中心的差值转换为yaw和pitch轴角度,增加一环PID后发送给云台主控板。 + +## 七、通信协议 + +### 1.通信方式 + +使用USB转TTL进行串口通信 + +### 2.数据接收结构体 + +```c++ +struct McuData { + float curr_yaw; // 当前云台yaw角度 + float curr_pitch; // 当前云台pitch角 + uint8_t state; // 当前状态,自瞄-大符-小符 + uint8_t mark; // 云台角度标记位 + uint8_t anti_top; // 是否为反陀螺模式 + uint8_t enemy_color; // 敌方颜色 + int delta_x; // 能量机关x轴补偿量 + int delta_y; // 能量机关y轴补偿量 +}; +``` + +每个数据帧后使用字符```'\n'```作为帧尾标志 + +### 3.数据发送结构体 + +```c++ +struct SendData { + char start_flag; // 帧头标志,字符's' + int16_t yaw; // float类型的实际角度(以度为单位)/100*(32768-1) + int16_t pitch; // float类型的实际角度(以度为单位)/100*(32768-1) + uint16_t shoot_delay; // 反陀螺模式下的发射延迟 + char end_flag; // 帧尾标识,字符'e' +}; +``` + +实际发送代码中没有使用这个结构体,而是使用uint8_t类型数组直接赋值代替 + +## 八、代码命名规范 + +函数名:使用首字母小写的驼峰命名法 + +类型名:使用首字母大写的驼峰命名法 + +变量名:使用下划线分割命名法 + +## 九、未来的优化方向 +* 基于灯条的候选区生成由于利用了灯条在其附近区域亮度是最高的这一先验知识,当摄像头曝光和增益较高,同时灯条旁边有其他较亮的物体(如反光、光晕过大等),该灯条将无法被识别。反应在算法上即体现在二值化这一步骤之上。所以本项目采用多二值化阈值同时进行灯条提取最后进行合并的办法,有一定改善,但没有解决本质问题。**所以第一个优化方向便是环境适应力更强的灯条提取或者候选区提取**。 +* 代码中使用CNN分类器对灯条候选区进行筛选以及数字识别,但分类器总是不能做到100%的正确率,同时许多明显为背景的候选区有时也会被误判成装甲板,导致误识别。**所以第二个优化方向是更低的误识别率(可以从候选区生成入手或者从分类器入手)**。 +* 由于陀螺这样的机械设计基本上是强队的标准配置,所以我们也首次尝试了从视觉层面对陀螺有一个专门的击打方式,但实际应用场景较少(当前仅针对原地旋转的陀螺),且对操作手不太友好(要求手动对准陀螺中心),所以没有取得很大的实战价值。**所以第三个优化方向便是一个有着自动击打动态陀螺的系统**。 + +--- +**觉得对你有帮助请点个STAR哦:)** diff --git a/armor/include/armor_finder/armor_finder.h b/armor/include/armor_finder/armor_finder.h new file mode 100644 index 0000000..13b052f --- /dev/null +++ b/armor/include/armor_finder/armor_finder.h @@ -0,0 +1,155 @@ +// +// Created by xinyang on 19-3-27. +// + +#ifndef _ARMOR_FINDER_H_ +#define _ARMOR_FINDER_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define BLOB_RED ENEMY_RED +#define BLOB_BLUE ENEMY_BLUE + +#define BOX_RED ENEMY_RED +#define BOX_BLUE ENEMY_BLUE + +#define IMAGE_CENTER_X (640) +#define IMAGE_CENTER_Y (512-20) + +#define DISTANCE_HEIGHT_5MM (10700.0) // 单位: cm*pixel +#define DISTANCE_HEIGHT DISTANCE_HEIGHT_5MM + +#define B1 1 +#define B2 2 +#define B3 3 +#define B4 4 +#define B5 5 +#define B7 6 +#define B8 7 +#define R1 8 +#define R2 9 +#define R3 10 +#define R4 11 +#define R5 12 +#define R7 13 +#define R8 14 + +extern std::map id2name; //装甲板id到名称的map +extern std::map name2id; //装甲板名称到id的map +extern std::map prior_blue; +extern std::map prior_red; + + +/******************* 灯条类定义 ***********************/ +class LightBlob { +public: + cv::RotatedRect rect; //灯条位置 + double area_ratio; + double length; //灯条长度 + uint8_t blob_color; //灯条颜色 + + LightBlob(cv::RotatedRect &r, double ratio, uint8_t color) : rect(r), area_ratio(ratio), blob_color(color) { + length = max(rect.size.height, rect.size.width); + }; + LightBlob() = default; +}; + +typedef std::vector LightBlobs; + + + +/******************* 装甲板类定义 **********************/ +class ArmorBox{ +public: + typedef enum{ + FRONT, SIDE, UNKNOWN + } BoxOrientation; + + cv::Rect2d rect; + LightBlobs light_blobs; + uint8_t box_color; + int id; + std::vector points; // 4 corner points for PnP + + explicit ArmorBox(const cv::Rect &pos=cv::Rect2d(), const LightBlobs &blobs=LightBlobs(), uint8_t color=0, int i=0, const std::vector &pts = {}); + + cv::Point2f getCenter() const; // 获取装甲板中心 + double getBlobsDistance() const; // 获取两个灯条中心间距 + double lengthDistanceRatio() const; // 获取灯条中心距和灯条长度的比值 + double getBoxDistance() const; // 获取装甲板到摄像头的距离 + BoxOrientation getOrientation() const; // 获取装甲板朝向(误差较大,已弃用) + + bool operator<(const ArmorBox &box) const; // 装甲板优先级比较 +}; + +typedef std::vector ArmorBoxes; + +/********************* 自瞄类定义 **********************/ +class ArmorFinder{ +public: + ArmorFinder(uint8_t &color, Serial &u, const string ¶s_folder, const uint8_t &anti_top); + ~ArmorFinder() = default; + +private: + typedef cv::TrackerKCF TrackerToUse; // Tracker类型定义 + + typedef enum{ + SEARCHING_STATE, TRACKING_STATE, STANDBY_STATE + } State; // 自瞄状态枚举定义 + + systime frame_time; // 当前帧对应时间 + const uint8_t &enemy_color; // 敌方颜色,引用外部变量,自动变化 + const uint8_t &is_anti_top; // 进入反陀螺,引用外部变量,自动变化 + State state; // 自瞄状态对象实例 + ArmorBox target_box, last_box; // 目标装甲板 + int anti_switch_cnt; // 防止乱切目标计数器 + cv::Ptr tracker; // tracker对象实例 + Classifier classifier; // CNN分类器对象实例,用于数字识别 + int contour_area; // 装甲区域亮点个数,用于数字识别未启用时判断是否跟丢(已弃用) + int tracking_cnt; // 记录追踪帧数,用于定时退出追踪 + Serial &serial; // 串口对象 + auto_aim::Solver solver; // PnP求解器 + + systime last_front_time; // 上次陀螺正对时间 + int anti_top_cnt; + RoundQueue top_periodms; // 陀螺周期循环队列 + vector time_seq; // 一个周期内的时间采样点 + vector angle_seq; // 一个周期内的角度采样点 + + float yaw_rotation, pitch_rotation;//云台yaw轴和pitch轴应该转到的角度 + float last_yaw, last_pitch;//PID中微分项 + float sum_yaw, sum_pitch;//yaw和pitch的累计误差,即PID中积分项 + + bool findLightBlobs(const cv::Mat &src, LightBlobs &light_blobs); + bool findArmorBox(const cv::Mat &src, ArmorBox &box); + bool matchArmorBoxes(const cv::Mat &src, const LightBlobs &light_blobs, ArmorBoxes &armor_boxes); + + bool stateSearchingTarget(cv::Mat &src); // searching state主函数 + bool stateTrackingTarget(cv::Mat &src); // tracking state主函数 + bool stateStandBy(); // stand by state主函数(已弃用) + + void antiTop(double dist_m, double pitch_imu_deg); // 反小陀螺 + cv::Point3f getTarget3D(const ArmorBox &box); // 获取目标的3D坐标 (相对于相机) + + bool sendBoxPosition(uint16_t shoot_delay); // 发送装甲板位置 + bool shouldFire() const { return can_fire; } // 获取开火建议 +public: + void run(cv::Mat &src); // 自瞄主函数 + struct HistoryItem { + cv::Point3f pos; + double time; + }; + std::vector history; // 历史位置缓存,用于速度预测 + cv::Point3f target_xyz; // PnP计算出的目标3D坐标 (cm) + bool can_fire; // 是否满足开启射击条件 +}; + +#endif /* _ARMOR_FINDER_H_ */ + diff --git a/armor/include/armor_finder/classifier/armor.hpp b/armor/include/armor_finder/classifier/armor.hpp new file mode 100644 index 0000000..2370118 --- /dev/null +++ b/armor/include/armor_finder/classifier/armor.hpp @@ -0,0 +1,27 @@ +#ifndef AUTO_AIM__ARMOR_HPP +#define AUTO_AIM__ARMOR_HPP + +#include +#include +#include + +namespace auto_aim +{ +enum class ArmorType { small, big }; +enum class ArmorName { NO, B1, B2, B3, B4, B5, B7, B8, R1, R2, R3, R4, R5, R7, R8, outpost }; + +struct Armor { + ArmorType type; + ArmorName name; + std::vector points; + Eigen::Vector3d xyz_in_gimbal; + Eigen::Vector3d xyz_in_world; + Eigen::Vector3d ypr_in_gimbal; + Eigen::Vector3d ypr_in_world; + Eigen::Vector3d ypd_in_world; + double yaw_raw; +}; + +} // namespace auto_aim + +#endif // AUTO_AIM__ARMOR_HPP diff --git a/armor/include/armor_finder/classifier/classifier.h b/armor/include/armor_finder/classifier/classifier.h new file mode 100644 index 0000000..8c7c4ea --- /dev/null +++ b/armor/include/armor_finder/classifier/classifier.h @@ -0,0 +1,58 @@ +// +// Created by xinyang on 19-4-19. +// +// 为了一时方便,使用循环和Eigen自行编写的CNN前向传播类。 +// 没有显著的性能损失。 +// 但类定义了网络结构,同时实现的操作较少,可扩展性较差 + +#ifndef _CLASSIFIER_H_ +#define _CLASSIFIER_H_ + +#include +#include +#include +#include +#include + +using namespace std; +using namespace Eigen; + +class Classifier { +private: + bool state; // 标志分类器是否正确初始化 + + // 所有网络参数 + vector> conv1_w, conv2_w, conv3_w; + vector conv1_b, conv2_b, conv3_b; + MatrixXd fc1_w, fc2_w; + VectorXd fc1_b, fc2_b; + // 读取网络参数的函数 + vector> load_conv_w(const string &file); + vector load_conv_b(const string &file); + MatrixXd load_fc_w(const string &file); + VectorXd load_fc_b(const string &file); + // 目前支持的所有操作 + MatrixXd softmax(const MatrixXd &input); + MatrixXd relu(const MatrixXd &input); + MatrixXd leaky_relu(const MatrixXd &input, float alpha); + vector> apply_bias(const vector> &input, const vector &bias); + vector> relu(const vector> &input); + vector> leaky_relu(const vector> &input, float alpha); + vector> max_pool(const vector> &input, int size); + vector> mean_pool(const vector> &input, int size); + vector> pand(const vector> &input, int val); + MatrixXd conv(const MatrixXd &filter, const MatrixXd &input); + vector> conv2(const vector> &filter, const vector> &input); + MatrixXd flatten(const vector> &input); + +public: + explicit Classifier(const string &folder); + ~Classifier() = default; + + MatrixXd calculate(const vector> &input); + explicit operator bool() const; + int operator()(const cv::Mat &image); +}; + + +#endif /* _CLASSIFIER_H */ diff --git a/armor/include/armor_finder/classifier/solver.h b/armor/include/armor_finder/classifier/solver.h new file mode 100644 index 0000000..602af72 --- /dev/null +++ b/armor/include/armor_finder/classifier/solver.h @@ -0,0 +1,48 @@ +#ifndef AUTO_AIM__SOLVER_HPP +#define AUTO_AIM__SOLVER_HPP + +#include // 必须在opencv2/core/eigen.hpp上面 +#include +#include + +#include "armor.hpp" + +namespace auto_aim +{ +class Solver +{ +public: + explicit Solver(const std::string & config_path); + + Eigen::Matrix3d R_gimbal2world() const; + + void set_R_gimbal2world(const Eigen::Quaterniond & q); + + void solve(Armor & armor) const; + + std::vector reproject_armor( + const Eigen::Vector3d & xyz_in_world, double yaw, ArmorType type, ArmorName name) const; + + double oupost_reprojection_error(Armor armor, const double & picth); + + std::vector world2pixel(const std::vector & worldPoints); + +private: + cv::Mat camera_matrix_; + cv::Mat distort_coeffs_; + Eigen::Matrix3d R_gimbal2imubody_; + Eigen::Matrix3d R_camera2gimbal_; + Eigen::Vector3d t_camera2gimbal_; + Eigen::Matrix3d R_gimbal2world_; + + void optimize_yaw(Armor & armor) const; + + double armor_reprojection_error(const Armor & armor, double yaw, const double & inclined) const; + double SJTU_cost( + const std::vector & cv_refs, const std::vector & cv_pts, + const double & inclined) const; +}; + +} // namespace auto_aim + +#endif // AUTO_AIM__SOLVER_HPP \ No newline at end of file diff --git a/armor/include/show_images/auto_trigger.h b/armor/include/show_images/auto_trigger.h new file mode 100644 index 0000000..0211607 --- /dev/null +++ b/armor/include/show_images/auto_trigger.h @@ -0,0 +1,61 @@ +#ifndef AUTO_TRIGGER_H +#define AUTO_TRIGGER_H + +#include +#include +#include +#include +#include + +/** + * @brief 自动扳机逻辑类,负责发射时机决策。 + */ +class AutoTrigger { +public: + /** + * @brief 自动扳机决策函数 + * @param armor_finder 当前自瞄主对象 (用于获取历史轨迹) + * @param v0 弹丸初速度 + * @param gimbal_yaw 当前云台实时自瞄角偏移 (Yaw, 度) + * @param gimbal_pitch 当前云台实时自瞄角偏移 (Pitch, 度) + * @return true 目标与预测弹着点重合,建议击发 + */ + static bool should_fire(const ArmorFinder &armor_finder, double v0, double gimbal_yaw, double gimbal_pitch) { + if (armor_finder.history.size() < 3) return false; // 轨迹点不足,不预测 + + // 1. 获取目标当前的 3D 状态 (相对于相机) + const auto &latest = armor_finder.history.back(); + double dist = latest.pos.z / 100.0; // cm -> m + + // 2. 估计目标速度 (简单线性回归或两点差分) + const auto &first = armor_finder.history.front(); + double dt = latest.time - first.time; + if (dt <= 0) return false; + + cv::Point3f velocity = (latest.pos - first.pos) * (1.0 / dt); // cm/s + + // 3. 计算飞行时间 (单位: s) + double t_flight = BallisticSolver::get_flight_time(dist, -gimbal_pitch, v0, BALLISTIC_K); + double t_total = t_flight + SYSTEM_DELAY / 1000.0; + + // 4. 预测目标未来的位置 (cm) + cv::Point3f pos_pred = latest.pos + velocity * t_total; + + // 5. 将预测位置映射回像素坐标 (用于判断重合) + double x_pred_pixel = pos_pred.x * FOCUS_PIXAL / pos_pred.z + IMAGE_CENTER_X; + double y_pred_pixel = pos_pred.y * FOCUS_PIXAL / pos_pred.z + IMAGE_CENTER_Y; + + // 6. 推断弹着点偏移 (像素级) + // 理想打击点应该就在相机中心 (自瞄已经对准补差后的位置) + // 但是我们需要判断当前云台的 "指向误差" 是否足够小 + double dist_to_center = sqrt(pow(x_pred_pixel - IMAGE_CENTER_X, 2) + pow(y_pred_pixel - IMAGE_CENTER_Y, 2)); + + // 7. 动态阈值判定 (依据目标距离和装甲板大小) + // 距离越远,允许的像素误差越小 + double threshold = 200.0 / (dist + 0.001); // 示例阈值:5米处允许40像素误差 + + return dist_to_center < threshold; + } +}; + +#endif // AUTO_TRIGGER_H diff --git a/armor/include/show_images/ballistic_predicition.h b/armor/include/show_images/ballistic_predicition.h new file mode 100644 index 0000000..562d9a6 --- /dev/null +++ b/armor/include/show_images/ballistic_predicition.h @@ -0,0 +1,97 @@ +/* + *** 此文件用于hero弹道着落点位,通过3D建模以及理论发弹速度以及后期轨道修正手段 *** + *** 实现对敌方装甲板的精准打击 *** +*/ + +#ifndef BALLISTIC_PREDICITION_H +#define BALLISTIC_PREDICITION_H + +#include +#include + +/** + * 弹着点计算结果 + */ +struct ImpactPoint { + Eigen::Vector3d xyz_in_camera; // 弹着点在相机坐标系中的位置 (m) + double flight_time; // 弹丸飞行时间 (s) +}; + +/** + * @brief 弹道计算类:根据 IMU 当前 pitch 和追踪装甲板距离, + * 推算弹着点在相机坐标系中的三维坐标。 + * + * 坐标系约定(与 solver.cpp 一致): + * 世界系: x=前, y=左, z=上 + * 相机系: z=前, x=右, y=下(OpenCV 标准) + */ +class BallisticSolver { +public: + /** + * @brief 根据水平距离和垂直高度差,迭代求解补偿 pitch 角。 + * @param d 水平距离 (m) + * @param y 垂直高度差 (m,目标高于枪口为正) + * @param v0 枪口初速度 (m/s) + * @param k 空气阻力系数 + * @return 补偿后的 pitch 角 (度) + */ + static double get_pitch(double d, double y, double v0, double k = 0.1); + + /** + * @brief 计算弹丸飞行时间。 + * @param d 目标水平距离 (m,由追踪装甲板获得) + * @param pitch 当前 IMU pitch 角 (度,仰为正) + * @param v0 枪口初速度 (m/s) + * @param k 空气阻力系数 + * @return 弹丸飞行时间 (s) + */ + static double get_flight_time(double d, double pitch, double v0, double k = 0.1); + + /** + * @brief 根据当前 IMU pitch 角推算弹丸在水平距离 d 处的垂直高度。 + * @param d 目标水平距离 (m) + * @param pitch 当前 IMU pitch 角 (度,仰为正) + * @param v0 枪口初速度 (m/s) + * @param k 空气阻力系数 + * @return 弹着点相对枪口的垂直高度 (m,高于枪口为正) + */ + static double get_impact_y(double d, double pitch, double v0, double k = 0.1); + + /** + * [TEST] 用于验证弹道算法正确性:将弹着点反解算到相机坐标系, + * 再通过 project_to_pixel 投影到像素并用红点显示。 + * 如果实验结果正确,可直接注释调用处,不影响其他结构。 + * + * 坐标变换链: + * xyz_camera = R_c2g^T * (R_g2w^T * xyz_world - t_c2g) + * + * @param xyz_in_world 目标在世界坐标系中的位置 (m,来自 PnP Solver) + * @param pitch_imu 当前 IMU pitch 角 (度,仰为正) + * @param v0 枪口初速度 (m/s) + * @param R_camera2gimbal 相机到云台的旋转矩阵 + * @param R_gimbal2world 云台到世界的旋转矩阵 + * @param t_camera2gimbal 相机原点在云台系中的平移向量 (m) + * @param k 空气阻力系数 + * @return ImpactPoint { 弹着点相机坐标(m), 飞行时间(s) } + */ + static ImpactPoint get_impact_in_camera( + const Eigen::Vector3d& xyz_in_world, + double pitch_imu, + double v0, + const Eigen::Matrix3d& R_camera2gimbal, + const Eigen::Matrix3d& R_gimbal2world, + const Eigen::Vector3d& t_camera2gimbal, + double k = 0.1); + + /** + * [TEST] 将相机坐标系3D点简化投影到像素坐标(针孔模型,无畲变)。 + * @param xyz_in_camera 弹着点在相机坐标系中的位置 (m) + * @param camera_matrix OpenCV 相机内参矩阵 (3x3 CV_64F) + * @return 像素坐标 + */ + static cv::Point2f project_to_pixel( + const Eigen::Vector3d& xyz_in_camera, + const cv::Mat& camera_matrix); +}; + +#endif // BALLISTIC_PREDICITION_H diff --git a/armor/include/show_images/show_images.h b/armor/include/show_images/show_images.h new file mode 100644 index 0000000..308309c --- /dev/null +++ b/armor/include/show_images/show_images.h @@ -0,0 +1,23 @@ +// +// Created by xinyang on 19-3-27. +// + +#ifndef _SHOW_IMAGES_H_ +#define _SHOW_IMAGES_H_ + +#include +#include + +// +void showArmorBoxes(std::string windows_name, const cv::Mat &src, const ArmorBoxes &armor_boxes); +void showArmorBox(std::string windows_name, const cv::Mat &src, const ArmorBox &armor_box); +void showLightBlobs(std::string windows_name, const cv::Mat &src, const LightBlobs &light_blobs); +void showArmorBoxesClass(std::string window_names, const cv::Mat &src, const ArmorBoxes &boxes); +void showTrackSearchingPos(std::string window_names, const cv::Mat &src, const cv::Rect2d pos); + +// [TEST] 在图像上标注弹着点(红色小圆点),用于验证弹道算法正确性。 +// 如果实验结果正确,直接注释调用处即可,不影响其他结构。 +// impact_pixel: 由 BallisticSolver::project_to_pixel() 计算得到的像素坐标。 +void showImpactPoint(const std::string& window_name, const cv::Mat& src, cv::Point2f impact_pixel); + +#endif /* _SHOW_IMAGES_H_ */ diff --git a/armor/src/armor_finder/anti_top/anti_top.cpp b/armor/src/armor_finder/anti_top/anti_top.cpp new file mode 100644 index 0000000..25554ab --- /dev/null +++ b/armor/src/armor_finder/anti_top/anti_top.cpp @@ -0,0 +1,88 @@ +// +// Created by xinyang on 19-7-15. +// + +#include +#include +#include +#include +#include + +template +static double mean(RoundQueue &vec) { + double sum = 0; + for (int i = 0; i < vec.size(); i++) { + sum += vec[i]; + } + return sum / length; +} + +static systime getFrontTime(const vector time_seq, const vector angle_seq) { + double A = 0, B = 0, C = 0, D = 0; + int len = time_seq.size(); + for (int i = 0; i < len; i++) { + A += angle_seq[i] * angle_seq[i]; + B += angle_seq[i]; + C += angle_seq[i] * time_seq[i]; + D += time_seq[i]; + cout << "(" << angle_seq[i] << ", " << time_seq[i] << ") "; + } + double b = (A * D - B * C) / (len * A - B * B); + cout << b << endl; + return b; +} + +void ArmorFinder::antiTop(double dist_m, double pitch_imu_deg) { + if (target_box.rect == cv::Rect2d()) return; + // 判断是否发生装甲目标切换。 + // 记录切换前一段时间目标装甲的角度和时间 + // 通过线性拟合计算出角度为0时对应的时间点 + // 通过两次装甲角度为零的时间差计算陀螺旋转周期 + // 根据旋转周期计算下一次装甲出现在角度为零的时间点 + if (getPointLength(last_box.getCenter() - target_box.getCenter()) > last_box.rect.height * 1.5) { + auto front_time = getFrontTime(time_seq, angle_seq); + auto once_periodms = getTimeIntervalms(front_time, last_front_time); +// if (abs(once_periodms - top_periodms[-1]) > 50) { +// sendBoxPosition(0); +// return; +// } + LOGM(STR_CTR(WORD_GREEN, "Top period: %.1lf"), once_periodms); + top_periodms.push(once_periodms); + auto periodms = mean(top_periodms); + systime curr_time; + getsystime(curr_time); + + // 飞行时间补偿(ms) + double fly_time_ms = BallisticSolver::get_flight_time( + dist_m, pitch_imu_deg, MUZZLE_VELOCITY, BALLISTIC_K) * 1000.0; + constexpr double sys_delay_ms = SYSTEM_DELAY; // setconfig.h 默认 50 ms + + // 修正公式:子弹命中时刻 = 发令时刻 + shoot_delay + sys_delay + fly_time + // 令子弹命中时刻 = front_time + periodms×2 + int32_t delay_raw = static_cast( + front_time + periodms * 2 - curr_time - sys_delay_ms - fly_time_ms); + + // 若错过当前窗口(delay_raw < 0),顺延一个周期 + uint16_t shoot_delay = (delay_raw > 0) + ? static_cast(delay_raw) + : static_cast(delay_raw + static_cast(periodms)); + if (anti_top_cnt < 4) { + sendBoxPosition(0); + } else if (abs(once_periodms - top_periodms[-1]) > 50) { + sendBoxPosition(0); + } else { + sendBoxPosition(shoot_delay); + } + time_seq.clear(); + angle_seq.clear(); + last_front_time = front_time; + } else { + time_seq.emplace_back(frame_time); + double dx = target_box.rect.x + target_box.rect.width / 2 - IMAGE_CENTER_X; + double yaw = atan(dx / FOCUS_PIXAL) * 180 / PI; + angle_seq.emplace_back(yaw); + sendBoxPosition(0); + } + anti_top_cnt++; +} + diff --git a/armor/src/armor_finder/armor_box/armor_box.cpp b/armor/src/armor_finder/armor_box/armor_box.cpp new file mode 100644 index 0000000..3ee0899 --- /dev/null +++ b/armor/src/armor_finder/armor_box/armor_box.cpp @@ -0,0 +1,99 @@ +// +// Created by xinyang on 19-7-13. +// + +#include +#include + +ArmorBox::ArmorBox(const cv::Rect &pos, const LightBlobs &blobs, uint8_t color, int i, const std::vector &pts) : + rect(pos), light_blobs(blobs), box_color(color), id(i), points(pts) {}; + +// 获取装甲板中心点 +cv::Point2f ArmorBox::getCenter() const { + return cv::Point2f( + rect.x + rect.width / 2, + rect.y + rect.height / 2 + ); +} + +// 获取两个灯条中心点的间距 +double ArmorBox::getBlobsDistance() const { + if (light_blobs.size() == 2) { + auto &x = light_blobs[0].rect.center; + auto &y = light_blobs[1].rect.center; + return sqrt((x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y)); + } else { + return 0; + } +} + +// 获取灯条长度和间距的比例 +double ArmorBox::lengthDistanceRatio() const { + if (light_blobs.size() == 2) { + return max(light_blobs[0].length, light_blobs[1].length) + / getBlobsDistance(); + } else { + return 100; + } +} + +// 计算装甲板到摄像头的距离 +double ArmorBox::getBoxDistance() const { + if (light_blobs.size() == 2) { + return DISTANCE_HEIGHT / 2 / max(light_blobs[0].length, light_blobs[1].length); + } else { + return DISTANCE_HEIGHT / rect.height; + } +} + +// 判断装甲板的正对还是侧对(已弃用,误差过大) +ArmorBox::BoxOrientation ArmorBox::getOrientation() const { + if (light_blobs.size() != 2) { + return UNKNOWN; + } + switch (id) { + case R1: + case R7: + case R8: + case B1: + case B7: + case B8: + if (lengthDistanceRatio() < 0.26) { + return FRONT; + } else { + return SIDE; + } + case R2: + case R3: + case R4: + case R5: + case B2: + case B3: + case B4: + case B5: + if (lengthDistanceRatio() < 0.51) { + return FRONT; + } else { + return SIDE; + } + default: + return UNKNOWN; + } +} +// 装甲板的优先级比较 +bool ArmorBox::operator<(const ArmorBox &box) const { + if (id != box.id) { + if (box_color == BOX_BLUE) { + return prior_blue[id2name[id]] < prior_blue[id2name[box.id]]; + } else { + return prior_red[id2name[id]] < prior_red[id2name[box.id]]; + } + } else { + auto d1 = (rect.x - IMAGE_CENTER_X) * (rect.x - IMAGE_CENTER_X) + + (rect.y - IMAGE_CENTER_Y) * (rect.y - IMAGE_CENTER_Y); + auto d2 = (box.rect.x - IMAGE_CENTER_X) * (box.rect.x - IMAGE_CENTER_X) + + (box.rect.y - IMAGE_CENTER_Y) * (box.rect.y - IMAGE_CENTER_Y); + return d1 < d2; + } +} + diff --git a/armor/src/armor_finder/armor_finder.cpp b/armor/src/armor_finder/armor_finder.cpp new file mode 100644 index 0000000..643850d --- /dev/null +++ b/armor/src/armor_finder/armor_finder.cpp @@ -0,0 +1,148 @@ +// +// Created by xinyang on 19-3-27. +// + +/*===========================================================================*/ +/* 使用本代码的兵种 */ +/*===========================================================================*/ +/* _______________ _______________ _______________ _______________ */ +/* | _____ | | _ _ | | ____ | | _____ | */ +/* || |___ / || || | || | || || | ___| || || |___ | || */ +/* || |_ \ || || | || |_ || || |___ \ || || / / || */ +/* || ___) | || || |__ _| || || ___) | || || / / || */ +/* || |____/ || || |_| || || |____/ || || /_/ || */ +/* |_______________| |_______________| |_______________| |_______________| */ +/* */ +/*===========================================================================*/ + +#define LOG_LEVEL LOG_NONE +#include +#include +#include +#include +#include + +std::map id2name = { //装甲板id到名称的map + {-1, "OO"},{ 0, "NO"}, + { 1, "B1"},{ 2, "B2"},{ 3, "B3"},{ 4, "B4"},{ 5, "B5"},{ 6, "B7"},{ 7, "B8"}, + { 8, "R1"},{ 9, "R2"},{10, "R3"},{11, "R4"},{12, "R5"},{13, "R7"},{14, "R8"}, +}; + +std::map name2id = { //装甲板名称到id的map + {"OO", -1},{"NO", 0}, + {"B1", 1},{"B2", 2},{"B3", 3},{"B4", 4},{"B5", 5},{"B7", 6},{"B8", 7}, + {"R1", 8},{"R2", 9},{"R3", 10},{"R4", 11},{"R5", 12},{"R7", 13},{"R8", 14}, +}; + +std::map prior_blue = { + {"B8", 0}, {"B1", 1}, {"B3", 2}, {"B4", 2}, {"B5", 2}, {"B7", 3}, {"B2", 4}, + {"R8", 5}, {"R1", 6}, {"R3", 7}, {"R4", 7}, {"R5", 7}, {"R7", 8}, {"R2", 9}, + {"NO", 10}, +}; + +std::map prior_red = { + {"R8", 0}, {"R1", 1}, {"R3", 2}, {"R4", 2}, {"R5", 2}, {"R7", 3}, {"R2", 4}, + {"B8", 5}, {"B1", 6}, {"B3", 7}, {"B4", 7}, {"B5", 7}, {"B7", 8}, {"B2", 9}, + {"NO", 10}, +}; + +ArmorFinder::ArmorFinder(uint8_t &color, Serial &u, const string ¶s_folder, const uint8_t &anti_top) : + serial(u), + enemy_color(color), + is_anti_top(anti_top), + state(STANDBY_STATE), + anti_switch_cnt(0), + classifier(paras_folder), + contour_area(0), + tracking_cnt(0), + solver(PROJECT_DIR"/others/solver_config.yml") { +} + +void ArmorFinder::run(cv::Mat &src) { + getsystime(frame_time); // 获取当前帧时间(不是足够精确) +// stateSearchingTarget(src); // for debug +// goto end; + switch (state) { + case SEARCHING_STATE: + if (stateSearchingTarget(src)) { + if ((target_box.rect & cv::Rect2d(0, 0, 640, 480)) == target_box.rect) { // 判断装甲板区域是否脱离图像区域 + if (!classifier) { /* 如果分类器不可用 */ + cv::Mat roi = src(target_box.rect).clone(), roi_gray; /* 就使用装甲区域亮点数判断是否跟丢 */ + cv::cvtColor(roi, roi_gray, cv::COLOR_RGB2GRAY); + cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY); + contour_area = cv::countNonZero(roi_gray); + } + tracker = TrackerToUse::create(); // 成功搜寻到装甲板,创建tracker对象 + tracker->init(src, target_box.rect); + state = TRACKING_STATE; + tracking_cnt = 0; + LOGM(STR_CTR(WORD_LIGHT_CYAN, "into track")); + } + } + break; + case TRACKING_STATE: + if (!stateTrackingTarget(src) || ++tracking_cnt > 100) { // 最多追踪100帧图像 + state = SEARCHING_STATE; + LOGM(STR_CTR(WORD_LIGHT_YELLOW, "into search!")); + } + break; + case STANDBY_STATE: + default: + stateStandBy(); // currently meaningless + } +end: + if(is_anti_top) { // 判断当前是否为反陀螺模式 + // dist_m: 目标水平距离(m),由 target_xyz (cm) 计算 + double dist_m = std::sqrt( + target_xyz.x * target_xyz.x + target_xyz.z * target_xyz.z) / 100.0; + // TODO: pitch_imu_deg 替换为从串口/IMU读入的实际 pitch 角 (度,仰为正) + double pitch_imu_deg = 0.0; + antiTop(dist_m, pitch_imu_deg); + }else if(target_box.rect != cv::Rect2d()) { + anti_top_cnt = 0; + time_seq.clear(); + angle_seq.clear(); + sendBoxPosition(0); + } + + if(target_box.rect != cv::Rect2d()){ + last_box = target_box; + } + + if (show_armor_box) { // 根据条件显示当前目标装甲板 + showArmorBox("box", src, target_box); + cv::waitKey(1); + } + + // 自动扳机位置预测逻辑:更新历史位置 + if (target_box.rect != cv::Rect2d()) { + auto_aim::Armor armor; + armor.type = (target_box.id == B1 || target_box.id == R1 || target_box.id == B2 || target_box.id == R2 || target_box.id == B7 || target_box.id == R7 || target_box.id == B8 || target_box.id == R8) ? auto_aim::ArmorType::big : auto_aim::ArmorType::small; + armor.name = static_cast(target_box.id); // This might need mapping + armor.points = target_box.points; + + // 获取当前云台位姿 (假设 mcu_data 有 q) + // solver.set_R_gimbal2world(Eigen::Quaterniond(mcu_data.q[0], mcu_data.q[1], mcu_data.q[2], mcu_data.q[3])); + + solver.solve(armor); + + target_xyz = cv::Point3f(armor.xyz_in_gimbal.x() * 100.0, armor.xyz_in_gimbal.y() * 100.0, armor.xyz_in_gimbal.z() * 100.0); // 转换为cm + cv::Point3f current_pos = target_xyz; + double current_time = static_cast(frame_time.tv_sec) + static_cast(frame_time.tv_usec) / 1e6; + history.push_back({current_pos, current_time}); + if (history.size() > 10) { // 仅保留最近10帧 + history.erase(history.begin()); + } + } else { + history.clear(); // 目标丢失,清空历史 + } +} + +cv::Point3f ArmorFinder::getTarget3D(const ArmorBox &box) { + double z = box.getBoxDistance(); // 单位: cm + double x = z * (box.getCenter().x - IMAGE_CENTER_X) / FOCUS_PIXAL; + double y = z * (box.getCenter().y - IMAGE_CENTER_Y) / FOCUS_PIXAL; + return cv::Point3f(x, y, z); +} + + diff --git a/armor/src/armor_finder/classifier/classifier.cpp b/armor/src/armor_finder/classifier/classifier.cpp new file mode 100644 index 0000000..2aba9f3 --- /dev/null +++ b/armor/src/armor_finder/classifier/classifier.cpp @@ -0,0 +1,332 @@ +// +// Created by xinyang on 19-4-19. +// +// 对本文件的大致描述请看classifier.h + +//#define LOG_LEVEL LOG_NONE +#include +#include +#include +#include + + +vector> Classifier::load_conv_w(const string &file){ + vector> result; + FILE *fp = fopen(file.data(), "r"); + if(fp == nullptr){ + LOGE("%s open fail!", file.data()); + state = false; + return result; + } + int channel_in, channel_out, row, col; + fscanf(fp, "%d %d %d %d", &channel_in, &channel_out, &row, &col); + for(int o=0; o sub; + for(int i=0; i Classifier::load_conv_b(const string &file){ + vector result; + FILE *fp = fopen(file.data(), "r"); + if(fp == nullptr){ + LOGE("%s open fail!", file.data()); + state = false; + return result; + } + int len; + fscanf(fp, "%d", &len); + for(int i=0; i> Classifier::max_pool(const vector> &input, int size){ + vector> output; + for(int sample=0; sample sub; + for (int channel = 0; channel < input[0].size(); channel++) { + MatrixXd tmp(input[0][0].rows() / size, input[0][0].cols() / size); + for (int row = 0; row < input[0][0].rows() / size; row++) { + for (int col = 0; col < input[0][0].cols() / size; col++) { + double max = 0; + for (int x = 0; x < size; x++) { + for (int y = 0; y < size; y++) { + if(max < input[sample][channel](row * size + x, col * size + y)){ + max = input[sample][channel](row * size + x, col * size + y); + } + } + } + tmp(row, col) = max; + } + } + sub.emplace_back(tmp); + } + output.emplace_back(sub); + } + return output; +} + +vector> Classifier::mean_pool(const vector> &input, int size){ + vector> output; + for(int sample=0; sample sub; + for (int channel = 0; channel < input[0].size(); channel++) { + MatrixXd tmp(input[0][0].rows() / size, input[0][0].cols() / size); + for (int row = 0; row < input[0][0].rows() / size; row++) { + for (int col = 0; col < input[0][0].cols() / size; col++) { + double val = 0; + for (int x = 0; x < size; x++) { + for (int y = 0; y < size; y++) { + val += input[sample][channel](row * size + x, col * size + y); + } + } + tmp(row, col) = val / size / size; + } + } + sub.emplace_back(tmp); + } + output.emplace_back(sub); + } + return output; +} + +vector> Classifier::apply_bias(const vector> &input, const vector &bias){ + assert(input[0].size()==bias.size()); + vector> result; + for(int samples=0; samples sub; + for(int channels=0; channels0)?(val):(0); + }); +} + +MatrixXd Classifier::leaky_relu(const MatrixXd &input, float alpha){ + return input.unaryExpr([&](double val){ + return (val>0)?(val):(alpha*val); + }); +} + +vector> Classifier::relu(const vector> &input){ + vector> result; + for(int samples=0; samples sub; + for(int channels=0; channels> Classifier::leaky_relu(const vector> &input, float alpha){ + vector> result; + for(int samples=0; samples sub; + for(int channels=0; channels> Classifier::pand(const vector> &input, int val){ + vector> result; + for(int sample=0; sample sub; + for(int channels=0; channels> Classifier::conv2(const vector> &filter, const vector> &input){ + if(filter.size() != input[0].size()){ + LOGE("shape du not match, which is filter.size=%d, input[0].size()=%d", filter.size(), input[0].size()); + exit(-1); + } + vector> result; + int result_rows = input[0][0].rows()-filter[0][0].rows()+1; + int result_cols = input[0][0].cols()-filter[0][0].cols()+1; + for(int col=0; col sub; + for(int row=0; row> &input){ + int ones = input[0][0].rows()*input[0][0].cols(); + int channels = input[0].size(); + int samples = input.size(); + int row = input[0][0].rows(); + int col = input[0][0].cols(); + MatrixXd output(channels*ones,samples); + for(int s=0; s> &input) { + vector> conv1_result = relu(apply_bias(conv2(conv1_w, input), conv1_b)); + vector> pool1_result = mean_pool(conv1_result, 2); + vector> conv2_result = relu(apply_bias(conv2(conv2_w, pool1_result), conv2_b)); + vector> pool2_result = mean_pool(conv2_result, 2); + vector> conv3_result = relu(apply_bias(conv2(conv3_w, pool2_result), conv3_b)); + MatrixXd flattened = flatten(conv3_result); + MatrixXd y1 = fc1_w * flattened; + y1.colwise() += fc1_b; + MatrixXd fc1 = relu(y1); + MatrixXd y2 = fc2_w * fc1; + y2.colwise() += fc2_b; + MatrixXd fc2 = softmax(y2); + return fc2; +} + +Classifier::operator bool() const { + return state; +} + +int Classifier::operator()(const cv::Mat &image) { + MatrixXd r, g, b; + std::vector channels; + cv::split(image, channels); + cv2eigen(channels[0], b); + cv2eigen(channels[1], g); + cv2eigen(channels[2], r); + r /= 255; + g /= 255; + b /= 255; + vector sub = {b, g, r}; + vector> in = {sub}; + MatrixXd result = calculate(in); + MatrixXd::Index minRow, minCol; + result.maxCoeff(&minRow, &minCol); + if(result(minRow, minCol) > 0.50){ + return minRow; + }else{ + return 0; + } +} diff --git a/armor/src/armor_finder/classifier/solver.cpp b/armor/src/armor_finder/classifier/solver.cpp new file mode 100644 index 0000000..bf268a1 --- /dev/null +++ b/armor/src/armor_finder/classifier/solver.cpp @@ -0,0 +1,295 @@ +#include "solver.h" + +#include + +#include + +#include "tools/logger.hpp" +#include "tools/math_tools.hpp" + +namespace auto_aim +{ +constexpr double LIGHTBAR_LENGTH = 56e-3; // m +constexpr double BIG_ARMOR_WIDTH = 230e-3; // m +constexpr double SMALL_ARMOR_WIDTH = 135e-3; // m + +const std::vector BIG_ARMOR_POINTS{ + {0, BIG_ARMOR_WIDTH / 2, LIGHTBAR_LENGTH / 2}, + {0, -BIG_ARMOR_WIDTH / 2, LIGHTBAR_LENGTH / 2}, + {0, -BIG_ARMOR_WIDTH / 2, -LIGHTBAR_LENGTH / 2}, + {0, BIG_ARMOR_WIDTH / 2, -LIGHTBAR_LENGTH / 2}}; +const std::vector SMALL_ARMOR_POINTS{ + {0, SMALL_ARMOR_WIDTH / 2, LIGHTBAR_LENGTH / 2}, + {0, -SMALL_ARMOR_WIDTH / 2, LIGHTBAR_LENGTH / 2}, + {0, -SMALL_ARMOR_WIDTH / 2, -LIGHTBAR_LENGTH / 2}, + {0, SMALL_ARMOR_WIDTH / 2, -LIGHTBAR_LENGTH / 2}}; + +Solver::Solver(const std::string & config_path) : R_gimbal2world_(Eigen::Matrix3d::Identity()) +{ + auto yaml = YAML::LoadFile(config_path); + + /* + auto R_gimbal2imubody_data = yaml["R_gimbal2imubody"].as>(); + auto R_camera2gimbal_data = yaml["R_camera2gimbal"].as>(); + auto t_camera2gimbal_data = yaml["t_camera2gimbal"].as>(); + R_gimbal2imubody_ = Eigen::Matrix(R_gimbal2imubody_data.data()); + R_camera2gimbal_ = Eigen::Matrix(R_camera2gimbal_data.data()); + t_camera2gimbal_ = Eigen::Matrix(t_camera2gimbal_data.data()); + */ + + auto camera_matrix_data = yaml["camera_matrix"].as>(); + auto distort_coeffs_data = yaml["distort_coeffs"].as>(); + Eigen::Matrix camera_matrix(camera_matrix_data.data()); + Eigen::Matrix distort_coeffs(distort_coeffs_data.data()); + cv::eigen2cv(camera_matrix, camera_matrix_); + cv::eigen2cv(distort_coeffs, distort_coeffs_); +} + +Eigen::Matrix3d Solver::R_gimbal2world() const { return R_gimbal2world_; } + +void Solver::set_R_gimbal2world(const Eigen::Quaterniond & q) +{ + Eigen::Matrix3d R_imubody2imuabs = q.toRotationMatrix(); + R_gimbal2world_ = R_gimbal2imubody_.transpose() * R_imubody2imuabs * R_gimbal2imubody_; +} + +//solvePnP(获得姿态) +void Solver::solve(Armor & armor) const +{ + const auto & object_points = + (armor.type == ArmorType::big) ? BIG_ARMOR_POINTS : SMALL_ARMOR_POINTS; + + cv::Vec3d rvec, tvec; + cv::solvePnP( + object_points, armor.points, camera_matrix_, distort_coeffs_, rvec, tvec, false, + cv::SOLVEPNP_IPPE); + + Eigen::Vector3d xyz_in_camera; + cv::cv2eigen(tvec, xyz_in_camera); + armor.xyz_in_gimbal = R_camera2gimbal_ * xyz_in_camera + t_camera2gimbal_; + armor.xyz_in_world = R_gimbal2world_ * armor.xyz_in_gimbal; + + cv::Mat rmat; + cv::Rodrigues(rvec, rmat); + Eigen::Matrix3d R_armor2camera; + cv::cv2eigen(rmat, R_armor2camera); + Eigen::Matrix3d R_armor2gimbal = R_camera2gimbal_ * R_armor2camera; + Eigen::Matrix3d R_armor2world = R_gimbal2world_ * R_armor2gimbal; + armor.ypr_in_gimbal = tools::eulers(R_armor2gimbal, 2, 1, 0); + armor.ypr_in_world = tools::eulers(R_armor2world, 2, 1, 0); + + armor.ypd_in_world = tools::xyz2ypd(armor.xyz_in_world); + + // 平衡不做yaw优化,因为pitch假设不成立 + auto is_balance = (armor.type == ArmorType::big) && + (armor.name == ArmorName::three || armor.name == ArmorName::four || + armor.name == ArmorName::five); + if (is_balance) return; + + optimize_yaw(armor); +} + +std::vector Solver::reproject_armor( + const Eigen::Vector3d & xyz_in_world, double yaw, ArmorType type, ArmorName name) const +{ + auto sin_yaw = std::sin(yaw); + auto cos_yaw = std::cos(yaw); + + auto pitch = (name == ArmorName::outpost) ? -15.0 * CV_PI / 180.0 : 15.0 * CV_PI / 180.0; + auto sin_pitch = std::sin(pitch); + auto cos_pitch = std::cos(pitch); + + // clang-format off + const Eigen::Matrix3d R_armor2world { + {cos_yaw * cos_pitch, -sin_yaw, cos_yaw * sin_pitch}, + {sin_yaw * cos_pitch, cos_yaw, sin_yaw * sin_pitch}, + { -sin_pitch, 0, cos_pitch} + }; + // clang-format on + + // get R_armor2camera t_armor2camera + const Eigen::Vector3d & t_armor2world = xyz_in_world; + Eigen::Matrix3d R_armor2camera = + R_camera2gimbal_.transpose() * R_gimbal2world_.transpose() * R_armor2world; + Eigen::Vector3d t_armor2camera = + R_camera2gimbal_.transpose() * (R_gimbal2world_.transpose() * t_armor2world - t_camera2gimbal_); + + // get rvec tvec + cv::Vec3d rvec; + cv::Mat R_armor2camera_cv; + cv::eigen2cv(R_armor2camera, R_armor2camera_cv); + cv::Rodrigues(R_armor2camera_cv, rvec); + cv::Vec3d tvec(t_armor2camera[0], t_armor2camera[1], t_armor2camera[2]); + + // reproject + std::vector image_points; + const auto & object_points = (type == ArmorType::big) ? BIG_ARMOR_POINTS : SMALL_ARMOR_POINTS; + cv::projectPoints(object_points, rvec, tvec, camera_matrix_, distort_coeffs_, image_points); + return image_points; +} + +double Solver::oupost_reprojection_error(Armor armor, const double & pitch) +{ + // solve + const auto & object_points = + (armor.type == ArmorType::big) ? BIG_ARMOR_POINTS : SMALL_ARMOR_POINTS; + + cv::Vec3d rvec, tvec; + cv::solvePnP( + object_points, armor.points, camera_matrix_, distort_coeffs_, rvec, tvec, false, + cv::SOLVEPNP_IPPE); + + Eigen::Vector3d xyz_in_camera; + cv::cv2eigen(tvec, xyz_in_camera); + armor.xyz_in_gimbal = R_camera2gimbal_ * xyz_in_camera + t_camera2gimbal_; + armor.xyz_in_world = R_gimbal2world_ * armor.xyz_in_gimbal; + + cv::Mat rmat; + cv::Rodrigues(rvec, rmat); + Eigen::Matrix3d R_armor2camera; + cv::cv2eigen(rmat, R_armor2camera); + Eigen::Matrix3d R_armor2gimbal = R_camera2gimbal_ * R_armor2camera; + Eigen::Matrix3d R_armor2world = R_gimbal2world_ * R_armor2gimbal; + armor.ypr_in_gimbal = tools::eulers(R_armor2gimbal, 2, 1, 0); + armor.ypr_in_world = tools::eulers(R_armor2world, 2, 1, 0); + + armor.ypd_in_world = tools::xyz2ypd(armor.xyz_in_world); + + auto yaw = armor.ypr_in_world[0]; + auto xyz_in_world = armor.xyz_in_world; + + auto sin_yaw = std::sin(yaw); + auto cos_yaw = std::cos(yaw); + + auto sin_pitch = std::sin(pitch); + auto cos_pitch = std::cos(pitch); + + // clang-format off + const Eigen::Matrix3d _R_armor2world { + {cos_yaw * cos_pitch, -sin_yaw, cos_yaw * sin_pitch}, + {sin_yaw * cos_pitch, cos_yaw, sin_yaw * sin_pitch}, + { -sin_pitch, 0, cos_pitch} + }; + // clang-format on + + // get R_armor2camera t_armor2camera + const Eigen::Vector3d & t_armor2world = xyz_in_world; + Eigen::Matrix3d _R_armor2camera = + R_camera2gimbal_.transpose() * R_gimbal2world_.transpose() * _R_armor2world; + Eigen::Vector3d t_armor2camera = + R_camera2gimbal_.transpose() * (R_gimbal2world_.transpose() * t_armor2world - t_camera2gimbal_); + + // get rvec tvec + cv::Vec3d _rvec; + cv::Mat R_armor2camera_cv; + cv::eigen2cv(_R_armor2camera, R_armor2camera_cv); + cv::Rodrigues(R_armor2camera_cv, _rvec); + cv::Vec3d _tvec(t_armor2camera[0], t_armor2camera[1], t_armor2camera[2]); + + // reproject + std::vector image_points; + cv::projectPoints(object_points, _rvec, _tvec, camera_matrix_, distort_coeffs_, image_points); + + auto error = 0.0; + for (int i = 0; i < 4; i++) error += cv::norm(armor.points[i] - image_points[i]); + return error; +} + +void Solver::optimize_yaw(Armor & armor) const +{ + Eigen::Vector3d gimbal_ypr = tools::eulers(R_gimbal2world_, 2, 1, 0); + + constexpr double SEARCH_RANGE = 140; // degree + auto yaw0 = tools::limit_rad(gimbal_ypr[0] - SEARCH_RANGE / 2 * CV_PI / 180.0); + + auto min_error = 1e10; + auto best_yaw = armor.ypr_in_world[0]; + + for (int i = 0; i < SEARCH_RANGE; i++) { + double yaw = tools::limit_rad(yaw0 + i * CV_PI / 180.0); + auto error = armor_reprojection_error(armor, yaw, (i - SEARCH_RANGE / 2) * CV_PI / 180.0); + + if (error < min_error) { + min_error = error; + best_yaw = yaw; + } + } + + armor.yaw_raw = armor.ypr_in_world[0]; + armor.ypr_in_world[0] = best_yaw; +} + +double Solver::SJTU_cost( + const std::vector & cv_refs, const std::vector & cv_pts, + const double & inclined) const +{ + std::size_t size = cv_refs.size(); + std::vector refs; + std::vector pts; + for (std::size_t i = 0u; i < size; ++i) { + refs.emplace_back(cv_refs[i].x, cv_refs[i].y); + pts.emplace_back(cv_pts[i].x, cv_pts[i].y); + } + double cost = 0.; + for (std::size_t i = 0u; i < size; ++i) { + std::size_t p = (i + 1u) % size; + // i - p 构成线段。过程:先移动起点,再补长度,再旋转 + Eigen::Vector2d ref_d = refs[p] - refs[i]; // 标准 + Eigen::Vector2d pt_d = pts[p] - pts[i]; + // 长度差代价 + 起点差代价(1 / 2)(0 度左右应该抛弃) + double pixel_dis = // dis 是指方差平面内到原点的距离 + (0.5 * ((refs[i] - pts[i]).norm() + (refs[p] - pts[p]).norm()) + + std::fabs(ref_d.norm() - pt_d.norm())) / + ref_d.norm(); + double angular_dis = ref_d.norm() * tools::get_abs_angle(ref_d, pt_d) / ref_d.norm(); + // 平方可能是为了配合 sin 和 cos + // 弧度差代价(0 度左右占比应该大) + double cost_i = + tools::square(pixel_dis * std::sin(inclined)) + + tools::square(angular_dis * std::cos(inclined)) * 2.0; // DETECTOR_ERROR_PIXEL_BY_SLOPE + // 重投影像素误差越大,越相信斜率 + cost += std::sqrt(cost_i); + } + return cost; +} + +double Solver::armor_reprojection_error( + const Armor & armor, double yaw, const double & inclined) const +{ + auto image_points = reproject_armor(armor.xyz_in_world, yaw, armor.type, armor.name); + auto error = 0.0; + for (int i = 0; i < 4; i++) error += cv::norm(armor.points[i] - image_points[i]); + // auto error = SJTU_cost(image_points, armor.points, inclined); + + return error; +} + +// 世界坐标到像素坐标的转换 +std::vector Solver::world2pixel(const std::vector & worldPoints) +{ + Eigen::Matrix3d R_world2camera = R_camera2gimbal_.transpose() * R_gimbal2world_.transpose(); + Eigen::Vector3d t_world2camera = -R_camera2gimbal_.transpose() * t_camera2gimbal_; + + cv::Mat rvec; + cv::Mat tvec; + cv::eigen2cv(R_world2camera, rvec); + cv::eigen2cv(t_world2camera, tvec); + + std::vector valid_world_points; + for (const auto & world_point : worldPoints) { + Eigen::Vector3d world_point_eigen(world_point.x, world_point.y, world_point.z); + Eigen::Vector3d camera_point = R_world2camera * world_point_eigen + t_world2camera; + + if (camera_point.z() > 0) { + valid_world_points.push_back(world_point); + } + } + // 如果没有有效点,返回空vector + if (valid_world_points.empty()) { + return std::vector(); + } + std::vector pixelPoints; + cv::projectPoints(valid_world_points, rvec, tvec, camera_matrix_, distort_coeffs_, pixelPoints); + return pixelPoints; +} +} // namespace auto_aim \ No newline at end of file diff --git a/armor/src/armor_finder/find/find_armor_box.cpp b/armor/src/armor_finder/find/find_armor_box.cpp new file mode 100644 index 0000000..b9fb9d4 --- /dev/null +++ b/armor/src/armor_finder/find/find_armor_box.cpp @@ -0,0 +1,212 @@ +// +// Created by xinyang on 19-7-18. +// + +#include +#include +#include +#include + +#define DO_NOT_CNT_TIME + +#include + +// 判断两个灯条的角度差 +static bool angelJudge(const LightBlob &light_blob_i, const LightBlob &light_blob_j) { + float angle_i = light_blob_i.rect.size.width > light_blob_i.rect.size.height ? light_blob_i.rect.angle : + light_blob_i.rect.angle - 90; + float angle_j = light_blob_j.rect.size.width > light_blob_j.rect.size.height ? light_blob_j.rect.angle : + light_blob_j.rect.angle - 90; + return abs(angle_i - angle_j) < 20; +} +// 判断两个灯条的高度差 +static bool heightJudge(const LightBlob &light_blob_i, const LightBlob &light_blob_j) { + cv::Point2f centers = light_blob_i.rect.center - light_blob_j.rect.center; + return abs(centers.y) < 30; +} +// 判断两个灯条的间距 +static bool lengthJudge(const LightBlob &light_blob_i, const LightBlob &light_blob_j) { + double side_length; + cv::Point2f centers = light_blob_i.rect.center - light_blob_j.rect.center; + side_length = sqrt(centers.ddot(centers)); + return (side_length / light_blob_i.length < 10 && side_length / light_blob_i.length > 0.5); +} +// 判断两个灯条的长度比 +static bool lengthRatioJudge(const LightBlob &light_blob_i, const LightBlob &light_blob_j) { + return (light_blob_i.length / light_blob_j.length < 2.5 + && light_blob_i.length / light_blob_j.length > 0.4); +} + +/* 判断两个灯条的错位度,不知道英文是什么!!! */ +static bool CuoWeiDuJudge(const LightBlob &light_blob_i, const LightBlob &light_blob_j) { + float angle_i = light_blob_i.rect.size.width > light_blob_i.rect.size.height ? light_blob_i.rect.angle : + light_blob_i.rect.angle - 90; + float angle_j = light_blob_j.rect.size.width > light_blob_j.rect.size.height ? light_blob_j.rect.angle : + light_blob_j.rect.angle - 90; + float angle = (angle_i + angle_j) / 2.0 / 180.0 * 3.14159265459; + if (abs(angle_i - angle_j) > 90) { + angle += 3.14159265459 / 2; + } + Vector2f orientation(cos(angle), sin(angle)); + Vector2f p2p(light_blob_j.rect.center.x - light_blob_i.rect.center.x, + light_blob_j.rect.center.y - light_blob_i.rect.center.y); + return abs(orientation.dot(p2p)) < 25; +} +// 判断装甲板方向 +static bool boxAngleJudge(const LightBlob &light_blob_i, const LightBlob &light_blob_j) { + float angle_i = light_blob_i.rect.size.width > light_blob_i.rect.size.height ? light_blob_i.rect.angle : + light_blob_i.rect.angle - 90; + float angle_j = light_blob_j.rect.size.width > light_blob_j.rect.size.height ? light_blob_j.rect.angle : + light_blob_j.rect.angle - 90; + float angle = (angle_i + angle_j) / 2.0; + if (abs(angle_i - angle_j) > 90) { + angle += 90.0; + } + return (-120.0 < angle && angle < -60.0) || (60.0 < angle && angle < 120.0); +} +// 判断两个灯条是否可以匹配 +static bool isCoupleLight(const LightBlob &light_blob_i, const LightBlob &light_blob_j, uint8_t enemy_color) { + return light_blob_i.blob_color == enemy_color && + light_blob_j.blob_color == enemy_color && + lengthRatioJudge(light_blob_i, light_blob_j) && + lengthJudge(light_blob_i, light_blob_j) && + // heightJudge(light_blob_i, light_blob_j) && + angelJudge(light_blob_i, light_blob_j) && + boxAngleJudge(light_blob_i, light_blob_j) && + CuoWeiDuJudge(light_blob_i, light_blob_j); + +} +// 匹配所有灯条,得出装甲板候选区 +bool ArmorFinder::matchArmorBoxes(const cv::Mat &src, const LightBlobs &light_blobs, ArmorBoxes &armor_boxes) { + armor_boxes.clear(); + for (int i = 0; i < light_blobs.size() - 1; ++i) { + for (int j = i + 1; j < light_blobs.size(); ++j) { + if (!isCoupleLight(light_blobs.at(i), light_blobs.at(j), enemy_color)) { + continue; + } + cv::Rect2d rect_left = light_blobs.at(static_cast(i)).rect.boundingRect(); + cv::Rect2d rect_right = light_blobs.at(static_cast(j)).rect.boundingRect(); + double min_x, min_y, max_x, max_y; + min_x = fmin(rect_left.x, rect_right.x) - 4; + max_x = fmax(rect_left.x + rect_left.width, rect_right.x + rect_right.width) + 4; + min_y = fmin(rect_left.y, rect_right.y) - 0.5 * (rect_left.height + rect_right.height) / 2.0; + max_y = fmax(rect_left.y + rect_left.height, rect_right.y + rect_right.height) + + 0.5 * (rect_left.height + rect_right.height) / 2.0; + if (min_x < 0 || max_x > src.cols || min_y < 0 || max_y > src.rows) { + continue; + } + if (state == SEARCHING_STATE && (max_y + min_y) / 2 < 120) continue; + if ((max_x - min_x) / (max_y - min_y) < 0.8) continue; + LightBlobs pair_blobs = {light_blobs.at(i), light_blobs.at(j)}; + + // 计算PnP所需的4个角点 + const LightBlob &l1 = light_blobs.at(i); + const LightBlob &l2 = light_blobs.at(j); + + // 确定左右灯条 + const LightBlob &left = (l1.rect.center.x < l2.rect.center.x) ? l1 : l2; + const LightBlob &right = (l1.rect.center.x < l2.rect.center.x) ? l2 : l1; + + // 获取灯条的上下顶点 + auto getTopBottom = [](const LightBlob &lb, cv::Point2f &top, cv::Point2f &bottom) { + cv::Point2f pts[4]; + lb.rect.points(pts); + // 按照y轴排序获取上下端点 + std::sort(pts, pts + 4, [](const cv::Point2f &a, const cv::Point2f &b) { return a.y < b.y; }); + top = (pts[0] + pts[1]) / 2.0; + bottom = (pts[2] + pts[3]) / 2.0; + }; + + cv::Point2f lt, lb, rt, rb; + getTopBottom(left, lt, lb); + getTopBottom(right, rt, rb); + + // PnP点序: 左上, 右上, 右下, 左下 + std::vector armor_points = {lt, rt, rb, lb}; + + armor_boxes.emplace_back( + cv::Rect2d(min_x, min_y, max_x - min_x, max_y - min_y), + pair_blobs, + enemy_color, + 0, + armor_points + ); + } + } + return !armor_boxes.empty(); +} +// 在给定的图像上寻找装甲板 +bool ArmorFinder::findArmorBox(const cv::Mat &src, ArmorBox &box) { + LightBlobs light_blobs; // 存储所有可能的灯条 + ArmorBoxes armor_boxes; // 装甲板候选区 + + box.rect = cv::Rect2d(0, 0, 0, 0); + box.id = -1; +// 寻找所有可能的灯条 + CNT_TIME("blob", { + if (!findLightBlobs(src, light_blobs)) { + return false; + } + }); + if (show_light_blobs && state==SEARCHING_STATE) { + showLightBlobs("light_blobs", src, light_blobs); + cv::waitKey(1); + } +// 对灯条进行匹配得出装甲板候选区 + CNT_TIME("boxes", { + if (!matchArmorBoxes(src, light_blobs, armor_boxes)) { + return false; + } + }); + if (show_armor_boxes && state==SEARCHING_STATE) { + showArmorBoxes("boxes", src, armor_boxes); + cv::waitKey(1); + } +// 如果分类器可用,则使用分类器对装甲板候选区进行筛选 + if (classifier) { + CNT_TIME("classify: %d", { + for (auto &armor_box : armor_boxes) { + cv::Mat roi = src(armor_box.rect).clone(); + cv::resize(roi, roi, cv::Size(48, 36)); + int c = classifier(roi); + armor_box.id = c; + } + }, armor_boxes.size()); +// 按照优先级对装甲板进行排序 + sort(armor_boxes.begin(), armor_boxes.end(), [&](const ArmorBox &a, const ArmorBox &b) { + if (last_box.rect != cv::Rect2d()) { + return getPointLength(a.getCenter() - last_box.getCenter()) < + getPointLength(b.getCenter() - last_box.getCenter()); + } else { + return a < b; + } + }); + for (auto &one_box : armor_boxes) { + if (one_box.id != 0) { + box = one_box; + break; + } + } + if (save_labelled_boxes) { + for (const auto &one_box : armor_boxes) { + char filename[100]; + sprintf(filename, PROJECT_DIR"/armor_box_photo/%s_%d.jpg", id2name[one_box.id].data(), + time(nullptr) + clock()); + auto box_roi = src(one_box.rect); + cv::resize(box_roi, box_roi, cv::Size(48, 36)); + cv::imwrite(filename, box_roi); + } + } + if (box.rect == cv::Rect2d(0, 0, 0, 0)) { + return false; + } + if (show_armor_boxes && state==SEARCHING_STATE) { + showArmorBoxesClass("class", src, armor_boxes); + } + } else { // 如果分类器不可用,则直接选取候选区中的第一个区域作为目标(往往会误识别) + box = armor_boxes[0]; + } + return true; +} + + diff --git a/armor/src/armor_finder/find/find_light_blobs.cpp b/armor/src/armor_finder/find/find_light_blobs.cpp new file mode 100644 index 0000000..1dad251 --- /dev/null +++ b/armor/src/armor_finder/find/find_light_blobs.cpp @@ -0,0 +1,152 @@ +// +// Created by xinyang on 19-7-10. +// + +#include +#include +#include + +// 旋转矩形的长宽比 +static double lw_rate(const cv::RotatedRect &rect) { + return rect.size.height > rect.size.width ? + rect.size.height / rect.size.width : + rect.size.width / rect.size.height; +} +// 轮廓面积和其最小外接矩形面积之比 +static double areaRatio(const std::vector &contour, const cv::RotatedRect &rect) { + return cv::contourArea(contour) / rect.size.area(); +} +// 判断轮廓是否为一个灯条 +static bool isValidLightBlob(const std::vector &contour, const cv::RotatedRect &rect) { + return (1.2 < lw_rate(rect) && lw_rate(rect) < 10) && + // (rect.size.area() < 3000) && + ((rect.size.area() < 50 && areaRatio(contour, rect) > 0.4) || + (rect.size.area() >= 50 && areaRatio(contour, rect) > 0.6)); +} +// 判断灯条颜色(此函数可以有性能优化). +static uint8_t get_blob_color(const cv::Mat &src, const cv::RotatedRect &blobPos) { + auto region = blobPos.boundingRect(); + region.x -= fmax(3, region.width * 0.1); + region.y -= fmax(3, region.height * 0.05); + region.width += 2 * fmax(3, region.width * 0.1); + region.height += 2 * fmax(3, region.height * 0.05); + region &= cv::Rect(0, 0, src.cols, src.rows); + cv::Mat roi = src(region); + int red_cnt = 0, blue_cnt = 0; + for (int row = 0; row < roi.rows; row++) { + for (int col = 0; col < roi.cols; col++) { + red_cnt += roi.at(row, col)[2]; + blue_cnt += roi.at(row, col)[0]; + } + } + if (red_cnt > blue_cnt) { + return BLOB_RED; + } else { + return BLOB_BLUE; + } +} +// 判断两个灯条区域是同一个灯条 +static bool isSameBlob(LightBlob blob1, LightBlob blob2) { + auto dist = blob1.rect.center - blob2.rect.center; + return (dist.x * dist.x + dist.y * dist.y) < 9; +} +// 开闭运算 +static void imagePreProcess(cv::Mat &src) { + static cv::Mat kernel_erode = getStructuringElement(cv::MORPH_RECT, cv::Size(3, 5)); + erode(src, src, kernel_erode); + + static cv::Mat kernel_dilate = getStructuringElement(cv::MORPH_RECT, cv::Size(3, 5)); + dilate(src, src, kernel_dilate); + + static cv::Mat kernel_dilate2 = getStructuringElement(cv::MORPH_RECT, cv::Size(3, 5)); + dilate(src, src, kernel_dilate2); + + static cv::Mat kernel_erode2 = getStructuringElement(cv::MORPH_RECT, cv::Size(3, 5)); + erode(src, src, kernel_erode2); +} +// 在给定图像上寻找所有可能的灯条 +bool ArmorFinder::findLightBlobs(const cv::Mat &src, LightBlobs &light_blobs) { + cv::Mat color_channel; + cv::Mat src_bin_light, src_bin_dim; + std::vector channels; // 通道拆分 + + cv::split(src, channels); /************************/ + if (enemy_color == ENEMY_BLUE) { /* */ + color_channel = channels[0]; /* 根据目标颜色进行通道提取 */ + } else if (enemy_color == ENEMY_RED) { /* */ + color_channel = channels[2]; /************************/ + } + + int light_threshold; + if(enemy_color == ENEMY_BLUE){ + light_threshold = 225; + }else{ + light_threshold = 200; + } + cv::threshold(color_channel, src_bin_light, light_threshold, 255, cv::THRESH_BINARY); // 二值化对应通道 + if (src_bin_light.empty()) return false; + imagePreProcess(src_bin_light); // 开闭运算 + + cv::threshold(color_channel, src_bin_dim, 140, 255, cv::THRESH_BINARY); // 二值化对应通道 + if (src_bin_dim.empty()) return false; + imagePreProcess(src_bin_dim); // 开闭运算 + + if (src_bin_light.size() == cv::Size(640, 480) && show_light_blobs) { + imshow("bin_light", src_bin_light); + imshow("bin_dim", src_bin_dim); + } +// 使用两个不同的二值化阈值同时进行灯条提取,减少环境光照对二值化这个操作的影响。 +// 同时剔除重复的灯条,剔除冗余计算,即对两次找出来的灯条取交集。 + std::vector> light_contours_light, light_contours_dim; + LightBlobs light_blobs_light, light_blobs_dim; + std::vector hierarchy_light, hierarchy_dim; + cv::findContours(src_bin_light, light_contours_light, hierarchy_light, cv::RETR_CCOMP, cv::CHAIN_APPROX_NONE); + cv::findContours(src_bin_dim, light_contours_dim, hierarchy_dim, cv::RETR_CCOMP, cv::CHAIN_APPROX_NONE); + for (int i = 0; i < light_contours_light.size(); i++) { + if (hierarchy_light[i][2] == -1) { + cv::RotatedRect rect = cv::minAreaRect(light_contours_light[i]); + if (isValidLightBlob(light_contours_light[i], rect)) { + light_blobs_light.emplace_back( + rect, areaRatio(light_contours_light[i], rect), get_blob_color(src, rect) + ); + } + } + } + for (int i = 0; i < light_contours_dim.size(); i++) { + if (hierarchy_dim[i][2] == -1) { + cv::RotatedRect rect = cv::minAreaRect(light_contours_dim[i]); + if (isValidLightBlob(light_contours_dim[i], rect)) { + light_blobs_dim.emplace_back( + rect, areaRatio(light_contours_dim[i], rect), get_blob_color(src, rect) + ); + } + } + } + vector light_to_remove, dim_to_remove; + for (int l = 0; l != light_blobs_light.size(); l++) { + for (int d = 0; d != light_blobs_dim.size(); d++) { + if (isSameBlob(light_blobs_light[l], light_blobs_dim[d])) { + if (light_blobs_light[l].area_ratio > light_blobs_dim[d].area_ratio) { + dim_to_remove.emplace_back(d); + } else { + light_to_remove.emplace_back(l); + } + } + } + } + sort(light_to_remove.begin(), light_to_remove.end(), [](int a, int b) { return a > b; }); + sort(dim_to_remove.begin(), dim_to_remove.end(), [](int a, int b) { return a > b; }); + for (auto x : light_to_remove) { + light_blobs_light.erase(light_blobs_light.begin() + x); + } + for (auto x : dim_to_remove) { + light_blobs_dim.erase(light_blobs_dim.begin() + x); + } + for (const auto &light : light_blobs_light) { + light_blobs.emplace_back(light); + } + for (const auto &dim : light_blobs_dim) { + light_blobs.emplace_back(dim); + } + return light_blobs.size() >= 2; +} diff --git a/armor/src/armor_finder/searching_state/searching_state.cpp b/armor/src/armor_finder/searching_state/searching_state.cpp new file mode 100644 index 0000000..b228f25 --- /dev/null +++ b/armor/src/armor_finder/searching_state/searching_state.cpp @@ -0,0 +1,38 @@ +// +// Created by xinyang on 19-3-27. +// + +#include +#include +#include +#include + +bool ArmorFinder::stateSearchingTarget(cv::Mat &src) { + if (findArmorBox(src, target_box)) { // 在原图中寻找目标,并返回是否找到 + if (last_box.rect != cv::Rect2d() && + (getPointLength(last_box.getCenter() - target_box.getCenter()) > last_box.rect.height * 2.0) && + anti_switch_cnt++ < 3) { // 判断当前目标和上次有效目标是否为同一个目标 + target_box = ArmorBox(); // 并给3帧的时间,试图找到相同目标 + LOGM("anti-switch!"); // 即刚发生目标切换内的3帧内不发送目标位置 + return false; // 可以一定程度避免频繁多目标切换 + } else { + anti_switch_cnt = 0; + return true; + } + } else { + target_box = ArmorBox(); + anti_switch_cnt++; + return false; + } +} + +/* +bool ArmorFinder::stateSearchingTarget(cv::Mat &src) { + if (findArmorBox(src, target_box)) { + return true; + } else { + target_box = ArmorBox(); + return false; + } +} +*/ \ No newline at end of file diff --git a/armor/src/armor_finder/send_target/send_target.cpp b/armor/src/armor_finder/send_target/send_target.cpp new file mode 100644 index 0000000..f148984 --- /dev/null +++ b/armor/src/armor_finder/send_target/send_target.cpp @@ -0,0 +1,88 @@ +// +// Created by xinyang on 19-7-11. +// + +#include +#include +#include +#include +#include + + +static bool sendTarget(Serial &serial, double x, double y, double z, uint16_t shoot_delay) { + static short x_tmp, y_tmp, z_tmp; + uint8_t buff[10]; + +#ifdef WITH_COUNT_FPS + static time_t last_time = time(nullptr); + static int fps; + time_t t = time(nullptr); + if (last_time != t) { + last_time = t; + cout << "Armor: fps:" << fps << ", (" << x << "," << y << "," << z << ")" << endl; + fps = 0; + } + fps += 1; +#endif + +#define MINMAX(value, min, max) value = ((value) < (min)) ? (min) : ((value) > (max) ? (max) : (value)) + + x_tmp = static_cast(x * (32768 - 1) / 100); + y_tmp = static_cast(y * (32768 - 1) / 100); + z_tmp = static_cast(z * (32768 - 1) / 1000); + + buff[0] = 's'; + buff[1] = static_cast((x_tmp >> 8) & 0xFF); + buff[2] = static_cast((x_tmp >> 0) & 0xFF); + buff[3] = static_cast((y_tmp >> 8) & 0xFF); + buff[4] = static_cast((y_tmp >> 0) & 0xFF); + buff[5] = static_cast((z_tmp >> 8) & 0xFF); + buff[6] = static_cast((z_tmp >> 0) & 0xFF); + buff[7] = static_cast((shoot_delay >> 8) & 0xFF); + buff[8] = static_cast((shoot_delay >> 0) & 0xFF); + buff[9] = 'e'; +// if(buff[7]<<8 | buff[8]) +// cout << (buff[7]<<8 | buff[8]) << endl; + return serial.WriteData(buff, sizeof(buff)); +} + +bool ArmorFinder::sendBoxPosition(uint16_t shoot_delay) { + if (target_box.rect == cv::Rect2d()) return false; + if (shoot_delay) { + LOGM(STR_CTR(WORD_BLUE, "next box %dms"), shoot_delay); + } + auto rect = target_box.rect; + double dx = rect.x + rect.width / 2 - IMAGE_CENTER_X; + double dy = rect.y + rect.height / 2 - IMAGE_CENTER_Y; + + // PID + sum_yaw += dx; + sum_pitch += dy; + float yaw_I_component = YAW_AIM_KI * sum_yaw; + float pitch_I_component = PITCH_AIM_KI * sum_pitch; + + double tmp_yaw = dx; + double tmp_pitch = dy; + dx = YAW_AIM_KP * dx + YAW_AIM_KI * sum_yaw + + YAW_AIM_KD * (dx - last_yaw); + dy = PITCH_AIM_KP * dy + PITCH_AIM_KI * sum_pitch + + PITCH_AIM_KD * (dy - last_pitch); + + last_yaw = tmp_yaw; + last_pitch = tmp_pitch; + // + + double yaw = atan(dx / FOCUS_PIXAL) * 180 / PI; + double dist = sqrt(target_xyz.x * target_xyz.x + target_xyz.y * target_xyz.y + target_xyz.z * target_xyz.z) / 100.0; // 米 + + // 弹道补偿使用 PnP 提供的 3D 坐标 + double x_target = sqrt(target_xyz.x * target_xyz.x + target_xyz.z * target_xyz.z) / 100.0; // 水平距离 + double y_target = -target_xyz.y / 100.0; // 垂直高度差 + double pitch_comp = BallisticSolver::get_pitch(x_target, y_target, MUZZLE_VELOCITY, BALLISTIC_K); + + // 计算是否满足开火条件 (例如残差小于 1.5 度) + can_fire = AutoTrigger::should_fire(yaw, pitch_comp, 1.5); + + return sendTarget(serial, yaw, pitch_comp, dist * 100.0, shoot_delay); +} + diff --git a/armor/src/armor_finder/standby_state/standby_state.cpp b/armor/src/armor_finder/standby_state/standby_state.cpp new file mode 100644 index 0000000..dd0a4e8 --- /dev/null +++ b/armor/src/armor_finder/standby_state/standby_state.cpp @@ -0,0 +1,11 @@ +// +// Created by xinyang on 19-3-27. +// + +#include + +bool ArmorFinder::stateStandBy() { + state = SEARCHING_STATE; + return true; +} + diff --git a/armor/src/armor_finder/tracking_state/tracking_state.cpp b/armor/src/armor_finder/tracking_state/tracking_state.cpp new file mode 100644 index 0000000..f43f13c --- /dev/null +++ b/armor/src/armor_finder/tracking_state/tracking_state.cpp @@ -0,0 +1,71 @@ +// +// Created by xinyang on 19-3-27. +// +#define LOG_LEVEL LOG_NONE +#include +#include +#include +#include + +bool ArmorFinder::stateTrackingTarget(cv::Mat &src) { + cv::Rect pos(target_box.rect); + if(!tracker->update(src, pos)){ // 使用KCFTracker进行追踪 + target_box = ArmorBox(); + LOGW("Track fail!"); + return false; + } + if((cv::Rect2d(pos) & cv::Rect2d(0, 0, 640, 480)) != cv::Rect2d(pos)){ + target_box = ArmorBox(); + LOGW("Track out range!"); + return false; + } + + // 获取相较于追踪区域两倍长款的区域,用于重新搜索,获取灯条信息 + cv::Rect2d bigger_rect; + bigger_rect.x = pos.x - pos.width / 2.0; + bigger_rect.y = pos.y - pos.height / 2.0; + bigger_rect.height = pos.height * 2; + bigger_rect.width = pos.width * 2; + bigger_rect &= cv::Rect2d(0, 0, 640, 480); + cv::Mat roi = src(bigger_rect).clone(); + + ArmorBox box; + // 在区域内重新搜索。 + if(findArmorBox(roi, box)) { // 如果成功获取目标,则利用搜索区域重新更新追踪器 + target_box = box; + target_box.rect.x += bigger_rect.x; // 添加roi偏移量 + target_box.rect.y += bigger_rect.y; + for(auto &blob : target_box.light_blobs){ + blob.rect.center.x += bigger_rect.x; + blob.rect.center.y += bigger_rect.y; + } + for(auto &pt : target_box.points){ + pt.x += bigger_rect.x; + pt.y += bigger_rect.y; + } + tracker = TrackerToUse::create(); + tracker->init(src, target_box.rect); + }else{ // 如果没有成功搜索目标,则使用判断是否跟丢。 + roi = src(pos).clone(); + if(classifier){ // 分类器可用,使用分类器判断。 + cv::resize(roi, roi, cv::Size(48, 36)); + if(classifier(roi) == 0){ + target_box = ArmorBox(); + LOGW("Track classify fail range!"); + return false; + } + }else{ // 分类器不可用,使用常规方法判断 + cv::Mat roi_gray; + cv::cvtColor(roi, roi_gray, cv::COLOR_RGB2GRAY); + cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY); + contour_area = cv::countNonZero(roi_gray); + if(abs(cv::countNonZero(roi_gray) - contour_area) > contour_area * 0.3){ + target_box = ArmorBox(); + return false; + } + } + target_box.rect = pos; + target_box.light_blobs.clear(); + } + return true; +} diff --git a/armor/src/show_images/ballistic_predicition.cpp b/armor/src/show_images/ballistic_predicition.cpp new file mode 100644 index 0000000..205e2b2 --- /dev/null +++ b/armor/src/show_images/ballistic_predicition.cpp @@ -0,0 +1,102 @@ +#include +#include + +/** + * @brief 迭代法求解补偿 pitch 角。 + * 给定水平距离 d 和目标高度差 y,反算出应出射的 pitch 角(度)。 + */ +double BallisticSolver::get_pitch(double d, double y, double v0, double k) { + const double g = 9.80665; + double pitch_new = atan2(y, d); // 初始猜测:几何仰角 + for (int i = 0; i < 20; ++i) { + double cos_p = cos(pitch_new); + double val = 1.0 - (k * d) / (v0 * cos_p); + if (val <= 0) break; + double t = -log(val) / k; + double y_calc = (1.0/k) * (v0*sin(pitch_new) + g/k) * (1.0 - exp(-k*t)) - (g/k)*t; + double dy = y - y_calc; + pitch_new += atan2(dy, d); + if (std::abs(dy) < 0.001) break; + } + return pitch_new * 180.0 / M_PI; +} + +/** + * @brief 计算弹丸飞行时间。 + * @param d 目标水平距离 (m) + * @param pitch 当前 IMU pitch 角 (度,仰为正) + * @param v0 枪口初速度 (m/s) + * @param k 空气阻力系数 + * @brief 计算弹丸飞行时间(含空气阻力模型)。 + * + * 运动方程:水平方向 v_x(t) = v0*cos(pitch)*exp(-k*t) + * 水平位移 x(t) = (v0*cos(pitch)/k) * (1 - exp(-k*t)) + * 由 x(t) = d 解得 t。 + */ +double BallisticSolver::get_flight_time(double d, double pitch, double v0, double k) { + double cos_pitch = cos(pitch * M_PI / 180.0); + double val = 1.0 - (k * d) / (v0 * cos_pitch); + if (val <= 0) return 0.5; // 超过最大射程,返回兜底时间 + return -log(val) / k; +} + +/** + * @brief 推断给定出射角下的落点高度(弹着点推断)。 + */ +double BallisticSolver::get_impact_y(double d, double pitch, double v0, double k) { + const double g = 9.80665; + double pitch_rad = pitch * M_PI / 180.0; + double t = get_flight_time(d, pitch, v0, k); + return (1.0 / k) * (v0 * sin(pitch_rad) + g / k) * (1.0 - exp(-k * t)) - (g / k) * t; +} + +// ──────────────────── [TEST] 以下两个函数用于可视化验证弹道算法正确性 ──────────────────── +// 如果测试通过,直接注释掉 armor_finder.cpp 里的调用,不影响其他逻辑。 + +/** + * [TEST] 将弹着点从世界坐标系反解算到相机坐标系。 + * 变换链:xyz_camera = R_c2g^T * (R_g2w^T * xyz_world - t_c2g) + */ +ImpactPoint BallisticSolver::get_impact_in_camera( + const Eigen::Vector3d& xyz_in_world, + double pitch_imu, + double v0, + const Eigen::Matrix3d& R_camera2gimbal, + const Eigen::Matrix3d& R_gimbal2world, + const Eigen::Vector3d& t_camera2gimbal, + double k) +{ + // 水平距离:世界系 x=前, y=左 + double d = std::sqrt(xyz_in_world.x() * xyz_in_world.x() + + xyz_in_world.y() * xyz_in_world.y()); + + double impact_z = get_impact_y(d, pitch_imu, v0, k); + double fly_time = get_flight_time(d, pitch_imu, v0, k); + + // 弹着点世界坐标:水平 (x,y) 与目标相同,z 换为弹道高度 + Eigen::Vector3d impact_world(xyz_in_world.x(), xyz_in_world.y(), impact_z); + + // 世界 → 云台 → 相机 + Eigen::Vector3d impact_gimbal = R_gimbal2world.transpose() * impact_world; + Eigen::Vector3d impact_camera = R_camera2gimbal.transpose() * (impact_gimbal - t_camera2gimbal); + + return ImpactPoint{ impact_camera, fly_time }; +} + +/** + * [TEST] 针孔投影:相机坐标系 3D 点 → 像素坐标(不含畸变,仅用于可视化)。 + */ +cv::Point2f BallisticSolver::project_to_pixel( + const Eigen::Vector3d& xyz_in_camera, + const cv::Mat& camera_matrix) +{ + if (xyz_in_camera.z() <= 0) return cv::Point2f(-1, -1); // 在相机背后,无效 + double fx = camera_matrix.at(0, 0); + double fy = camera_matrix.at(1, 1); + double cx = camera_matrix.at(0, 2); + double cy = camera_matrix.at(1, 2); + float u = static_cast(fx * xyz_in_camera.x() / xyz_in_camera.z() + cx); + float v = static_cast(fy * xyz_in_camera.y() / xyz_in_camera.z() + cy); + return cv::Point2f(u, v); +} +// ──────────────────────────────── [TEST END] ───────────────────────────────────────────── diff --git a/armor/src/show_images/show_images.cpp b/armor/src/show_images/show_images.cpp new file mode 100644 index 0000000..7b2f288 --- /dev/null +++ b/armor/src/show_images/show_images.cpp @@ -0,0 +1,182 @@ +#include +#include +#include +#include + +using namespace cv; + + +void drawLightBlobs(cv::Mat &src, const LightBlobs &blobs){ + for (const auto &blob:blobs) { + Scalar color(0,255,0); + if (blob.blob_color == BLOB_RED) + color = Scalar(0, 0, 255); + else if (blob.blob_color == BLOB_BLUE) + color = Scalar(255, 0, 0); + cv::Point2f vertices[4]; + blob.rect.points(vertices); + for (int j = 0; j < 4; j++) { + cv::line(src, vertices[j], vertices[(j + 1) % 4], color, 2); + } + } +} + +/************************** + * 显示多个装甲板区域 * + **************************/ +void showArmorBoxes(std::string windows_name, const cv::Mat &src, const ArmorBoxes &armor_boxes) { + static Mat image2show; + if (src.type() == CV_8UC1) {// 黑白图像 + cvtColor(src, image2show, COLOR_GRAY2RGB); + } else if (src.type() == CV_8UC3) { //RGB 彩色 + image2show = src.clone(); + } + + for (auto &box:armor_boxes) { + if(box.box_color == BOX_BLUE) { + rectangle(image2show, box.rect, Scalar(0, 255, 0), 1); + drawLightBlobs(image2show, box.light_blobs); + }else if(box.box_color == BOX_RED){ + rectangle(image2show, box.rect, Scalar(0, 255, 0), 1); + drawLightBlobs(image2show, box.light_blobs); + } + + } + imshow(windows_name, image2show); +} + +/************************** + * 显示多个装甲板区域及其类别 * + **************************/ +void showArmorBoxesClass(std::string window_names, const cv::Mat &src, const ArmorBoxes &boxes) { + static Mat image2show; + if (src.type() == CV_8UC1) { // 黑白图像 + cvtColor(src, image2show, COLOR_GRAY2RGB); + } else if (src.type() == CV_8UC3) { //RGB 彩色 + image2show = src.clone(); + } + for (const auto &box : boxes) { + if(box.id != 0) { + rectangle(image2show, box.rect, Scalar(0, 255, 0), 1); + drawLightBlobs(image2show, box.light_blobs); + if (box.id == -1) + putText(image2show, id2name[box.id], Point(box.rect.x + 2, box.rect.y + 2), cv::FONT_HERSHEY_TRIPLEX, 1, + Scalar(0, 255, 0)); + else if (1 <= box.id && box.id < 8) + putText(image2show, id2name[box.id], Point(box.rect.x + 2, box.rect.y + 2), cv::FONT_HERSHEY_TRIPLEX, 1, + Scalar(255, 0, 0)); + else if (8 <= box.id && box.id < 15) + putText(image2show, id2name[box.id], Point(box.rect.x + 2, box.rect.y + 2), cv::FONT_HERSHEY_TRIPLEX, 1, + Scalar(0, 0, 255)); + else if (box.id != 0) + LOGE_INFO("Invalid box id:%d!", box.id); + } + } + imshow(window_names, image2show); + +} + +/************************** + * 显示单个装甲板区域及其类别 * + **************************/ +void showArmorBox(std::string windows_name, const cv::Mat &src, const ArmorBox &box) { + static Mat image2show; + if(box.rect == cv::Rect2d()){ + imshow(windows_name, src); + } + if (src.type() == CV_8UC1) { // 黑白图像 + cvtColor(src, image2show, COLOR_GRAY2RGB); + } else if (src.type() == CV_8UC3) { //RGB 彩色 + image2show = src.clone(); + } + drawLightBlobs(image2show, box.light_blobs); +// static FILE *fp = fopen(PROJECT_DIR"/ratio.txt", "w"); +// if(box.light_blobs.size() == 2) +// fprintf(fp, "%lf %lf %lf\n", box.light_blobs[0].length, box.light_blobs[1].length, box.getBlobsDistance()) +// cout << box.lengthDistanceRatio() << endl; + + if(box.getOrientation() == ArmorBox::FRONT){ + rectangle(image2show, box.rect, Scalar(0, 255, 0), 3); + }else{ + rectangle(image2show, box.rect, Scalar(0, 255, 0), 1); + } + + char dist[10]; + sprintf(dist, "%.1f", box.getBoxDistance()); + if (box.id == -1) + putText(image2show, id2name[box.id]+" "+dist, Point(box.rect.x + 2, box.rect.y + 2), cv::FONT_HERSHEY_TRIPLEX, 1, + Scalar(0, 255, 0)); + else if (1 <= box.id && box.id < 8) + putText(image2show, id2name[box.id]+" "+dist, Point(box.rect.x + 2, box.rect.y + 2), cv::FONT_HERSHEY_TRIPLEX, 1, + Scalar(255, 0, 0)); + else if (8 <= box.id && box.id < 15) + putText(image2show, id2name[box.id]+" "+dist, Point(box.rect.x + 2, box.rect.y + 2), cv::FONT_HERSHEY_TRIPLEX, 1, + Scalar(0, 0, 255)); + else if (box.id != 0) + LOGE_INFO("Invalid box id:%d!", box.id); + imshow(windows_name, image2show); +} + +/************************** + * 显示多个灯条区域 * + **************************/ +void showLightBlobs(std::string windows_name, const cv::Mat &src, const LightBlobs &light_blobs) { + static Mat image2show; + + if (src.type() == CV_8UC1) { // 黑白图像 + cvtColor(src, image2show, COLOR_GRAY2RGB); + } else if (src.type() == CV_8UC3) { //RGB 彩色 + image2show = src.clone(); + } + + for (const auto &light_blob:light_blobs) { + Scalar color(0, 255, 0); + if (light_blob.blob_color == BLOB_RED) + color = Scalar(0, 0, 255); + else if (light_blob.blob_color == BLOB_BLUE) + color = Scalar(255, 0, 0); + cv::Point2f vertices[4]; + light_blob.rect.points(vertices); + for (int j = 0; j < 4; j++) { + cv::line(image2show, vertices[j], vertices[(j + 1) % 4], color, 2); + } + } + imshow(windows_name, image2show); +} + + +void showTrackSearchingPos(std::string window_names, const cv::Mat &src, const cv::Rect2d pos){ + static Mat image2show; + if (src.type() == CV_8UC1) { // 黑白图像 + cvtColor(src, image2show, COLOR_GRAY2RGB); + } else if (src.type() == CV_8UC3) { //RGB 彩色 + image2show = src.clone(); + } + rectangle(image2show, pos, Scalar(0, 255, 0), 1); + imshow(window_names, image2show); +} + +// ─────────────── [TEST] 弹着点可视化 ─────────────────────────────────────────────────────── +// 在图像上画一个红色小圆点标注弹道落点位置,用于验证弹道算法正确性。 +// 验证通过后直接注释调用处即可,函数本身不影响任何发包逻辑。 +void showImpactPoint(const std::string& window_name, const cv::Mat& src, cv::Point2f impact_pixel) { + static Mat image2show; + if (src.type() == CV_8UC1) { + cvtColor(src, image2show, COLOR_GRAY2RGB); + } else if (src.type() == CV_8UC3) { + image2show = src.clone(); + } else { + return; + } + + // 越界检查 + int u = static_cast(impact_pixel.x); + int v = static_cast(impact_pixel.y); + if (u >= 0 && u < image2show.cols && v >= 0 && v < image2show.rows) { + // 红色实心圆,半径 3px + cv::circle(image2show, cv::Point(u, v), 3, Scalar(0, 0, 255), -1); + } + + imshow(window_name, image2show); +} +// ─────────────── [TEST END] ──────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..2705eee --- /dev/null +++ b/main.cpp @@ -0,0 +1,120 @@ +/**********************************************************************/ +/* ____ _ _____ _ _ ____ __ __ ______ __ */ +/* / ___| | |_ _| | | | | _ \| \/ | / ___\ \ / / */ +/* \___ \ _ | | | | | | | |_____| |_) | |\/| |_____| | \ \ / / */ +/* ___) | |_| | | | | |_| |_____| _ <| | | |_____| |___ \ V / */ +/* |____/ \___/ |_| \___/ |_| \_\_| |_| \____| \_/ */ +/* */ +/**********************************************************************/ +// 本代码统一使用640×480大小的图像进行处理 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DO_NOT_CNT_TIME + +#include + +using namespace cv; +using namespace std; + +McuData mcu_data = { // 单片机端回传结构体 + 0, // 当前云台yaw角 + 0, // 当前云台pitch角 + ARMOR_STATE, // 当前状态,自瞄 + 0, // 云台角度标记位 + 0, // 是否为反陀螺模式 + ENEMY_RED, // 敌方颜色 + 0, // 补偿量 (原能量机关x轴补偿量,现保留结构体对齐) + 0, // 补偿量 (原能量机关y轴补偿量,现保留结构体对齐) +}; + +WrapperHead *video = nullptr; // 云台摄像头视频源 + +Serial serial(115200); // 串口对象 +uint8_t last_state = ARMOR_STATE; // 上次状态,用于初始化 +// 自瞄主程序对象 +ArmorFinder armor_finder(mcu_data.enemy_color, serial, PROJECT_DIR"/tools/para/", mcu_data.anti_top); + +int main(int argc, char *argv[]) { + processOptions(argc, argv); // 处理命令行参数 + thread receive(uartReceive, &serial); // 开启串口接收线程 + + int from_camera = 1; // 根据条件选择视频源 + if (!run_with_camera) { + cout << "Input 1 for camera, 0 for video files" << endl; + cin >> from_camera; + } + + while (true) { + // 打开视频源 + if (from_camera) { + video = new CameraWrapper(ARMOR_CAMERA_EXPOSURE, ARMOR_CAMERA_GAIN, 2); + } else { + video = new VideoWrapper(PROJECT_DIR"/video/blue_big.avi"); + } + if (video->init()) { + LOGM("video_source initialization successfully."); + } else { + LOGW("video_source unavailable!"); + } + + // 跳过前10帧噪声图像。 + Mat src; + for (int i = 0; i < 10; i++) { + if (video) { + video->read(src); + } + } + bool ok = true; + cout << "start running" << endl; + do { + CNT_TIME("Total", { + if (last_state != ARMOR_STATE) { + LOGM(STR_CTR(WORD_RED, "Start Armor!")); + destroyAllWindows(); + if (from_camera) { + delete video; + video = new CameraWrapper(ARMOR_CAMERA_EXPOSURE, ARMOR_CAMERA_GAIN, 2/*, "armor"*/); + if (video->init()) { + LOGM("video_gimbal source initialization successfully."); + } else { + LOGW("video_gimbal source unavailable!"); + } + } + } + CNT_TIME(STR_CTR(WORD_GREEN, "read img"), { + if(!checkReconnect(video->read(src))) continue; + }); +#ifdef GIMBAL_FLIP_MODE + flip(src, src, GIMBAL_FLIP_MODE); +#endif + CNT_TIME("something whatever", { + if (!from_camera) extract(src); + if (save_video) saveVideos(src); + if (show_origin) showOrigin(src); + }); + CNT_TIME(STR_CTR(WORD_CYAN, "Armor Time"), { + armor_finder.run(src); + }); + last_state = ARMOR_STATE; // 强制保持在自瞄模式 + if(run_by_frame) cv::waitKey(0); + }); + } while (ok); + delete video; + video = nullptr; + cout << "Program fails. Restarting" << endl; + } + return 0; +} + + diff --git a/others/MVCAMSDK_X64.lib b/others/MVCAMSDK_X64.lib new file mode 100644 index 0000000..02ccc10 Binary files /dev/null and b/others/MVCAMSDK_X64.lib differ diff --git a/others/armor.Config b/others/armor.Config new file mode 100644 index 0000000..9b2e5ae --- /dev/null +++ b/others/armor.Config @@ -0,0 +1,153 @@ +create_time = "2019-05-13 20:58:58"; +internal_id = "E7FCFFE8999B"; +resolution : +{ + image_size : + { + iIndex = 1; + acDescription = "1280X1024 ROI"; + uBinSumMode = 0; + uBinAverageMode = 0; + uSkipMode = 0; + uResampleMask = 0; + iHOffsetFOV = 56; + iVOffsetFOV = 0; + iWidthFOV = 1280; + iHeightFOV = 1024; + iWidth = 1280; + iHeight = 1024; + iWidthZoomHd = 0; + iHeightZoomHd = 0; + iWidthZoomSw = 0; + iHeightZoomSw = 0; + }; + image_size_for_snap : + { + iIndex = 255; + acDescription = ""; + uBinSumMode = 0; + uBinAverageMode = 0; + uSkipMode = 0; + uResampleMask = 0; + iHOffsetFOV = 0; + iVOffsetFOV = 0; + iWidthFOV = 0; + iHeightFOV = 0; + iWidth = 0; + iHeight = 0; + iWidthZoomHd = 0; + iHeightZoomHd = 0; + iWidthZoomSw = 0; + iHeightZoomSw = 0; + }; + transfer_roi_mask = 0; + transfer_roi_x1 = [ 0, 0, 0, 0 ]; + transfer_roi_y1 = [ 0, 0, 0, 0 ]; + transfer_roi_x2 = [ 0, 0, 0, 0 ]; + transfer_roi_y2 = [ 0, 0, 0, 0 ]; +}; +exposure : +{ + anti_flick_freq = 0; + anti_flick = false; + show_ae_window = false; + ae_window_height = 0; + ae_window_width = 0; + ae_window_voff = 0; + ae_window_hoff = 0; + analog_gain = 64; + exp_time = 10000.0; + ae_target = 120; + ae_enable = false; + user_exposure_time = 10000.0; + user_ae_min_exposure_time = 0.0; + user_ae_max_exposure_time = 10000000.0; + user_ae_min_analog_gain = 16; + user_ae_max_analog_gain = 64; + ae_threshold = 10; +}; +video_format : +{ + frame_speed_sel = 1; + trans_pack_len_sel = 0; + media_type_sel = 0; + auto_reconnect = true; + hdr_gain_mode = 0; +}; +overlay : +{ + cross_line : + { + show = [ false, false, false, false, false, false, false, false, false ]; + color = [ 6458569, 15539236, 16756425, 13156327, 16773632, 0, 0, 0, 0 ]; + pos = [ 376, 240, 188, 120, 564, 120, 188, 360, 564, 360, 0, 0, 0, 0, 0, 0, 0, 0 ]; + }; +}; +isp_color : +{ + auto_wb = false; + mono = false; + inverse = false; + r_gain = 195; + g_gain = 174; + b_gain = 180; + wb_window_hoff = 0; + wb_window_voff = 0; + wb_window_width = 0; + wb_window_height = 0; + show_wb_window = false; + saturation = 100; + clr_temp_mode = 0; + clr_temp_sel = 1; + user_clr_temp : + { + desc = ""; + matrix = [ 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 ]; + r = 1.0; + g = 1.0; + b = 1.0; + }; + raw2rgb_algorithm_sw_sel = 1; +}; +isp_lut : +{ + lut_preset_sel = 0; + lut_mode = 1; + user_def_lut = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095 ]; + gamma = 100; + contrast = 100; + black_level = 0; + white_level = 255; +}; +isp_shape : +{ + noise_reduce = false; + vflip = false; + hflip = false; + rotate_dir = 0; + sharpness = 0; + defect_corr = true; + flat_fielding_corr_enable = false; + flat_fielding_corr_param_file_path = ""; + denoise3d_enable = false; + denoise3d_length = 0; + denoise3d_use_weight = false; +}; +trigger_set : +{ + count_per_trigger = 1; + enable_trigger = false; + trigger_sel = 0; + ext_trig_delay_time = 0; + ext_trig_signal_type = 0; + ext_trig_shutter_type = 0; + strobe_pulse_width = 10; + strobe_delay_time = 50; + strobe_polarity = 0; + strobe_mode = 1; + jitter_time = 50000; +}; +wdr : +{ + awdr_enable = false; +}; diff --git a/others/include/additions.h b/others/include/additions.h new file mode 100644 index 0000000..a75c340 --- /dev/null +++ b/others/include/additions.h @@ -0,0 +1,77 @@ +// +// Created by sjturm on 19-5-17. +// + +#ifndef _ADDITIONS_H_ +#define _ADDITIONS_H_ + +#include +#include +#include +#include +// 单片机端回传数据结构体 +struct McuData { + float curr_yaw; // 当前云台yaw角度 + float curr_pitch; // 当前云台pitch角 + uint8_t state; // 当前状态 + uint8_t mark; // 云台角度标记位 + uint8_t anti_top; // 是否为反陀螺模式 + uint8_t enemy_color; // 敌方颜色 + int reserved_x; // 保留位 (原能量机关x轴补偿量) + int reserved_y; // 保留位 (原能量机关y轴补偿量) +}; + +extern McuData mcu_data; +// 串口接收函数 +void uartReceive(Serial *pSerial); +// 相机断线重连函数 +bool checkReconnect(bool is_camera_connect); +// 视频保存函数 +void saveVideos(const cv::Mat &src); +// 原始图像显示函数 +void showOrigin(const cv::Mat &src); +// 图像裁剪函数 +void extract(cv::Mat &src); + +double getPointLength(const cv::Point2f &p); + +// 循环队列 +template +class RoundQueue { +private: + type data[length]; + int head; + int tail; +public: + RoundQueue() : head(0), tail(0) {}; + + constexpr int size() const { + return length; + }; + + bool empty() const { + return head == tail; + }; + + void push(const type &obj) { + data[head] = obj; + head = (head + 1) % length; + if (head == tail) { + tail = (tail + 1) % length; + } + }; + + bool pop(type &obj) { + if (empty()) return false; + obj = data[tail]; + tail = (tail + 1) % length; + return true; + }; + + type &operator[](int idx) { + while (tail + idx < 0) idx += length; + return data[(tail + idx) % length]; + }; +}; + +#endif /* _ADDITIONS_H_ */ diff --git a/others/include/camera/CameraApi.h b/others/include/camera/CameraApi.h new file mode 100644 index 0000000..bf8d377 --- /dev/null +++ b/others/include/camera/CameraApi.h @@ -0,0 +1,4842 @@ +#ifndef _MVCAMAPI_H_ +#define _MVCAMAPI_H_ + + +#ifdef DLL_EXPORT +#define MVSDK_API extern "C" __declspec(dllexport) +#else +#define MVSDK_API extern "C" __declspec(dllimport) +#endif +#include +#include "CameraDefine.h" +#include "CameraStatus.h" + +/// @ingroup API_BASIC +/// \~chinese +/// \brief ʼSDKԡúڼֻҪһΡ +/// \param [in] iLanguageSel ѡSDKڲʾϢͽ,0:ʾӢ,1:ʾġ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Initialize the SDK language. This function only needs to be called once during the entire process run. +/// \param [in] iLanguageSel The language used to select the prompt information and interface of the SDK. 0: English, 1: Chinese. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSdkInit( + int iLanguageSel +); + +/// @ingroup API_ENUM +/// \~chinese +/// \brief ö豸豸б +/// \param [out] pCameraList 豸бָ +/// \param [inout] piNums 豸ĸָ룬ʱpCameraListԪظʱʵҵ豸 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ +/// \warning piNumsֵָʼҲpCameraListԪظпڴ +/// \note صϢбacFriendlyNameġԽֱΪCamera1͡Camera2ֺΪCamera1ǰ棬ΪCamera2ź档 +/// \~english +/// \brief Enumerate devices and establish a list of devices +/// \param [out] pCameraList Device list array pointer +/// \param [inout] piNums The number of pointers to the device, the number of elements passed to the pCameraList array at the time of the call. When the function returns, the number of devices actually found is saved. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \warning piNums The value pointed to must be initialized and does not exceed the number of pCameraList array elements, otherwise it may cause memory overflow +/// \note The list of returned camera information will be sorted according to acFriendlyName. For example, after changing the two cameras to the names of "Camera1" and "Camera2," the camera named "Camera1" will be in front, and the camera named "Camera2" will be behind the row. +MVSDK_API CameraSdkStatus __stdcall CameraEnumerateDevice( + tSdkCameraDevInfo* pCameraList, + INT* piNums +); + +/// @ingroup API_ENUM +/// \~chinese +/// \brief ö豸豸бڵ@link #CameraInitEx @endlink֮ǰøúö豸 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Enumerate devices and create a list of devices. Before calling @link #CameraInitEx @endlink, this function must be called to enumerate the device. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API INT __stdcall CameraEnumerateDeviceEx( +); + +/// @ingroup API_OPEN +/// \~chinese +/// \brief 豸ǷѾ +/// \param [in] pCameraInfo 豸öϢṹָ룬@link #CameraEnumerateDevice @endlinká +/// \param [out] pOpened 豸״ָ̬룬豸Ƿ񱻴򿪵״̬TRUEΪ򿪣FALSEΪС +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Check if the device has been opened +/// \param [in] pCameraInfo Device enumeration information structure pointer, obtained by @link #CameraEnumerateDevice @endlink +/// \param [out] pOpened The device's status pointer returns whether the device is turned on. TRUE is on and FALSE is idle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraIsOpened( + tSdkCameraDevInfo* pCameraInfo, + BOOL* pOpened +); + +/// @ingroup API_OPEN +/// \~chinese +/// \brief ʼʼɹ󣬲ܵصIJӿڡ +/// \param [in] pCameraInfo 豸öϢṹָ룬@link #CameraEnumerateDevice @endlinká +/// \param [in] emParamLoadMode ʼʱʹõIJطʽ-1ʾʹϴ˳ʱIJطʽȡֵο@link #emSdkParameterMode @endlink塣 +/// \param [in] emTeam ʼʱʹõIJ顣-1ʾϴ˳ʱIJ顣 +/// \param [out] pCameraHandle ľָ룬ʼɹ󣬸ָ뷵ظЧ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The camera is initialized. After successful initialization, other camera-related operation interfaces can be called. +/// \param [in] pCameraInfo Device enumeration information structure pointer, obtained by @link #CameraEnumerateDevice @endlink. +/// \param [in] emParamLoadMode The parameter loading method used when the camera is initialized. -1 means to use the parameter loading method from the last exit. Other values are defined in @link #emSdkParameterMode @endlink. +/// \param [in] emTeam Parameter group used during initialization. -1 means to load the parameter group from the last exit. +/// \param [out] pCameraHandle The handle pointer of the camera, after successful initialization, returns the camera's effective handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraInit( + tSdkCameraDevInfo* pCameraInfo, + int emParamLoadMode, + int emTeam, + CameraHandle* pCameraHandle +); + +/// @ingroup API_OPEN +/// \~chinese +/// \brief ʼʼɹ󣬲ܵصIJӿڡ +/// \param [in] iDeviceIndex ţ@link #CameraEnumerateDeviceEx @endlink +/// \param [in] emParamLoadMode ʼʱʹõIJطʽ-1ʾʹϴ˳ʱIJطʽȡֵο@link #emSdkParameterMode @endlink塣 +/// \param [in] emTeam ʼʱʹõIJ顣-1ʾϴ˳ʱIJ顣 +/// \param [out] pCameraHandle ľָ룬ʼɹ󣬸ָ뷵ظЧ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The camera is initialized. After successful initialization, other camera-related operation interfaces can be called. +/// \param [in] iDeviceIndex The camera's index number, @link #CameraEnumerateDeviceEx @endlink returns the number of cameras. +/// \param [in] emParamLoadMode The parameter loading method used when the camera is initialized. -1 means to use the parameter loading method from the last exit. Other values are defined in @link #emSdkParameterMode @endlink. +/// \param [in] emTeam Parameter group used during initialization. -1 means to load the parameter group from the last exit. +/// \param [out] pCameraHandle The handle pointer of the camera, after successful initialization, returns the camera's effective handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraInitEx( + int iDeviceIndex, + int emParamLoadMode, + int emTeam, + CameraHandle* pCameraHandle +); + +/// @ingroup API_OPEN +/// \~chinese +/// \brief ʼʼɹ󣬲ܵصIJӿڡ +/// \param [in] CameraName dzơ@link #tSdkCameraDevInfo.acFriendlyName @endlink +/// \param [out] pCameraHandle ľָ룬ʼɹ󣬸ָ뷵ظЧ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The camera is initialized. After successful initialization, other camera-related operation interfaces can be called. +/// \param [in] CameraName Camera friendly name.@link #tSdkCameraDevInfo.acFriendlyName @endlink +/// \param [out] pCameraHandle The handle pointer of the camera, after successful initialization, returns the camera's effective handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraInitEx2( + char* CameraName, + CameraHandle *pCameraHandle +); + +/// @ingroup API_GRAB_CB +/// \~chinese +/// \brief ͼ񲶻Ļصµͼ֡ʱpCallBackָĻصͻᱻá +/// \param [in] hCamera ľ +/// \param [in] pCallBack صָ롣 +/// \param [in] pContext صĸӲڻصʱøӲᱻ룬ΪNULLڶʱЯϢ +/// \param [out] pCallbackOld ڷ֮ǰõĻصΪNULL +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the image capture's callback function. When a new frame of image data is captured, the callback function pointed to by pCallBack is called. +/// \param [in] hCamera Camera handle. +/// \param [in] pCallBack Callback function pointer. +/// \param [in] pContext Additional parameters of the callback function, which will be passed in when the callback function is called, can be NULL. Use additional information when used with multiple cameras. +/// \param [out] pCallbackOld Returns the previously set callback function. Can be NULL. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetCallbackFunction( + CameraHandle hCamera, + CAMERA_SNAP_PROC pCallBack, + PVOID pContext, + CAMERA_SNAP_PROC* pCallbackOld +); + +/// @ingroup API_CLOSE +/// \~chinese +/// \brief ʼͷԴ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The camera is deinitialized. Release resources. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraUnInit( + CameraHandle hCamera +); + +/// @ingroup API_BASIC +/// \~chinese +/// \brief Ϣ +/// \param [in] hCamera ľ +/// \param [out] pbuffer ָϢָָ롣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get camera description information +/// \param [in] hCamera Camera handle. +/// \param [out] pbuffer Pointer to the camera description information pointer. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetInformation( + CameraHandle hCamera, + char** pbuffer +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief õԭʼͼݽдӱͶȡɫУȴЧõRGB888ʽͼݡ +/// \param [in] hCamera ľ +/// \param [in] pbyIn ͼݵĻַΪNULL +/// \param [out] pbyOut ͼĻַΪNULL +/// \param [inout] pFrInfo ͼ֡ͷϢɺ֡ͷϢеͼʽuiMediaType֮ı䡣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The obtained raw camera output image data is processed to superimpose processing effects such as saturation, color gain and correction, noise reduction, etc. Finally, image data of RGB888 format is obtained. +/// \param [in] hCamera Camera handle. +/// \param [in] pbyIn The buffer address of the input image data cannot be NULL. +/// \param [out] pbyOut The buffer address of the image output after processing cannot be NULL. +/// \param [inout] pFrInfo After inputting the frame header information of the image, the image format uiMediaType in the frame header information will be changed after the processing is completed. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImageProcess( + CameraHandle hCamera, + BYTE* pbyIn, + BYTE* pbyOut, + tSdkFrameHead* pFrInfo +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief õԭʼͼݽдӱͶȡɫУȴЧõRGB888ʽͼݡ +/// \param [in] hCamera ľ +/// \param [in] pbyIn ͼݵĻַΪNULL +/// \param [out] pbyOut ͼĻַΪNULL +/// \param [inout] pFrInfo ͼ֡ͷϢɺ֡ͷϢеͼʽuiMediaType֮ı䡣 +/// \param [in] uOutFormat ͼʽCAMERA_MEDIA_TYPE_MONO8CAMERA_MEDIA_TYPE_RGBCAMERA_MEDIA_TYPE_RGBA8һ֡ +/// \param [in] uReserved ԤΪ0 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The obtained raw camera output image data is processed to superimpose processing effects such as saturation, color gain and correction, noise reduction, etc. Finally, image data of RGB888 format is obtained. +/// \param [in] hCamera Camera handle. +/// \param [in] pbyIn The buffer address of the input image data cannot be NULL. +/// \param [out] pbyOut The buffer address of the image output after processing cannot be NULL. +/// \param [inout] pFrInfo After inputting the frame header information of the image, the image format uiMediaType in the frame header information will be changed after the processing is completed. +/// \param [in] uOutFormat The output format of the image after processing. It may be one of CAMERA_MEDIA_TYPE_MONO8,CAMERA_MEDIA_TYPE_RGB,CAMERA_MEDIA_TYPE_RGBA8. +/// \param [in] uReserved Reservation parameters must be set to 0. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImageProcessEx( + CameraHandle hCamera, + BYTE* pbyIn, + BYTE* pbyOut, + tSdkFrameHead* pFrInfo, + UINT uOutFormat, + UINT uReserved +); + +/// @ingroup API_DISPLAY +/// \~chinese +/// \brief ʼSDKڲʾģ顣ڵ@link #CameraDisplayRGB24 @endlinkǰȵøúʼڶοУʹԼķʽͼʾ(CameraDisplayRGB24)Ҫñ +/// \param [in] hCamera ľ +/// \param [in] hWndDisplay ʾڵľһΪڵm_hWndԱ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Initialize the display module inside the SDK. The function must be called before calling @link #CameraDisplayRGB24 @endlink. If you use your own method for image display (do not call CameraDisplayRGB24) during secondary development, you do not need to call this function. +/// \param [in] hCamera Camera handle. +/// \param [in] hWndDisplay The handle of the display window, typically the m_hWnd member of the window. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraDisplayInit( + CameraHandle hCamera, + HWND hWndDisplay +); + +/// @ingroup API_DISPLAY +/// \~chinese +/// \brief ʾͼ񡣱ù@link #CameraDisplayInit @endlinkгʼܵñ +/// \param [in] hCamera ľ +/// \param [in] pFrameBuffer ͼ֡ +/// \param [in] pFrInfo ͼ֡ͷϢ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Display the image. You must call @link #CameraDisplayInit @endlink before you can call this function. +/// \param [in] hCamera Camera handle. +/// \param [in] pFrameBuffer Image frame buffer +/// \param [in] pFrInfo The frame header information of the image +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraDisplayRGB24( + CameraHandle hCamera, + BYTE* pFrameBuffer, + tSdkFrameHead* pFrInfo +); + +/// @ingroup API_DISPLAY +/// \~chinese +/// \brief ʾģʽ +/// \param [in] hCamera ľ +/// \param [in] iMode ʾģʽμ@link #emSdkDisplayMode @endlinkĶ塣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the display mode. +/// \param [in] hCamera Camera handle. +/// \param [in] iMode Display mode, see @link #emSdkDisplayMode @endlink definition. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetDisplayMode( + CameraHandle hCamera, + INT iMode +); + +/// @ingroup API_DISPLAY +/// \~chinese +/// \brief ʾʼƫֵʾģʽΪDISPLAYMODE_REALʱЧʾؼĴСΪ320X240ͼĵijߴΪ640X480ôiOffsetX = 160,iOffsetY = 120ʱʾͼľ320X240λá +/// \param [in] hCamera ľ +/// \param [in] iOffsetX ƫƵXꡣ +/// \param [in] iOffsetY ƫƵYꡣ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the starting offset of the display. This is valid only when the display mode is DISPLAY MODE_REAL. For example, the size of the display control is 320240, and the size of the image is 640480. When iOffsetX = 160 and iOffsetY = 120, the displayed area is the center 320240 of the image. +/// \param [in] hCamera Camera handle. +/// \param [in] iOffsetX The offset's X coordinate. +/// \param [in] iOffsetY The offset's Y coordinate. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetDisplayOffset( + CameraHandle hCamera, + int iOffsetX, + int iOffsetY +); + +/// @ingroup API_DISPLAY +/// \~chinese +/// \brief ʾؼijߴ硣 +/// \param [in] hCamera ľ +/// \param [in] iWidth +/// \param [in] iHeight ߶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the size of the display control. +/// \param [in] hCamera Camera handle. +/// \param [in] iWidth width +/// \param [in] iHeight height +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetDisplaySize( + CameraHandle hCamera, + INT iWidth, + INT iHeight +); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief һ֡ͼݡΪЧʣSDKͼץȡʱ㿽ƣʵʻںеһַ +/// \param [in] hCamera ľ +/// \param [out] pFrameInfo ͼ֡ͷϢָ롣 +/// \param [out] pbyBuffer ͼݵĻָ롣 +/// \param [in] wTimes ץȡͼijʱʱ䣬λ롣wTimesʱڻδͼú᷵سʱ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note úɹú󣬱@link CameraReleaseImageBuffer @endlinkͷŻ,Աں˼ʹøû +/// \~english +/// \brief Get a frame of image data. To improve efficiency, the SDK uses a zero-copy mechanism for image capture. This function actually obtains a buffer address in the kernel. +/// \param [in] hCamera Camera handle. +/// \param [out] pFrameInfo The header information pointer of the image. +/// \param [out] pbyBuffer Returns the buffer pointer of the image data. +/// \param [in] wTimes Timeout for grabbing an image in milliseconds. The function returns a timeout error if no image has been obtained within wTimes. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note After the function is successfully called, @link CameraReleaseImageBuffer @endlink must be called to release the buffer so that the kernel can continue to use the buffer. +MVSDK_API CameraSdkStatus __stdcall CameraGetImageBuffer( + CameraHandle hCamera, + tSdkFrameHead* pFrameInfo, + BYTE** pbyBuffer, + UINT wTimes +); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief һ֡ͼݡýӿڻõͼѾͼݡ +/// \param [in] hCamera ľ +/// \param [out] piWidth ָ룬ͼĿȡ +/// \param [out] piHeight ָ룬ͼĸ߶ȡ +/// \param [in] wTimes ץȡͼijʱʱ䣬λ롣wTimesʱڻδͼú᷵سʱ +/// \return ɹʱ֡ݻ׵ַ򷵻0 +/// \note Ҫ@link CameraReleaseImageBuffer @endlinkͷŻ +/// \~english +/// \brief Get a frame of image data. The image data obtained by this interface is already image-processed data. +/// \param [in] hCamera Camera handle. +/// \param [out] piWidth returns the width of the image. +/// \param [out] piHeight Returns the height of the image. +/// \param [in] wTimes Timeout for grabbing an image in milliseconds. The function returns a timeout error if no image has been obtained within wTimes. +/// \return On success, returns the first address of the frame data buffer, otherwise it returns 0. +/// \note This function does not need to call @link CameraReleaseImageBuffer @endlink to release the buffer. +MVSDK_API unsigned char* __stdcall CameraGetImageBufferEx( + CameraHandle hCamera, + INT* piWidth, + INT* piHeight, + UINT wTimes +); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief ץһͼ񵽻СץģʽԶлץģʽķֱʽͼ񲶻 +/// \param [in] hCamera ľ +/// \param [out] pFrameInfo ͼ֡ͷϢָ롣 +/// \param [out] pbyBuffer ͼݵĻָ롣 +/// \param [in] wTimes ץȡͼijʱʱ䣬λ롣wTimesʱڻδͼú᷵سʱ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note úɹú󣬱@link CameraReleaseImageBuffer @endlinkͷŻ,Աں˼ʹøû +/// \warning ܻзֱлЧʻ@link #CameraGetImageBuffer @endlink͡ûлֱץĵʹ@link #CameraGetImageBuffer @endlink +/// \~english +/// \brief Take an image into the buffer. The camera will enter snap mode and automatically switch to snap mode resolution for image capture. +/// \param [in] hCamera Camera handle. +/// \param [out] pFrameInfo The header information pointer of the image. +/// \param [out] pbyBuffer Returns the buffer pointer of the image data. +/// \param [in] wTimes Timeout for grabbing an image in milliseconds. The function returns a timeout error if no image has been obtained within wTimes. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note After the function is successfully called, @link CameraReleaseImageBuffer @endlink must be called to release the buffer so that the kernel can continue to use the buffer. +/// \warning This function may switch the resolution, so the efficiency will be lower than @link #CameraGetImageBuffer @endlink. If you do not need to switch resolution capture, use @link #CameraGetImageBuffer @endlink. +MVSDK_API CameraSdkStatus __stdcall CameraSnapToBuffer( + CameraHandle hCamera, + tSdkFrameHead* pFrameInfo, + BYTE** pbyBuffer, + UINT wTimes +); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief ͷ@link #CameraGetImageBuffer @endlinkõĻ +/// \param [in] hCamera ľ +/// \param [in] pbyBuffer ַ֡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Releases the buffer obtained by @link #CameraGetImageBuffer @endlink. +/// \param [in] hCamera Camera handle. +/// \param [in] pbyBuffer Frame buffer address. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraReleaseImageBuffer( + CameraHandle hCamera, + BYTE* pbyBuffer +); + +/// @ingroup API_PLAY_CTRL +/// \~chinese +/// \brief 빤ģʽʼ͵ͼݡ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Put the camera into working mode and start receiving image data from the camera. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraPlay( + CameraHandle hCamera +); + +/// @ingroup API_PLAY_CTRL +/// \~chinese +/// \brief ͣģʽͼݣͬʱҲᷢͣͷŴͣģʽ£ԶIJãЧ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Put the camera into pause mode, do not receive image data from the camera, and also send a command to pause the camera output and release the transmission bandwidth. In pause mode, camera parameters can be configured and take effect immediately. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraPause( + CameraHandle hCamera +); + +/// @ingroup API_PLAY_CTRL +/// \~chinese +/// \brief ֹͣ״̬һǷʼʱøúúãٶIJá +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Let the camera enter the stop state. Generally, this function is called when deinitializing. The function is called and the camera parameters cannot be configured. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraStop( + CameraHandle hCamera +); + +/// @ingroup API_RECORD +/// \~chinese +/// \brief ʼһ¼ +/// \param [in] hCamera ľ +/// \param [in] iFormat ¼ĸʽǰֲֻ֧ѹMSCVַʽ0:ѹ 1:MSCVʽѹ +/// \param [in] pcSavePath ¼ļ· +/// \param [in] b2GLimit ΪTRUE,ļ2GʱԶָδʵ֣ +/// \param [in] dwQuality ¼ӣԽԽáΧ1100. +/// \param [in] iFrameRate ¼֡ʡ趨ıʵʲɼ֡ʴͲ©֡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Initialize a video. +/// \param [in] hCamera Camera handle. +/// \param [in] iFormat The video format currently supports only the uncompressed and MSCV modes. 0: No compression 1: MSCV compression. +/// \param [in] pcSavePath The path to save the video file. +/// \param [in] b2GLimit If TRUE, the file is automatically split when it is larger than 2G. (Function not implemented) +/// \param [in] dwQuality The larger the quality factor of the video, the better the quality. Range 1 to 100. +/// \param [in] iFrameRate The frame rate of the video. It is recommended to set a larger frame rate than the actual acquisition so that no frames are missed. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraInitRecord( + CameraHandle hCamera, + int iFormat, + char* pcSavePath, + BOOL b2GLimit, + DWORD dwQuality, + int iFrameRate +); + +/// @ingroup API_RECORD +/// \~chinese +/// \brief ¼񡣵@link #CameraInitRecord @endlink󣬿ͨúһ¼񣬲ļ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief End this video. After @link #CameraInitRecord @endlink, you can use this function to end a video and complete the file save operation. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraStopRecord( + CameraHandle hCamera +); + +/// @ingroup API_RECORD +/// \~chinese +/// \brief һ֡ݴ¼Сǵ֡ͷϢЯͼɼʱϢ¼Ծ׼ʱͬ֡ʲȶӰ졣 +/// \param [in] hCamera ľ +/// \param [in] pbyImageBuffer ͼݻ +/// \param [in] pFrInfo ͼ֡ͷϢ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief One frame of data is stored in the video stream. Since our frame header information carries the timestamp information of the image acquisition, the recording can be accurately time synchronized without being affected by the instability of the frame rate. +/// \param [in] hCamera Camera handle. +/// \param [in] pbyImageBuffer Image data buffer. +/// \param [in] pFrInfo The frame header information of the image. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraPushFrame( + CameraHandle hCamera, + BYTE* pbyImageBuffer, + tSdkFrameHead* pFrInfo +); + +/// @ingroup API_SAVE_IMAGE +/// \~chinese +/// \brief ͼ񻺳ݱͼƬļ +/// \param [in] hCamera ľ +/// \param [in] lpszFileName ͼƬļ· +/// \param [in] pbyImageBuffer ͼݻ +/// \param [in] pFrInfo ͼ֡ͷϢ +/// \param [in] byFileType ͼ񱣴ĸʽȡֵΧμ@link #emSdkFileType @endlinkĶ塣 +/// \param [in] byQuality ͼ񱣴ӣΪJPGʽʱòЧΧ1100ʽд0 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note Ŀǰ֧ BMPJPGPNGRAWָʽRAWʾԭʼݣRAWʽļҪpbyImageBufferpFrInfo@link #CameraGetImageBuffer @endlinkõݣδ@link #CameraImageProcess @endlinkתBMPʽ֮ҪBMPJPGPNGʽpbyImageBufferpFrInfo@link #CameraImageProcess @endlinkRGBʽݡ÷ԲοAdvanced̡ +/// \~english +/// \brief Save the image buffer data as a picture file. +/// \param [in] hCamera Camera handle. +/// \param [in] lpszFileName The picture saves the full path to the file. +/// \param [in] pbyImageBuffer Image data buffer. +/// \param [in] pFrInfo The frame header information of the image. +/// \param [in] byFileType Image save format. See the definition of @link #emSdkFileType @endlink for the range of values. +/// \param [in] byQuality The quality factor of the saved image. This parameter is valid only when saving in JPG format. The range is from 1 to 100. The rest of the format can be written as 0. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Currently supports BMP, JPG, PNG, RAW four formats. Among them, RAW represents the raw data output by the camera. Saving RAW format files requires pbyImageBuffer and pFrInfo to be obtained by @link #CameraGetImageBuffer @endlink, and without @link #CameraImageProcess @endlink converting to BMP format; otherwise, if you want to save to BMP JPG or PNG format, pbyImageBuffer and pFrInfo are RGB format data processed by @link #CameraImageProcess @endlink. Specific usage can refer to Advanced's routines. +MVSDK_API CameraSdkStatus __stdcall CameraSaveImage( + CameraHandle hCamera, + char* lpszFileName, + BYTE* pbyImageBuffer, + tSdkFrameHead* pFrInfo, + UINT byFileType, + BYTE byQuality +); + +/// @ingroup API_SAVE_IMAGE +/// \~chinese +/// \brief ͼ񻺳ݱͼƬļ +/// \param [in] hCamera ľ +/// \param [in] lpszFileName ͼƬļ· +/// \param [in] pbyImageBuffer ͼݻ +/// \param [in] uImageFormat 0:8 BIT gray 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [in] iWidth ͼƬ +/// \param [in] iHeight ͼƬ߶ +/// \param [in] byFileType ͼ񱣴ĸʽȡֵΧμ@link #emSdkFileType @endlinkĶ塣 +/// \param [in] byQuality ͼ񱣴ӣΪJPGʽʱòЧΧ1100ʽд0 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note @link #CameraSaveImage @endlinkͬ +/// \~english +/// \brief Save the image buffer data as a picture file. +/// \param [in] hCamera Camera handle. +/// \param [in] lpszFileName The picture saves the full path to the file. +/// \param [in] pbyImageBuffer Image data buffer. +/// \param [in] uImageFormat 0:8 BIT gray 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [in] iWidth width +/// \param [in] iHeight height +/// \param [in] byFileType Image save format. See the definition of @link #emSdkFileType @endlink for the range of values. +/// \param [in] byQuality The quality factor of the saved image. This parameter is valid only when saving in JPG format. The range is from 1 to 100. The rest of the format can be written as 0. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Same as @link #CameraSaveImage @endlink +MVSDK_API CameraSdkStatus __stdcall CameraSaveImageEx( + CameraHandle hCamera, + char* lpszFileName, + BYTE* pbyImageBuffer, + UINT uImageFormat, + int iWidth, + int iHeight, + UINT byFileType, + BYTE byQuality + ); + +/// @ingroup API_ROI +/// \~chinese +/// \brief õǰԤķֱʡ +/// \param [in] hCamera ľ +/// \param [out] psCurVideoSize صǰķֱʡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the current preview resolution. +/// \param [in] hCamera Camera handle. +/// \param [out] psCurVideoSize Returns the current resolution. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetImageResolution( + CameraHandle hCamera, + tSdkImageResolution* psCurVideoSize +); + +/// @ingroup API_ROI +/// \~chinese +/// \brief õǰԤķֱʡ +/// \param [in] hCamera ľ +/// \param [out] iIndex ţ[0,N]ʾԤķֱ(N ΪԤֱʵһ㲻20),OXFF ʾԶֱ(ROI) +/// \param [out] acDescription ÷ֱʵϢԤֱʱϢЧԶֱʿɺԸϢ +/// \param [out] Mode 0: ͨģʽ 1Sum 2Average 3Skip 4Resample +/// \param [out] ModeSize ͨģʽºԣ1λʾ2X2 ڶλʾ3X3 ... +/// \param [out] x ˮƽƫ +/// \param [out] y ֱƫ +/// \param [out] width +/// \param [out] height +/// \param [out] ZoomWidth ʱſȣ0ʾ +/// \param [out] ZoomHeight ʱŸ߶ȣ0ʾ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the current preview resolution. +/// \param [in] hCamera Camera handle. +/// \param [out] iIndex Index number, [0,N] indicates the default resolution (N is the maximum number of preset resolutions, generally no more than 20), OXFF indicates custom resolution (ROI) +/// \param [out] acDescription Descriptive information for this resolution. This information is valid only when the resolution is preset. Custom resolution ignores this information +/// \param [out] Mode 0: Normal Mode 1:Sum 2:Average 3:Skip 4:Resample +/// \param [out] ModeSize ignored in normal mode, the first bit represents 2X2 the second bit represents 3X3 ... +/// \param [out] x horizontal offset +/// \param [out] y vertical offset +/// \param [out] width width +/// \param [out] height high +/// \param [out] ZoomWidth Scale width when final output, 0 means not zoom +/// \param [out] ZoomHeight Scales the height of the final output, 0 means no scaling +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetImageResolutionEx( + CameraHandle hCamera, + int* iIndex, + char acDescription[32], + int* Mode, + UINT* ModeSize, + int* x, + int* y, + int* width, + int* height, + int* ZoomWidth, + int* ZoomHeight + ); + +/// @ingroup API_ROI +/// \~chinese +/// \brief Ԥķֱʡ +/// \param [in] hCamera ľ +/// \param [in] pImageResolution ·ֱʡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the resolution of the preview. +/// \param [in] hCamera Camera handle. +/// \param [in] pImageResolution New resolution. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetImageResolution( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution +); + +/// @ingroup API_ROI +/// \~chinese +/// \brief õǰԤķֱʡ +/// \param [in] hCamera ľ +/// \param [in] iIndex ţ[0,N]ʾԤķֱ(N ΪԤֱʵһ㲻20),OXFF ʾԶֱ(ROI) +/// \param [in] Mode 0: ͨģʽ 1Sum 2Average 3Skip 4Resample +/// \param [in] ModeSize ͨģʽºԣ1λʾ2X2 ڶλʾ3X3 ... +/// \param [in] x ˮƽƫ +/// \param [in] y ֱƫ +/// \param [in] width +/// \param [in] height +/// \param [in] ZoomWidth ʱſȣ0ʾ +/// \param [in] ZoomHeight ʱŸ߶ȣ0ʾ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the current preview resolution. +/// \param [in] hCamera Camera handle. +/// \param [in] iIndex Index number, [0,N] indicates the default resolution (N is the maximum number of preset resolutions, generally no more than 20), OXFF indicates custom resolution (ROI) +/// \param [in] Mode 0: Normal Mode 1:Sum 2:Average 3:Skip 4:Resample +/// \param [in] ModeSize ignored in normal mode, the first bit represents 2X2 the second bit represents 3X3 ... +/// \param [in] x horizontal offset +/// \param [in] y vertical offset +/// \param [in] width width +/// \param [in] height high +/// \param [in] ZoomWidth Scale width when final output, 0 means not zoom +/// \param [in] ZoomHeight Scales the height of the final output, 0 means no scaling +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetImageResolutionEx( + CameraHandle hCamera, + int iIndex, + int Mode, + UINT ModeSize, + int x, + int y, + int width, + int height, + int ZoomWidth, + int ZoomHeight + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ǰԭʼݵĸʽš +/// \param [in] hCamera ľ +/// \param [out] piMediaType صǰʽ͵š +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note @link #tSdkCameraCapbility.pMediaTypeDesc @endlinkԱУʽֵ֧ĸʽpiMediaTypeָţǸš +/// \~english +/// \brief Gets the format index number of the camera's current output raw data. +/// \param [in] hCamera Camera handle. +/// \param [out] piMediaType Returns the index of the current format type. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note In the @link #tSdkCameraCapbility.pMediaTypeDesc @endlink member, the format supported by the camera is saved as an array. The index number pointed to by piMediaType is the index number of the array. +MVSDK_API CameraSdkStatus __stdcall CameraGetMediaType( + CameraHandle hCamera, + INT* piMediaType +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ԭʼݸʽ +/// \param [in] hCamera ľ +/// \param [in] iMediaType ¸ʽ͵š +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note @link #CameraGetMediaType @endlinkͬ +/// \~english +/// \brief Sets the camera's output raw data format. +/// \param [in] hCamera Camera handle. +/// \param [in] iMediaType The index number of the new format type. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Same as @link #CameraGetMediaType @endlink. +MVSDK_API CameraSdkStatus __stdcall CameraSetMediaType( + CameraHandle hCamera, + INT iMediaType +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief عģʽԶֶ +/// \param [in] hCamera ľ +/// \param [in] bAeState TRUE:Զع⣻FALSE:ֶع⡣ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the camera exposure mode. Automatic or manual. +/// \param [in] hCamera Camera handle. +/// \param [in] bAeState TRUE: Auto exposure; FALSE: Manual exposure. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetAeState( + CameraHandle hCamera, + BOOL bAeState +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ǰعģʽ +/// \param [in] hCamera ľ +/// \param [out] pAeState Զعʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the camera's current exposure mode. +/// \param [in] hCamera Camera handle. +/// \param [out] pAeState Returns the auto exposure's enable state. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAeState( + CameraHandle hCamera, + BOOL* pAeState +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ͼĴ񻯲 +/// \param [in] hCamera ľ +/// \param [in] iSharpness 񻯲һ[0,100]0ʾر񻯴 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the sharpening parameters for the processing of the image. +/// \param [in] hCamera Camera handle. +/// \param [in] iSharpness Sharpen parameter, generally [0,100], 0 means close sharpening. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetSharpness( + CameraHandle hCamera, + int iSharpness +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ȡǰ趨ֵ +/// \param [in] hCamera ľ +/// \param [out] piSharpness صǰ趨񻯵趨ֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Gets the current sharpening setting. +/// \param [in] hCamera Camera handle. +/// \param [out] piSharpness Returns the currently set sharpened setting. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetSharpness( + CameraHandle hCamera, + int* piSharpness +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief IJ任ģʽLUTģʽ +/// \param [in] hCamera ľ +/// \param [in] emLutMode ο@link #emSdkLutMode @endlink͡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the camera's lookup table transformation mode LUT mode. +/// \param [in] hCamera Camera handle. +/// \param [in] emLutMode Defines the reference @link #emSdkLutMode @endlink type. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetLutMode( + CameraHandle hCamera, + int emLutMode +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief IJ任ģʽLUTģʽ +/// \param [in] hCamera ľ +/// \param [out] pemLutMode صǰLUTģʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Obtain the look-up table conversion mode LUT mode of the camera. +/// \param [in] hCamera Camera handle. +/// \param [out] pemLutMode Returns the current LUT mode. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetLutMode( + CameraHandle hCamera, + int* pemLutMode +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ѡԤLUTģʽµLUT +/// \param [in] hCamera ľ +/// \param [in] iSel šĸ@link #tSdkCameraCapbility.iPresetLut @endlinká +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ʹ@link #CameraSetLutMode @endlinkLUTģʽΪԤģʽ +/// \~english +/// \brief Select the LUT table in the preset LUT mode. +/// \param [in] hCamera Camera handle. +/// \param [in] iSel The index number of the lut table. The number of tables is obtained by @link #tSdkCameraCapbility.iPresetLut @endlink. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Must use @link #CameraSetLutMode @endlink to set LUT mode to preset mode. +MVSDK_API CameraSdkStatus __stdcall CameraSelectLutPreset( + CameraHandle hCamera, + int iSel +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ԤLUTģʽµLUTš +/// \param [in] hCamera ľ +/// \param [out] piSel رš +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The LUT table index number in the preset LUT mode is obtained. +/// \param [in] hCamera Camera handle. +/// \param [out] piSel Returns the index number of the table. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetLutPresetSel( + CameraHandle hCamera, + int* piSel +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ԶLUT +/// \param [in] hCamera ľ +/// \param [in] iChannel ָҪ趨LUTɫͨΪ@link #LUT_CHANNEL_ALL @endlinkʱͨLUTͬʱ滻@see emSdkLutChannel +/// \param [in] pLut ָ룬ָLUTĵַLUTΪ޷Ŷ飬СΪ4096ֱɫͨ04096(12bitɫ)Ӧӳֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ʹ@link #CameraSetLutMode @endlinkLUTģʽΪԶģʽ +/// \~english +/// \brief Set up a custom LUT table. +/// \param [in] hCamera Camera handle. +/// \param [in] iChannel Specifies the LUT color channel to be set. When @link #LUT_CHANNEL_ALL @endlink, the three-channel LUTs will be replaced at the same time. @see emSdkLutChannel +/// \param [in] pLut pointer to the address of the LUT table. The LUT table is an unsigned short integer array, and the array size is 4096, which is the mapping value corresponding to the code color channel from 0 to 4096 (12 bit color accuracy). +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note You must use @link #CameraSetLutMode @endlink to set the LUT mode to custom mode. +MVSDK_API CameraSdkStatus __stdcall CameraSetCustomLut( + CameraHandle hCamera, + int iChannel, + USHORT* pLut +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief õǰʹõԶLUT +/// \param [in] hCamera ľ +/// \param [in] iChannel ָҪȡLUTɫͨΪ@link #LUT_CHANNEL_ALL @endlinkʱغɫͨLUT@see emSdkLutChannel +/// \param [out] pLut ָLUTĵַLUTΪ޷Ŷ飬СΪ4096ֱɫͨ04096(12bitɫ)Ӧӳֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the currently used custom LUT table. +/// \param [in] hCamera Camera handle. +/// \param [in] iChannel Specifies the LUT color channel to be obtained. When @link #LUT_CHANNEL_ALL @endlink, returns the LUT table of the red channel. @see emSdkLutChannel +/// \param [out] pLut points to the address of the LUT table. The LUT table is an unsigned short integer array, and the array size is 4096, which is the mapping value corresponding to the code color channel from 0 to 4096 (12 bit color accuracy). +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetCustomLut( + CameraHandle hCamera, + int iChannel, + USHORT* pLut +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ǰLUTκLUTģʽ¶Ե,ֱ۵Ĺ۲LUTߵı仯 +/// \param [in] hCamera ľ +/// \param [in] iChannel ָҪȡLUTɫͨΪ@link #LUT_CHANNEL_ALL @endlinkʱغɫͨLUT@see emSdkLutChannel +/// \param [out] pLut ָLUTĵַLUTΪ޷Ŷ飬СΪ4096ֱɫͨ04096(12bitɫ)Ӧӳֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Obtain the camera's current LUT table, which can be called in any LUT mode, to intuitively observe changes in the LUT curve. +/// \param [in] hCamera Camera handle. +/// \param [in] iChannel Specifies the LUT color channel to be obtained. When @link #LUT_CHANNEL_ALL @endlink, returns the LUT table of the red channel. @see emSdkLutChannel +/// \param [out] pLut points to the address of the LUT table. The LUT table is an unsigned short integer array, and the array size is 4096, which is the mapping value corresponding to the code color channel from 0 to 4096 (12 bit color accuracy). +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetCurrentLut( + CameraHandle hCamera, + int iChannel, + USHORT* pLut +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ƽģʽΪֶԶַʽ +/// \param [in] hCamera ľ +/// \param [in] bAuto TRUEʾʹԶģʽ FALSEʾʹֶģʽͨ@link #CameraSetOnceWB @endlinkһΰƽ⡣ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set camera white balance mode. Divided into manual and automatic two ways. +/// \param [in] hCamera Camera handle. +/// \param [in] bAuto TRUE to enable auto mode. FALSE indicates that using manual mode, a white balance is performed by calling @link #CameraSetOnceWB @endlink. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetWbMode( + CameraHandle hCamera, + BOOL bAuto +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief õǰİƽģʽ +/// \param [in] hCamera ľ +/// \param [out] pbAuto ָ룬TRUEʾԶģʽFALSEΪֶģʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the current white balance mode. +/// \param [in] hCamera Camera handle. +/// \param [out] pbAuto pointer, return TRUE for automatic mode, FALSE for manual mode. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetWbMode( + CameraHandle hCamera, + BOOL* pbAuto +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ѡָԤɫģʽ +/// \param [in] hCamera ľ +/// \param [in] iSel Ԥɫµģʽţ0ʼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note @link #CameraSetClrTempMode @endlinkΪԤģʽ +/// \~english +/// \brief Select the specified preset color temperature mode +/// \param [in] hCamera Camera handle. +/// \param [in] iSel The mode index number of the preset color temperature, starting from 0 +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Call @link #CameraSetClrTempMode @endlink set to preset mode. +MVSDK_API CameraSdkStatus __stdcall CameraSetPresetClrTemp( + CameraHandle hCamera, + int iSel +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief õǰѡԤɫģʽ +/// \param [in] hCamera ľ +/// \param [out] piSel ѡԤɫ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the currently selected preset color temperature mode. +/// \param [in] hCamera Camera handle. +/// \param [out] piSel Returns the selected preset color temperature index number +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetPresetClrTemp( + CameraHandle hCamera, + int* piSel +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief Զɫģʽµ +/// \param [in] hCamera ľ +/// \param [in] iRgain ɫ棬Χ0400ʾ04 +/// \param [in] iGgain ɫ棬Χ0400ʾ04 +/// \param [in] iBgain ɫ棬Χ0400ʾ04 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note @link #CameraSetClrTempMode @endlinkΪԶģʽ +/// \~english +/// \brief Set digital gain in custom color temperature mode +/// \param [in] hCamera Camera handle. +/// \param [in] iRgain Red gain, range 0 to 400, 0 to 4 times +/// \param [in] iGgain Green gain, range 0 to 400, 0 to 4 times +/// \param [in] iBgain Blue gain, range 0 to 400, 0 to 4 times +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Call @link #CameraSetClrTempMode @endlink set to custom mode. +MVSDK_API CameraSdkStatus __stdcall CameraSetUserClrTempGain( + CameraHandle hCamera, + int iRgain, + int iGgain, + int iBgain +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief Զɫģʽµ +/// \param [in] hCamera ľ +/// \param [out] piRgain ָ룬غɫ棬Χ0400ʾ04 +/// \param [out] piGgain ָ룬ɫ棬Χ0400ʾ04 +/// \param [out] piBgain ָ룬ɫ棬Χ0400ʾ04 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get digital gain in custom color temperature mode +/// \param [in] hCamera Camera handle. +/// \param [out] piRgain pointer, returning red gain, range 0 to 400, 0 to 4 times +/// \param [out] piGgain pointer, return green gain, range 0 to 400, 0 to 4 times +/// \param [out] piBgain pointer, returns blue gain, range 0 to 400, 0 to 4 times +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetUserClrTempGain( + CameraHandle hCamera, + int* piRgain, + int* piGgain, + int* piBgain +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief Զɫģʽµɫ +/// \param [in] hCamera ľ +/// \param [in] pMatrix ָһfloat[3][3]׵ַ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note @link #CameraSetClrTempMode @endlinkΪԶģʽ +/// \~english +/// \brief Set the color matrix in custom color temperature mode +/// \param [in] hCamera Camera handle. +/// \param [in] pMatrix points to the first address of an array of float[3][3] +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Call @link #CameraSetClrTempMode @endlink set to custom mode. +MVSDK_API CameraSdkStatus __stdcall CameraSetUserClrTempMatrix( + CameraHandle hCamera, + float* pMatrix +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief Զɫģʽµɫ +/// \param [in] hCamera ľ +/// \param [out] pMatrix ָһfloat[3][3]׵ַ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the color matrix in a custom color temperature mode +/// \param [in] hCamera Camera handle. +/// \param [out] pMatrix points to the first address of an array of float[3][3] +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetUserClrTempMatrix( + CameraHandle hCamera, + float* pMatrix +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ðƽʱʹõɫģʽ +/// \param [in] hCamera ľ +/// \param [in] iMode ģʽֻ@link #emSdkClrTmpMode @endlinkжһ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ֵ֧ģʽֱ֣ԶԤԶ塣 +/// \note Զģʽ£Զѡʵɫģʽ +/// \note Ԥģʽ£ʹûָɫģʽ +/// \note Զģʽ£ʹûԶɫ; +/// \~english +/// \brief Color temperature mode used when setting white balance +/// \param [in] hCamera Camera handle. +/// \param [in] iMode mode, can only be defined by @link #emSdkClrTmpMode @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note There are three supported modes, automatic, preset, and custom. +/// \note Automatic mode will automatically select the appropriate color temperature mode +/// \note In preset mode, user-specified color temperature mode is used +/// \note custom-defined color temperature digital gain and matrix +MVSDK_API CameraSdkStatus __stdcall CameraSetClrTempMode( + CameraHandle hCamera, + int iMode +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ðƽʱʹõɫģʽο@link #CameraSetClrTempMode @endlinkй֡ +/// \param [in] hCamera ľ +/// \param [out] pimode ָ룬ģʽѡ񣬲ο@link #emSdkClrTmpMode @endlinkͶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The color temperature mode used when obtaining white balance. Refer to the function description section of @link #CameraSetClrTempMode @endlink. +/// \param [in] hCamera Camera handle. +/// \param [out] pimode pointer, return mode selection, reference @link #emSdkClrTmpMode @endlink type definition +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetClrTempMode( + CameraHandle hCamera, + int* pimode +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ֶƽģʽ£øúһΰƽ⡣ЧʱΪյһ֡ͼʱ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief In manual white balance mode, calling this function will perform a white balance. The effective time is when the next frame of image data is received. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetOnceWB( + CameraHandle hCamera +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ִһκƽҪֱ֧ܣ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Performs a black balance operation. (Requires camera support for this feature) +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetOnceBB( + CameraHandle hCamera +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief 趨ԶعĿֵ趨Χ[@link #tSdkExpose.uiTargetMin @endlink, @link #tSdkExpose.uiTargetMax @endlink] +/// \param [in] hCamera ľ +/// \param [in] iAeTarget Ŀֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the brightness target for auto exposure. Setting range [@link #tSdkExpose.uiTargetMin @endlink, @link #tSdkExpose.uiTargetMax @endlink] +/// \param [in] hCamera Camera handle. +/// \param [in] iAeTarget Brightness target value. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetAeTarget( + CameraHandle hCamera, + int iAeTarget +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ԶعĿֵ +/// \param [in] hCamera ľ +/// \param [out] piAeTarget ָ룬Ŀֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the auto exposure's brightness target value. +/// \param [in] hCamera Camera handle. +/// \param [out] piAeTarget pointer, return target value. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAeTarget( + CameraHandle hCamera, + int* piAeTarget +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief 趨ԶعģʽعʱڷΧ +/// \param [in] hCamera ľ +/// \param [in] fMinExposureTime Сعʱ䣨΢룩 +/// \param [in] fMaxExposureTime عʱ䣨΢룩 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Setting the exposure time adjustment range of the automatic exposure mode +/// \param [in] hCamera Camera handle. +/// \param [in] fMinExposureTime Minimum exposure time (microseconds) +/// \param [in] fMaxExposureTime Maximum exposure time (microseconds) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetAeExposureRange( + CameraHandle hCamera, + double fMinExposureTime, + double fMaxExposureTime + ); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ԶعģʽعʱڷΧ +/// \param [in] hCamera ľ +/// \param [out] fMinExposureTime Сعʱ䣨΢룩 +/// \param [out] fMaxExposureTime عʱ䣨΢룩 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Exposure time adjustment range for automatic exposure mode +/// \param [in] hCamera Camera handle. +/// \param [out] fMinExposureTime Minimum exposure time (microseconds) +/// \param [out] fMaxExposureTime Maximum exposure time (microseconds) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAeExposureRange( + CameraHandle hCamera, + double* fMinExposureTime, + double* fMaxExposureTime + ); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief 趨ԶعģʽڷΧ +/// \param [in] hCamera ľ +/// \param [in] iMinAnalogGain С +/// \param [in] iMaxAnalogGain +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Setting the gain adjustment range of the automatic exposure mode +/// \param [in] hCamera Camera handle. +/// \param [in] iMinAnalogGain minimum gain +/// \param [in] iMaxAnalogGain maximum gain +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetAeAnalogGainRange( + CameraHandle hCamera, + int iMinAnalogGain, + int iMaxAnalogGain + ); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ԶعģʽڷΧ +/// \param [in] hCamera ľ +/// \param [out] iMinAnalogGain С +/// \param [out] iMaxAnalogGain +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Gain adjustment range for automatic exposure mode +/// \param [in] hCamera Camera handle. +/// \param [out] iMinAnalogGain minimum gain +/// \param [out] iMaxAnalogGain maximum gain +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAeAnalogGainRange( + CameraHandle hCamera, + int* iMinAnalogGain, + int* iMaxAnalogGain + ); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief Զعģʽĵֵ +/// \param [in] hCamera ľ +/// \param [in] iThreshold abs(Ŀ-ͼ) < iThreshold ֹͣԶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the adjustment threshold for auto exposure mode +/// \param [in] hCamera Camera handle. +/// \param [in] iThreshold Stops automatic adjustment if abs (target brightness - image brightness) < iThreshold +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetAeThreshold( + CameraHandle hCamera, + int iThreshold + ); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ȡԶعģʽĵֵ +/// \param [in] hCamera ľ +/// \param [out] iThreshold ȡĵֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get adjustment threshold for auto exposure mode +/// \param [in] hCamera Camera handle. +/// \param [out] iThreshold Read Threshold +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAeThreshold( + CameraHandle hCamera, + int* iThreshold + ); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief عʱ䡣λΪ΢롣 +/// \param [in] hCamera ľ +/// \param [in] fExposureTime عʱ䣬λ΢롣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note CMOSعĵλǰģˣعʱ䲢΢뼶ɵǻᰴȡᡣڵñ趨عʱ󣬽ٵ@link #CameraGetExposureTime @endlinkʵ趨ֵ +/// \~english +/// \brief Set the exposure time. The unit is microseconds. +/// \param [in] hCamera Camera handle. +/// \param [in] fExposureTime Exposure time in microseconds. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note For CMOS sensors, the unit of exposure is calculated in rows, so the exposure time cannot be continuously adjusted in microseconds. Instead, the entire line will be chosen. After calling this function to set the exposure time, it is recommended to call @link #CameraGetExposureTime @endlink to get the actual set value. +MVSDK_API CameraSdkStatus __stdcall CameraSetExposureTime( + CameraHandle hCamera, + double fExposureTime +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief һеعʱ䡣 +/// \param [in] hCamera ľ +/// \param [out] pfLineTime ָ룬һеعʱ䣬λΪ΢롣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note CMOSعĵλǰģˣعʱ䲢΢뼶ɵǻᰴȡᡣþǷCMOSعһжӦʱ䡣 +/// \~english +/// \brief Get a line of exposure time. +/// \param [in] hCamera Camera handle. +/// \param [out] pfLineTime returns the exposure time of one line in microseconds. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note For CMOS sensors, the unit of exposure is calculated in rows, so the exposure time cannot be continuously adjusted in microseconds. Instead, the entire line will be chosen. The function of this function is to return the CMOS camera exposure one line corresponding time. +MVSDK_API CameraSdkStatus __stdcall CameraGetExposureLineTime( + CameraHandle hCamera, + double* pfLineTime +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief عʱ䡣 +/// \param [in] hCamera ľ +/// \param [out] pfExposureTime ָ룬صǰعʱ䣬λ΢롣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetExposureTime +/// \~english +/// \brief Get camera exposure time. +/// \param [in] hCamera Camera handle. +/// \param [out] pfExposureTime returns the current exposure time in microseconds. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetExposureTime +MVSDK_API CameraSdkStatus __stdcall CameraGetExposureTime( + CameraHandle hCamera, + double* pfExposureTime +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief عʱ䷶Χ +/// \param [in] hCamera ľ +/// \param [out] pfMin ָ룬عʱСֵλ΢롣 +/// \param [out] pfMax ָ룬عʱֵλ΢롣 +/// \param [out] pfStep ָ룬عʱIJֵλ΢롣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get camera exposure time range +/// \param [in] hCamera Camera handle. +/// \param [out] pfMin Returns the minimum exposure time in microseconds. +/// \param [out] pfMax Returns the maximum exposure time in microseconds. +/// \param [out] pfStep Returns the exposure time in microseconds. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetExposureTimeRange( + CameraHandle hCamera, + double* pfMin, + double* pfMax, + double* pfStep + ); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ͼģֵ +/// \param [in] hCamera ľ +/// \param [in] iAnalogGain 趨ģֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ֵ@link #tSdkExpose.fAnalogGainStep @endlink͵õʵʵͼźŷŴ +/// \~english +/// \brief Set the camera's image analog gain value. +/// \param [in] hCamera Camera handle. +/// \param [in] iAnalogGain gain value set +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note This value is multiplied by @link #tSdkExpose.fAnalogGainStep @endlink to get the actual image signal magnification. +MVSDK_API CameraSdkStatus __stdcall CameraSetAnalogGain( + CameraHandle hCamera, + INT iAnalogGain +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ͼźŵģֵ +/// \param [in] hCamera ľ +/// \param [out] piAnalogGain ָ룬صǰģֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetAnalogGain +/// \~english +/// \brief Obtain the analog gain value of the image signal. +/// \param [in] hCamera Camera handle. +/// \param [out] piAnalogGain Returns the current analog gain value. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetAnalogGain +MVSDK_API CameraSdkStatus __stdcall CameraGetAnalogGain( + CameraHandle hCamera, + INT* piAnalogGain +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ͼ档 +/// \param [in] hCamera ľ +/// \param [in] iRGain ɫֵͨ +/// \param [in] iGGain ɫֵͨ +/// \param [in] iBGain ɫֵͨ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note 趨Χ@link #tRgbGainRange @endlinkԱʵʵķŴ趨ֵ/100 +/// \~english +/// \brief Set the digital gain of the image. +/// \param [in] hCamera Camera handle. +/// \param [in] iRGain The gain value of the red channel. +/// \param [in] iGGain Gain value of green channel. +/// \param [in] iBGain The gain value of the blue channel. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note The set scope is described by the @link #tRgbGainRange @endlink member. The actual magnification is the setting /100. +MVSDK_API CameraSdkStatus __stdcall CameraSetGain( + CameraHandle hCamera, + int iRGain, + int iGGain, + int iBGain +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ͼ档 +/// \param [in] hCamera ľ +/// \param [out] piRGain ָ룬غɫֵͨ +/// \param [out] piGGain ָ룬ɫֵͨ +/// \param [out] piBGain ָ룬ɫֵͨ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetGain +/// \~english +/// \brief Get the digital gain of image processing. +/// \param [in] hCamera Camera handle. +/// \param [out] piRGain Returns the digital gain value of the red channel. +/// \param [out] piGGain Returns the digital gain value of the green channel. +/// \param [out] piBGain Returns the digital gain value of the blue channel. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetGain +MVSDK_API CameraSdkStatus __stdcall CameraGetGain( + CameraHandle hCamera, + int* piRGain, + int* piGGain, + int* piBGain +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief 趨LUT̬ģʽµGammaֵ +/// \param [in] hCamera ľ +/// \param [in] iGamma Ҫ趨Gammaֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note 趨ֵϱSDKڲֻеڶ̬ɵLUTģʽʱŻЧο@link #CameraSetLutMode @endlinkĺ˵֡ +/// \~english +/// \brief Set the gamma value in LUT dynamic generation mode. +/// \param [in] hCamera Camera handle. +/// \param [in] iGamma The gamma to be set. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note The set value will be stored in the SDK immediately, but it will only take effect when the camera is in LUT mode generated by dynamic parameters. Please refer to the function description part of @link #CameraSetLutMode @endlink. +MVSDK_API CameraSdkStatus __stdcall CameraSetGamma( + CameraHandle hCamera, + int iGamma +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief LUT̬ģʽµGammaֵ +/// \param [in] hCamera ľ +/// \param [out] piGamma ָ룬صǰGammaֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetGamma +/// \~english +/// \brief Get gamma value in LUT dynamic generation mode +/// \param [in] hCamera Camera handle. +/// \param [out] piGamma Returns the current gamma value. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetGamma +MVSDK_API CameraSdkStatus __stdcall CameraGetGamma( + CameraHandle hCamera, + int* piGamma +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief 趨LUT̬ģʽµĶԱȶֵ +/// \param [in] hCamera ľ +/// \param [in] iContrast 趨ĶԱȶֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note 趨ֵϱSDKڲֻеڶ̬ɵLUTģʽʱŻЧο@link #CameraSetLutMode @endlinkĺ˵֡ +/// \~english +/// \brief Sets the contrast value in LUT dynamic generation mode. +/// \param [in] hCamera Camera handle. +/// \param [in] iContrast Contrast value set by iContrast. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note The set value will be stored in the SDK immediately, but it will only take effect when the camera is in LUT mode generated by dynamic parameters. Please refer to the function description part of @link #CameraSetLutMode @endlink. +MVSDK_API CameraSdkStatus __stdcall CameraSetContrast( + CameraHandle hCamera, + int iContrast +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief LUT̬ģʽµĶԱȶֵ +/// \param [in] hCamera ľ +/// \param [out] piContrast ָ룬صǰĶԱȶֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetContrast +/// \~english +/// \brief Get the contrast value in LUT dynamic generation mode. +/// \param [in] hCamera Camera handle. +/// \param [out] piContrast Returns the current contrast value. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetContrast +MVSDK_API CameraSdkStatus __stdcall CameraGetContrast( + CameraHandle hCamera, + int* piContrast +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief 趨ͼıͶȡ +/// \param [in] hCamera ľ +/// \param [in] iSaturation 趨ıͶֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ԺڰЧ趨Χ@link #tSaturationRange @endlinká100ʾԭʼɫȣǿ +/// \~english +/// \brief Sets the saturation of image processing. +/// \param [in] hCamera Camera handle. +/// \param [in] iSaturation saturation value. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note is not valid for black and white cameras. The setting range is obtained by @link #tSaturationRange @endlink. 100 represents the original color and is not enhanced. +MVSDK_API CameraSdkStatus __stdcall CameraSetSaturation( + CameraHandle hCamera, + int iSaturation +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ͼıͶȡ +/// \param [in] hCamera ľ +/// \param [out] piSaturation ָ룬صǰͼıͶֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetSaturation +/// \~english +/// \brief Get image processing saturation. +/// \param [in] hCamera Camera handle. +/// \param [out] piSaturation Returns the saturation value of the current image processing. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetSaturation +MVSDK_API CameraSdkStatus __stdcall CameraGetSaturation( + CameraHandle hCamera, + int* piSaturation +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief òɫתΪڰ׹ܵʹܡ +/// \param [in] hCamera ľ +/// \param [in] bEnable TRUEʾɫͼתΪڰס +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the color to mono function enable. +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable TRUE to change the color image to black and white. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetMonochrome( + CameraHandle hCamera, + BOOL bEnable +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief òɫתڰ׹ܵʹ״ +/// \param [in] hCamera ľ +/// \param [out] pbEnable ָ롣TRUEʾ˲ɫͼתΪڰͼĹܡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetMonochrome +/// \~english +/// \brief Get the status of enabling black and white color conversion. +/// \param [in] hCamera Camera handle. +/// \param [out] pbEnable Returns TRUE to enable the conversion of a color image to a mono image. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetMonochrome +MVSDK_API CameraSdkStatus __stdcall CameraGetMonochrome( + CameraHandle hCamera, + BOOL* pbEnable +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief òͼɫתܵʹܡ +/// \param [in] hCamera ľ +/// \param [in] bEnable TRUEʾͼɫתܣԻƽƬЧ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the enable for the color image color flip function. +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable TRUE, means that the image color flip function is enabled, and the effect of similar film negatives can be obtained. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetInverse( + CameraHandle hCamera, + BOOL bEnable +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ͼɫתܵʹ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbEnable ָ룬ظùʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the status of the image color inversion function. +/// \param [in] hCamera Camera handle. +/// \param [out] pbEnable Returns this function enable state. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetInverse( + CameraHandle hCamera, + BOOL* pbEnable +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ԶعʱƵܵʹ״̬ +/// \param [in] hCamera ľ +/// \param [in] bEnable TRUEƵ;FALSEرոùܡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ֶعģʽЧ +/// \~english +/// \brief Set the anti-strobe function's enable state during auto exposure. +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable TRUE, enable anti-strobe function; FALSE, disable this function. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Not valid for manual exposure mode. +MVSDK_API CameraSdkStatus __stdcall CameraSetAntiFlick( + CameraHandle hCamera, + BOOL bEnable +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ԶعʱƵܵʹ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbEnable ָ룬ظùܵʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the anti-strobe function's enable state during auto exposure. +/// \param [in] hCamera Camera handle. +/// \param [out] pbEnable Returns the enable state of this function. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAntiFlick( + CameraHandle hCamera, + BOOL* pbEnable +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ԶعʱƵƵѡ +/// \param [in] hCamera ľ +/// \param [out] piFrequencySel ָ룬ѡš0:50HZ 1:60HZ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief When the auto exposure is obtained, the frequency of the deflashing is selected. +/// \param [in] hCamera Camera handle. +/// \param [out] piFrequencySel Returns the selected index number. 0:50HZ 1:60HZ +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetLightFrequency( + CameraHandle hCamera, + int* piFrequencySel +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ԶعʱƵƵʡ +/// \param [in] hCamera ľ +/// \param [in] iFrequencySel 0:50HZ , 1:60HZ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the frequency at which the flash disappears during auto exposure. +/// \param [in] hCamera Camera handle. +/// \param [in] iFrequencySel 0:50HZ , 1:60HZ +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetLightFrequency( + CameraHandle hCamera, + int iFrequencySel +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief 趨ͼ֡ʡ +/// \param [in] hCamera ľ +/// \param [in] iFrameSpeed ѡ֡ģʽţΧ0tSdkCameraCapbility.iFrameSpeedDesc - 1 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the frame rate of the camera output image. +/// \param [in] hCamera Camera handle. +/// \param [in] iFrameSpeed Frame rate index, ranging from 0 to tSdkCameraCapbility.iFrameSpeedDesc - 1 +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetFrameSpeed( + CameraHandle hCamera, + int iFrameSpeed +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ͼ֡ѡš +/// \param [in] hCamera ľ +/// \param [out] piFrameSpeed ѡ֡ģʽš +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetFrameSpeed +/// \~english +/// \brief Obtain the frame rate selection index number of the camera output image. +/// \param [in] hCamera Camera handle. +/// \param [out] piFrameSpeed Returns the selected frame rate mode index number. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetFrameSpeed +MVSDK_API CameraSdkStatus __stdcall CameraGetFrameSpeed( + CameraHandle hCamera, + int* piFrameSpeed +); + +/// @ingroup API_PARAMETERS +/// \~chinese +/// \brief 趨ȡĿ +/// \param [in] hCamera ľ +/// \param [in] iMode ȡĶ󡣲ο@link #emSdkParameterMode @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the target object for parameter access. +/// \param [in] hCamera Camera handle. +/// \param [in] iMode The object accessed by the iMode parameter. Reference @link #emSdkParameterMode @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetParameterMode( + CameraHandle hCamera, + int iMode +); + +/// @ingroup API_PARAMETERS +/// \~chinese +/// \brief ȡȡĿ +/// \param [in] hCamera ľ +/// \param [out] piTarget زȡĶ󡣲ο@link #emSdkParameterMode @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Gets the target object for the parameter access. +/// \param [in] hCamera Camera handle. +/// \param [out] piTarget Returns the object accessed by the parameter. Reference @link #emSdkParameterMode @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetParameterMode( + CameraHandle hCamera, + int* piTarget +); + +/// @ingroup API_PARAMETERS +/// \~chinese +/// \brief òȡ롣غͱʱݸģǷػ߱档 +/// \param [in] hCamera ľ +/// \param [in] uMask 롣ο@link #emSdkPropSheetMask @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the mask for parameter access. When the parameters are loaded and saved, the mask is used to determine whether each module parameter is loaded or saved. +/// \param [in] hCamera Camera handle. +/// \param [in] uMask mask. Reference @link #emSdkPropSheetMask @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetParameterMask( + CameraHandle hCamera, + UINT uMask +); + +/// @ingroup API_PARAMETERS +/// \~chinese +/// \brief 浱ǰָIJСṩA,B,C,Dռвı档 +/// \param [in] hCamera ľ +/// \param [in] iTeam 飬ο@link #emSdkParameterTeam @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Save current camera parameters to the specified parameter group. The camera provides A, B, C, D four sets of space for parameter preservation. +/// \param [in] hCamera Camera handle. +/// \param [in] iTeam parameter group, refer to @link #emSdkParameterTeam @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSaveParameter( + CameraHandle hCamera, + int iTeam +); + +/// @ingroup API_PARAMETERS +/// \~chinese +/// \brief 浱ǰָļСļԸƵĵϹأҲá +/// \param [in] hCamera ľ +/// \param [in] sFileName ļ· +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Saves the current camera parameters to the specified file. This file can be copied to another computer for loading by other cameras, or it can be used for parameter backup. +/// \param [in] hCamera Camera handle. +/// \param [in] sFileName Full path to the sFileName parameter file. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSaveParameterToFile( + CameraHandle hCamera, + char* sFileName +); + +/// @ingroup API_PARAMETERS +/// \~chinese +/// \brief PCָIJļмزҹ˾PCΪ.config׺ļλڰװµCamera\\ConfigsļС +/// \param [in] hCamera ľ +/// \param [in] sFileName ļ· +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Load parameters from the parameter file specified on the PC. Our camera parameters are saved on the PC as a .config suffix file, which is located in the Camera\\Configs folder under installation. +/// \param [in] hCamera Camera handle. +/// \param [in] sFileName Full path to the sFileName parameter file. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraReadParameterFromFile( + CameraHandle hCamera, + char* sFileName +); + +/// @ingroup API_PARAMETERS +/// \~chinese +/// \brief ָIJС +/// \param [in] hCamera ľ +/// \param [in] iTeam 飬ο@link #emSdkParameterTeam @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Loads the parameters of the specified group into the camera. +/// \param [in] hCamera Camera handle. +/// \param [in] iTeam parameter group, refer to @link #emSdkParameterTeam @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraLoadParameter( + CameraHandle hCamera, + int iTeam +); + +/// @ingroup API_PARAMETERS +/// \~chinese +/// \brief õǰѡIJ顣 +/// \param [in] hCamera ľ +/// \param [in] piTeam ָ룬صǰѡIJ顣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the currently selected parameter group. +/// \param [in] hCamera Camera handle. +/// \param [in] piTeam Returns the currently selected parameter group. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetCurrentParameterGroup( + CameraHandle hCamera, + int* piTeam +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ͼݵķְС +/// \param [in] hCamera ľ +/// \param [in] iPackSel ְѡšְȿɻԽṹ@link #tSdkCameraCapbility.pPackLenDesc @endlinkԱ@link #tSdkCameraCapbility.iPackLenDesc @endlinkԱʾѡķְģʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ĿǰSDK汾УýӿڽGIGEӿЧ紫ķְС +/// \note ֧־֡ǽѡ8KķְСЧĽʹռõCPUʱ䡣 +/// \warning °汾SDKô˺SDKԶЭŵķְС +/// \~english +/// \brief Sets the packet size of the camera's transmitted image data. +/// \param [in] hCamera Camera handle. +/// \param [in] iPackSel Index number of the iPackSel packet length selection. The packet length can be expressed by the @link #tSdkCameraCapbility.pPackLenDesc @endlink member in the camera attribute structure. The @link #tSdkCameraCapbility.iPackLenDesc @endlink member represents the maximum number of optional packet modes. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note In the current SDK version, this interface is only valid for GIGE interface cameras and is used to control the packet size of the network transmission. +/// \note For NICs that support Jumbo Frames, we recommend choosing an 8K packet size that can effectively reduce the CPU processing time taken by the transfer. +/// \warning New version of the SDK does not need to call this function, the SDK will automatically negotiate the optimal packet size according to the network conditions +MVSDK_API CameraSdkStatus __stdcall CameraSetTransPackLen( + CameraHandle hCamera, + INT iPackSel +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ǰְСѡš +/// \param [in] hCamera ľ +/// \param [out] piPackSel ָ룬صǰѡķְСš +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetTransPackLen +/// \~english +/// \brief Gets the selected index number of the camera's current transmission packet size. +/// \param [in] hCamera Camera handle. +/// \param [out] piPackSel Returns the currently selected packet size index number. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetTransPackLen +MVSDK_API CameraSdkStatus __stdcall CameraGetTransPackLen( + CameraHandle hCamera, + INT* piPackSel +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief Զعοڵʾ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbIsVisible ָ룬TRUEʾǰڻᱻͼϡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Gets the display status of the auto exposure reference window. +/// \param [in] hCamera Camera handle. +/// \param [out] pbIsVisible returns TRUE, indicating that the current window will be overlaid on the image content. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraIsAeWinVisible( + CameraHandle hCamera, + BOOL* pbIsVisible +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief Զعοڵʾ״̬ +/// \param [in] hCamera ľ +/// \param [in] bIsVisible TRUEΪʾFALSEʾ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ô״̬Ϊʾ@link #CameraImageOverlay @endlinkܹλԾεķʽͼϡ +/// \~english +/// \brief Sets the display status of the auto exposure reference window. +/// \param [in] hCamera Camera handle. +/// \param [in] bIsVisible TRUE, set to show; FALSE, not show. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note When the window state is set to display, after calling @link #CameraImageOverlay @endlink, the window position can be superimposed on the image in a rectangular manner. +MVSDK_API CameraSdkStatus __stdcall CameraSetAeWinVisible( + CameraHandle hCamera, + BOOL bIsVisible +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief Զعοڵλá +/// \param [in] hCamera ľ +/// \param [out] piHOff ָ룬شλϽǺֵ +/// \param [out] piVOff ָ룬شλϽֵ +/// \param [out] piWidth ָ룬شڵĿȡ +/// \param [out] piHeight ָ룬شڵĸ߶ȡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the position of the auto exposure reference window. +/// \param [in] hCamera Camera handle. +/// \param [out] piHOff Returns the abscissa of the upper-left corner of the window. +/// \param [out] piVOff Returns the ordinate value in the upper left corner of the window. +/// \param [out] piWidth Returns the width of the window. +/// \param [out] piHeight Returns the height of the window. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAeWindow( + CameraHandle hCamera, + INT* piHOff, + INT* piVOff, + INT* piWidth, + INT* piHeight +); + +/// @ingroup API_EXPOSURE +/// \~chinese +/// \brief ԶعIJοڡ +/// \param [in] hCamera ľ +/// \param [in] iHOff Ͻǵĺ +/// \param [in] iVOff Ͻǵ +/// \param [in] iWidth ڵĿ +/// \param [in] iHeight ڵĸ߶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note iHOffiVOffiWidthiHeightȫΪ0򴰿Ϊÿֱµľ1/2Сŷֱʵı仯仯 +/// \note iHOffiVOffiWidthiHeightĴλ÷Χ˵ǰֱʷΧڣ Զʹþ1/2Сڡ +/// \~english +/// \brief Set the reference window for auto exposure. +/// \param [in] hCamera Camera handle. +/// \param [in] iHOff The horizontal axis of the window in the upper left corner +/// \param [in] iVOff The ordinate of the top left corner of the window +/// \param [in] iWidth width of window +/// \param [in] iHeight Height of window +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note If iHOff, iVOff, iWidth, and iHeight are all 0, the window is set to the center 1/2 size for each resolution. It can follow changes as the resolution changes. +/// \note If the window position range determined by iHOff, iVOff, iWidth, and iHeight exceeds the current resolution range, the centered 1/2 size window is automatically used. +MVSDK_API CameraSdkStatus __stdcall CameraSetAeWindow( + CameraHandle hCamera, + int iHOff, + int iVOff, + int iWidth, + int iHeight +); + +/// @ingroup API_MIRROR +/// \~chinese +/// \brief ͼΪˮƽʹֱ +/// \param [in] hCamera ľ +/// \param [in] iDir ʾķ0ʾˮƽ1ʾֱ +/// \param [in] bEnable TRUEʹܾ;FALSEֹ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set image mirroring operation. The mirroring operation is divided into horizontal and vertical directions. +/// \param [in] hCamera Camera handle. +/// \param [in] iDir Indicates the direction of the mirror. 0 means horizontal direction; 1 means vertical direction. +/// \param [in] bEnable TRUE to enable mirroring; FALSE to disable mirroring +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetMirror( + CameraHandle hCamera, + int iDir, + BOOL bEnable +); + +/// @ingroup API_MIRROR +/// \~chinese +/// \brief ͼľ״̬ +/// \param [in] hCamera ľ +/// \param [in] iDir ʾҪõľ0ʾˮƽ1ʾֱ +/// \param [out] pbEnable ָ룬TRUEʾiDirָķʹܡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the mirrored state of the image. +/// \param [in] hCamera Camera handle. +/// \param [in] iDir Indicates the mirroring direction to be obtained. 0 means horizontal direction; 1 means vertical direction. +/// \param [out] pbEnable Returns TRUE, indicating that the direction mirror image of iDir is enabled. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetMirror( + CameraHandle hCamera, + int iDir, + BOOL* pbEnable +); + +/// @ingroup API_MIRROR +/// \~chinese +/// \brief ͼת +/// \param [in] hCamera ľ +/// \param [in] iRot ʾתĽǶȣʱ뷽򣩣0ת 1:90 2:180 3:270ȣ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set image rotation operation +/// \param [in] hCamera Camera handle. +/// \param [in] iRot rotation angle (counterclockwise) (0: no rotation 1:90 degrees 2:180 degrees 3:270 degrees) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetRotate( + CameraHandle hCamera, + int iRot + ); + +/// @ingroup API_MIRROR +/// \~chinese +/// \brief ͼת״̬ +/// \param [in] hCamera ľ +/// \param [out] iRot ʾҪõת򡣣ʱ뷽򣩣0ת 1:90 2:180 3:270ȣ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the rotation state of the image. +/// \param [in] hCamera Camera handle. +/// \param [out] iRot Indicates the direction of rotation to get. (Counterclockwise) (0: Do not rotate 1:90 degree 2: 180 degree 3: 270 degree) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetRotate( + CameraHandle hCamera, + int* iRot + ); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ðƽοڵλá +/// \param [in] hCamera ľ +/// \param [out] PiHOff ָ룬زοڵϽǺ +/// \param [out] PiVOff ָ룬زοڵϽ +/// \param [out] PiWidth ָ룬زοڵĿȡ +/// \param [out] PiHeight ָ룬زοڵĸ߶ȡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the position of the white balance reference window. +/// \param [in] hCamera Camera handle. +/// \param [out] PiHOff Returns the top-left abscissa of the reference window. +/// \param [out] PiVOff Returns the upper-left ordinate of the reference window. +/// \param [out] PiWidth Returns the width of the reference window. +/// \param [out] PiHeight Returns the height of the reference window. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetWbWindow( + CameraHandle hCamera, + INT* PiHOff, + INT* PiVOff, + INT* PiWidth, + INT* PiHeight +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ðƽοڵλá +/// \param [in] hCamera ľ +/// \param [in] iHOff οڵϽǺꡣ +/// \param [in] iVOff οڵϽꡣ +/// \param [in] iWidth οڵĿȡ +/// \param [in] iHeight οڵĸ߶ȡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the position of the white balance reference window. +/// \param [in] hCamera Camera handle. +/// \param [in] iHOff The upper left corner of the reference window. +/// \param [in] iVOff The upper left ordinate of the reference window. +/// \param [in] iWidth Width of the reference window. +/// \param [in] iHeight The height of the reference window. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetWbWindow( + CameraHandle hCamera, + INT iHOff, + INT iVOff, + INT iWidth, + INT iHeight +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ðƽⴰڵʾ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbShow ָ룬TRUEʾǿɼġ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the display status of the white balance window. +/// \param [in] hCamera Camera handle. +/// \param [out] pbShow returns TRUE, indicating that the window is visible. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraIsWbWinVisible( + CameraHandle hCamera, + BOOL* pbShow +); + +/// @ingroup API_COLOR +/// \~chinese +/// \brief ðƽⴰڵʾ״̬ +/// \param [in] hCamera ľ +/// \param [in] bShow TRUEʾΪɼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ڵ@link #CameraImageOverlay @endlinkͼϽԾεķʽӰƽοڵλá +/// \~english +/// \brief Sets the display status of the white balance window. +/// \param [in] hCamera Camera handle. +/// \param [in] bShow TRUE indicates that the setting is visible. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note After calling @link #CameraImageOverlay @endlink, the white balance reference window's position will be overlaid on the image content in a rectangular manner. +MVSDK_API CameraSdkStatus __stdcall CameraSetWbWinVisible( + CameraHandle hCamera, + BOOL bShow +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief ͼϵʮߡƽοڡԶعοڵͼΡֻΪɼ״̬ʮߺͲοڲܱϡ +/// \param [in] hCamera ľ +/// \param [in] pRgbBuffer ͼݻ +/// \param [in] pFrInfo ͼ֡ͷϢ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The cross-line, white balance reference window, auto exposure reference window, etc. are superimposed on the input image data. Only crosshairs and reference windows that are set to visible can be overlaid. +/// \param [in] hCamera Camera handle. +/// \param [in] pRgbBuffer image data buffer. +/// \param [in] pFrInfo Frame header information for the image. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImageOverlay( + CameraHandle hCamera, + BYTE* pRgbBuffer, + tSdkFrameHead* pFrInfo +); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ָʮߵIJ +/// \param [in] hCamera ľ +/// \param [in] iLine ʾҪõڼʮߵ״̬ΧΪ[0,8]9 +/// \param [in] x ʮλõĺֵ +/// \param [in] y ʮλõֵ +/// \param [in] uColor ʮߵɫʽΪ(R|(G<<8)|(B<<16)) +/// \param [in] bVisible ʮߵʾ״̬TRUEʾʾ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ֻΪʾ״̬ʮߣڵ@link #CameraImageOverlay @endlinkŻᱻӵͼϡ +/// \~english +/// \brief Set the parameters for the specified crosshairs. +/// \param [in] hCamera Camera handle. +/// \param [in] iLine Indicates the status of the first few crosshairs. The range is [0,8] for a total of 9. +/// \param [in] x The abscissa of the crosshair center position. +/// \param [in] y The y-axis value of the crosshair center position. +/// \param [in] uColor The color of the crosshair in the format (R|(G<<8)|(B<<16)) +/// \param [in] bVisible Crosshair display status. TRUE, indicates the display. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Only crosshairs set to display state will be superimposed on the image after calling @link #CameraImageOverlay @endlink. +MVSDK_API CameraSdkStatus __stdcall CameraSetCrossLine( + CameraHandle hCamera, + int iLine, + INT x, + INT y, + UINT uColor, + BOOL bVisible +); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ָʮߵ״̬ +/// \param [in] hCamera ľ +/// \param [in] iLine ʾҪȡĵڼʮߵ״̬ΧΪ[0,8]9 +/// \param [out] px ָ룬ظʮλõĺꡣ +/// \param [out] py ָ룬ظʮλõĺꡣ +/// \param [out] pcolor ָ룬ظʮߵɫʽΪ(R|(G<<8)|(B<<16)) +/// \param [out] pbVisible ָ룬TRUEʾʮ߿ɼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the status of the designated crosshairs. +/// \param [in] hCamera Camera handle. +/// \param [in] iLine Indicates the status of the first few crosshairs to get. The range is [0,8] for a total of 9. +/// \param [out] px Returns the abscissa of the center of the crosshair. +/// \param [out] py Returns the abscissa of the center of the crosshair. +/// \param [out] pcolor Returns the color of this crosshair in the format (R|(G<<8)|(B<<16)). +/// \param [out] pbVisible returns TRUE, indicating that the crosshairs are visible. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetCrossLine( + CameraHandle hCamera, + INT iLine, + INT* px, + INT* py, + UINT* pcolor, + BOOL* pbVisible +); + +/// @ingroup API_BASIC +/// \~chinese +/// \brief ṹ塣ýṹаõĸֲķΧϢغIJأҲڶ̬ý档 +/// \param [in] hCamera ľ +/// \param [out] pCameraInfo ָ룬ظĽṹ塣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the camera's characteristic description structure. This structure contains range information of various parameters that the camera can set. Determines the return of parameters for related functions and can also be used to dynamically create camera configuration interfaces. +/// \param [in] hCamera Camera handle. +/// \param [out] pCameraInfo Returns the structure of the camera's property description. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetCapability( + CameraHandle hCamera, + tSdkCameraCapbility* pCameraInfo +); + +/******************************************************/ +// : CameraGetCapabilityEx +// : ṹ塣ýṹа +// õĸֲķΧϢغIJ +// أҲڶ̬ý档 +// : sDeviceModel ͺţɨблȡ +// pCameraInfo ָ룬ظĽṹ塣 +// tSdkCameraCapbilityCameraDefine.hж塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +MVSDK_API CameraSdkStatus __stdcall CameraGetCapabilityEx( + char* sDeviceModel, + tSdkCameraCapbility* pCameraInfo, + PVOID hCameraHandle +); + +/// @ingroup API_USERDATA +/// \~chinese +/// \brief кš +/// \param [in] hCamera ľ +/// \param [in] pbySN кŵĻ +/// \param [in] iLevel Ҫ趨кżֻ12 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ҹ˾кŷΪ30ҹ˾ԶкţʱѾ趨޷޸ģ12οʹáÿкųȶ32ֽڡ +/// \~english +/// \brief Set the camera's serial number. +/// \param [in] hCamera Camera handle. +/// \param [in] pbySN The buffer for the serial number. +/// \param [in] iLevel The serial number to be set can only be 1 or 2. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Our company camera serial number is divided into 3 levels. Level 0 is our company's custom camera serial number, which has been set at the factory and cannot be modified. Levels 1 and 2 are reserved for secondary development. Each serial number length is 32 bytes. +MVSDK_API CameraSdkStatus __stdcall CameraWriteSN( + CameraHandle hCamera, + BYTE* pbySN, + INT iLevel +); + +/// @ingroup API_USERDATA +/// \~chinese +/// \brief ȡָкš +/// \param [in] hCamera ľ +/// \param [in] pbySN кŵĻ +/// \param [in] iLevel Ҫȡкż𡣿Ϊ012 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraWriteSN +/// \~english +/// \brief Reads the camera's assigned level serial number. +/// \param [in] hCamera Camera handle. +/// \param [in] pbySN The buffer for the serial number. +/// \param [in] iLevel The sequence number to read. Can be 0, 1 and 2. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraWriteSN +MVSDK_API CameraSdkStatus __stdcall CameraReadSN( + CameraHandle hCamera, + BYTE* pbySN, + INT iLevel +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ӲģʽµĴʱʱ䣬λ΢롣 +/// \param [in] hCamera ľ +/// \param [in] uDelayTimeUs Ӳʱλ΢롣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note Ӳźٺ󣬾ָʱٿʼɼͼ +/// \~english +/// \brief Set the trigger delay time in hardware trigger mode, in microseconds. +/// \param [in] hCamera Camera handle. +/// \param [in] uDelayTimeUs Hard trigger delay. Units microseconds. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note When the hard trigger signal arrives, after a specified delay, it begins to capture the image. +MVSDK_API CameraSdkStatus __stdcall CameraSetTriggerDelayTime( + CameraHandle hCamera, + UINT uDelayTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief õǰ趨Ӳʱʱ䡣 +/// \param [in] hCamera ľ +/// \param [out] puDelayTimeUs ָ룬ʱʱ䣬λ΢롣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the currently set hard trigger delay time. +/// \param [in] hCamera Camera handle. +/// \param [out] puDelayTimeUs Returns the delay time in microseconds. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetTriggerDelayTime( + CameraHandle hCamera, + UINT* puDelayTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ôģʽµĴ֡ӲģʽЧĬΪ1֡һδźŲɼһ֡ͼ +/// \param [in] hCamera ľ +/// \param [in] iCount һδɼ֡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the number of trigger frames in the trigger mode. Valid for both software and hardware trigger modes. The default is 1 frame, that is, one trigger signal captures a frame of image. +/// \param [in] hCamera Camera handle. +/// \param [in] iCount The number of frames triggered at a time. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetTriggerCount( + CameraHandle hCamera, + INT iCount +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief һδ֡ +/// \param [in] hCamera ľ +/// \param [out] piCount һδźŲɼ֡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the number of trigger frames. +/// \param [in] hCamera Camera handle. +/// \param [out] piCount The number of frames to trigger signal acquisition at one time. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetTriggerCount( + CameraHandle hCamera, + INT* piCount +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ִһִк󣬻ᴥ@link #CameraSetTriggerCount @endlinkָ֡ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetTriggerMode +/// \~english +/// \brief Perform a soft trigger. After execution, the number of frames specified by @link #CameraSetTriggerCount @endlink is triggered. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetTriggerMode +MVSDK_API CameraSdkStatus __stdcall CameraSoftTrigger( + CameraHandle hCamera +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief Ĵģʽ +/// \param [in] hCamera ľ +/// \param [in] iModeSel ģʽѡš0ʾɼģʽ1ʾģʽ2ʾӲģʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the camera's trigger mode. +/// \param [in] hCamera Camera handle. +/// \param [in] iModeSel mode selects the index number. 0 means continuous acquisition mode; 1 means software trigger mode; 2 means hardware trigger mode. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetTriggerMode( + CameraHandle hCamera, + int iModeSel +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief Ĵģʽ +/// \param [in] hCamera ľ +/// \param [out] piModeSel ָ룬صǰѡģʽš +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the camera's trigger mode. +/// \param [in] hCamera Camera handle. +/// \param [out] piModeSel Returns the index of the currently selected camera trigger mode. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetTriggerMode( + CameraHandle hCamera, + INT* piModeSel +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief IOŶϵSTROBEźšźſƿƣҲⲿеſơ +/// \param [in] hCamera ľ +/// \param [in] iMode ģʽο@link #emStrobeControl @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the STROBE signal on the IO pin terminal. This signal can be used for flash control or external mechanical shutter control. +/// \param [in] hCamera Camera handle. +/// \param [in] iMode strobe mode, refer to @link #emStrobeControl @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetStrobeMode( + CameraHandle hCamera, + INT iMode +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ȡǰSTROBEźõģʽ +/// \param [in] hCamera ľ +/// \param [out] piMode ģʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Gets the mode of the current STROBE signal setting. +/// \param [in] hCamera Camera handle. +/// \param [out] piMode Return Mode +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetStrobeMode( + CameraHandle hCamera, + INT* piMode +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúԴźʱʱ䡣 +/// \param [in] hCamera ľ +/// \param [in] uDelayTimeUs Դźŵʱʱ䣬λΪusΪ0Ϊ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief When the STROBE signal is in STROBE_SYNC_WITH_TRIG, set its relative trigger signal delay time by this function. +/// \param [in] hCamera Camera handle. +/// \param [in] uDelayTimeUs Delay time relative to the trigger signal, in units of us. Can be 0, but it cannot be negative. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetStrobeDelayTime( + CameraHandle hCamera, + UINT uDelayTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúԴźʱʱ䡣 +/// \param [in] hCamera ľ +/// \param [out] upDelayTimeUs ָ룬ʱʱ䣬λus +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief When the STROBE signal is in STROBE_SYNC_WITH_TRIG, the relative trigger signal delay time is obtained through this function. +/// \param [in] hCamera Camera handle. +/// \param [out] upDelayTimeUs Returns the delay time in us. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetStrobeDelayTime( + CameraHandle hCamera, + UINT* upDelayTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúȡ +/// \param [in] hCamera ľ +/// \param [in] uTimeUs ĿȣλΪʱus +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief When the STROBE signal is in STROBE_SYNC_WITH_TRIG, set its pulse width by this function. +/// \param [in] hCamera Camera handle. +/// \param [in] uTimeUs The width of the pulse in units of time us. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetStrobePulseWidth( + CameraHandle hCamera, + UINT uTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúȡ +/// \param [in] hCamera ľ +/// \param [out] upTimeUs ָ룬ȡλΪus +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief When the STROBE signal is at STROBE_SYNC_WITH_TRIG, its pulse width is obtained by this function. +/// \param [in] hCamera Camera handle. +/// \param [out] upTimeUs Returns the pulse width. The unit is us. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetStrobePulseWidth( + CameraHandle hCamera, + UINT* upTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúЧƽļԡĬΪЧźŵʱSTROBEźűߡ +/// \param [in] hCamera ľ +/// \param [in] uPolarity STROBEźŵļԣ0Ϊ͵ƽЧ1ΪߵƽЧĬΪߵƽЧ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief When the STROBE signal is at STROBE_SYNC_WITH_TRIG, the polarity of its active level is set by this function. The default is high active. When the trigger signal arrives, the STROBE signal is pulled high. +/// \param [in] hCamera Camera handle. +/// \param [in] uPolarity Polarity of STROBE signal, 0 is active low and 1 is active high. The default is active high. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetStrobePolarity( + CameraHandle hCamera, + INT uPolarity +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ǰSTROBEźŵЧԡĬΪߵƽЧ +/// \param [in] hCamera ľ +/// \param [in] upPolarity ָ룬STROBEźŵǰЧԡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Obtain the effective polarity of the camera's current STROBE signal. The default is active high. +/// \param [in] hCamera Camera handle. +/// \param [in] upPolarity Returns the current effective polarity of the STROBE signal. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetStrobePolarity( + CameraHandle hCamera, + INT* upPolarity +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ⴥźŵࡣϱء±ء߸ߡ͵ƽʽ +/// \param [in] hCamera ľ +/// \param [in] iType ⴥź࣬ο@link #emExtTrigSignal @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the type of trigger signal outside the camera. Upper edge, lower edge, or high and low level. +/// \param [in] hCamera Camera handle. +/// \param [in] iType External trigger signal type, refer to @link #emExtTrigSignal @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetExtTrigSignalType( + CameraHandle hCamera, + INT iType +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ǰⴥźŵࡣ +/// \param [in] hCamera ľ +/// \param [out] ipType ָ룬ⴥź࣬ο@link #emExtTrigSignal @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the type of camera's current external trigger signal. +/// \param [in] hCamera Camera handle. +/// \param [out] ipType Returns the type of external trigger signal, see @link #emExtTrigSignal @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetExtTrigSignalType( + CameraHandle hCamera, + INT* ipType +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ⴥģʽ£ŵķʽĬΪ׼ŷʽֹŵCMOS֧GRRʽ +/// \param [in] hCamera ľ +/// \param [in] iType ⴥŷʽο@link #emExtTrigShutterMode @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief In the external trigger mode, the camera shutter mode defaults to the standard shutter mode. Part of the rolling shutter CMOS camera supports GRR mode. +/// \param [in] hCamera Camera handle. +/// \param [in] iType triggers the shutter. Reference @link #emExtTrigShutterMode @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetExtTrigShutterType( + CameraHandle hCamera, + INT iType +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ⴥģʽ£ŵķʽ +/// \param [in] hCamera ľ +/// \param [out] ipType ָ룬صǰ趨ⴥŷʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetExtTrigShutterType +/// \~english +/// \brief Get the camera shutter mode in external trigger mode +/// \param [in] hCamera Camera handle. +/// \param [out] ipType Returns the currently set external trigger shutter mode. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetExtTrigShutterType +MVSDK_API CameraSdkStatus __stdcall CameraGetExtTrigShutterType( + CameraHandle hCamera, + INT* ipType +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ⴥźʱʱ䣬ĬΪ0λΪ΢롣 +/// \param [in] hCamera ľ +/// \param [in] uDelayTimeUs ʱʱ䣬λΪ΢룬ĬΪ0. +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the delay time of external trigger signal. The default is 0 and the unit is microsecond. +/// \param [in] hCamera Camera handle. +/// \param [in] uDelayTimeUs Delay time in microseconds. Default is 0. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetExtTrigDelayTime( + CameraHandle hCamera, + UINT uDelayTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief õⴥźʱʱ䣬ĬΪ0λΪ΢롣 +/// \param [in] hCamera ľ +/// \param [out] upDelayTimeUs ʱ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the set external trigger signal delay time, the default is 0, the unit is microseconds. +/// \param [in] hCamera Camera handle. +/// \param [out] upDelayTimeUs trigger delay +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetExtTrigDelayTime( + CameraHandle hCamera, + UINT* upDelayTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ⴥźŵʱ䣬ֻеⴥźģʽѡߵƽߵ͵ƽʱȥʱŻЧĬΪ0λΪ΢롣 +/// \param [in] hCamera ľ +/// \param [in] uTimeUs ʱ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the debouncing time of the trigger signal outside the camera. The debounce time will only take effect when the external trigger signal mode selects high or low trigger. The default is 0 and the unit is microseconds. +/// \param [in] hCamera Camera handle. +/// \param [in] uTimeUs time +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetExtTrigJitterTime( + CameraHandle hCamera, + UINT uTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief õⴥʱ䣬ĬΪ0.λΪ΢롣 +/// \param [in] hCamera ľ +/// \param [out] upTimeUs ʱ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the set camera trigger debounce time, the default is 0. The unit is microseconds. +/// \param [in] hCamera Camera handle. +/// \param [out] upTimeUs time +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetExtTrigJitterTime( + CameraHandle hCamera, + UINT* upTimeUs +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ⴥ +/// \param [in] hCamera ľ +/// \param [out] puCapabilityMask ָ룬ظⴥ룬οCameraDefine.hEXT_TRIG_MASK_ ͷĺ궨塣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the triggering attribute mask outside the camera +/// \param [in] hCamera Camera handle. +/// \param [out] puCapabilityMask Returns the mask of the camera's triggering property, masked by the macro definition at the beginning of EXT_TRIG_MASK_ in CameraDefine.h. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetExtTrigCapability( + CameraHandle hCamera, + UINT* puCapabilityMask +); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ⴥźΪƽģʽʱʱֱֹͣƽź +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief When the external trigger signal is in level mode, it temporarily stops triggering the camera until the level signal jumps and continues to trigger. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraPauseLevelTrigger( + CameraHandle hCamera + ); + +/// @ingroup API_ROI +/// \~chinese +/// \brief ץģʽµķֱѡš +/// \param [in] hCamera ľ +/// \param [out] pImageResolution ָ룬ץģʽķֱʡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the resolution selection index number in snap mode. +/// \param [in] hCamera Camera handle. +/// \param [out] pImageResolution Pointer to return the resolution of the snap mode. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetResolutionForSnap( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution +); + +/// @ingroup API_ROI +/// \~chinese +/// \brief ץģʽͼķֱʡ +/// \param [in] hCamera ľ +/// \param [in] pImageResolution ֱ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note pImageResolution->iWidth = pImageResolution->iHeight = 0ʾ趨Ϊ浱ǰԤֱʡץĵͼķֱʻ͵ǰ趨Ԥֱһ +/// \~english +/// \brief Sets the resolution of the camera's output image in snap shot mode. +/// \param [in] hCamera Camera handle. +/// \param [in] pImageResolution Resolution +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note If pImageResolution->iWidth = pImageResolution->iHeight = 0, then it is set to follow the current preview resolution. The resolution of the captured image will be the same as the currently set preview resolution. +MVSDK_API CameraSdkStatus __stdcall CameraSetResolutionForSnap( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution +); + +/// @ingroup API_ROI +/// \~chinese +/// \brief 򿪷ֱԶ壬ͨӻķʽһԶֱʡ +/// \param [in] hCamera ľ +/// \param [out] pImageCustom ָ룬Զķֱʡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Open the resolution custom panel and configure a custom resolution visually. +/// \param [in] hCamera Camera handle. +/// \param [out] pImageCustom Returns the custom resolution. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraCustomizeResolution( + CameraHandle hCamera, + tSdkImageResolution* pImageCustom +); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief 򿪲οԶ塣ͨӻķʽһԶ崰ڵλáһԶƽԶعIJοڡ +/// \param [in] hCamera ľ +/// \param [in] iWinType ҪɵIJοڵ;0:Զعοڣ1:ƽοڡ +/// \param [in] hParent øúĴڵľΪNULL +/// \param [out] piHOff ָ룬Զ崰ڵϽǺꡣ +/// \param [out] piVOff ָ룬Զ崰ڵϽꡣ +/// \param [out] piWidth ָ룬Զ崰ڵĿȡ +/// \param [out] piHeight ָ룬Զ崰ڵĸ߶ȡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Open the reference window custom panel. And through a visual way to get a custom window location. It is generally a reference window with custom white balance and auto exposure. +/// \param [in] hCamera Camera handle. +/// \param [in] iWinType Purpose of the reference window to be generated. 0: Auto exposure reference window; 1: White balance reference window. +/// \param [in] hParent The handle of the window that called the function. Can be NULL. +/// \param [out] piHOff Returns the upper left-hand abscissa of the custom window. +/// \param [out] piVOff Returns the upper left ordinate of the custom window. +/// \param [out] piWidth Returns the width of the custom window. +/// \param [out] piHeight Returns the height of the custom window. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraCustomizeReferWin( + CameraHandle hCamera, + INT iWinType, + HWND hParent, + INT* piHOff, + INT* piVOff, + INT* piWidth, + INT* piHeight +); + +/// @ingroup API_SETTINGS_PAGE +/// \~chinese +/// \brief ôʾ״̬ +/// \param [in] hCamera ľ +/// \param [in] bShow TRUEʾ;FALSEء +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ȵ@link #CameraCreateSettingPage @endlinkɹôں󣬲ܵñʾ +/// \~english +/// \brief Set the camera property configuration window display status. +/// \param [in] hCamera Camera handle. +/// \param [in] bShow TRUE, show; FALSE, hide. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note You must call @link #CameraCreateSettingPage @endlink successfully to create the camera property configuration window before calling this function to display. +MVSDK_API CameraSdkStatus __stdcall CameraShowSettingPage( + CameraHandle hCamera, + BOOL bShow +); + +/// @ingroup API_SETTINGS_PAGE +/// \~chinese +/// \brief ôڡøúSDKڲôڣʡȥ¿ýʱ䡣ǿҽʹʹøúSDKΪôڡ +/// \param [in] hCamera ľ +/// \param [in] hParent ӦóڵľΪNULL +/// \param [in] pWinText ַָ룬ʾı +/// \param [in] pCallbackFunc ϢĻصӦ¼ʱpCallbackFuncָĺᱻ +/// \param [in] pCallbackCtx صĸӲΪNULL +/// \param [in] uReserved ԤΪ0 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Create the camera's property configuration window. Call this function, the SDK will help you create a camera configuration window, eliminating the need to redevelop the camera configuration interface. It is strongly recommended that you use this function to have the SDK create a configuration window for you. +/// \param [in] hCamera Camera handle. +/// \param [in] hParent Handle to the main window of the application. Can be NULL. +/// \param [in] pWinText string pointer, window title bar. +/// \param [in] pCallbackFunc Callback function of window message. The function pointed to by pCallbackFunc will be called when the corresponding event occurs. +/// \param [in] pCallbackCtx Additional parameters for the callback function. Can be NULL. +/// \param [in] uReserved Reserved. Must be set to 0. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraCreateSettingPage( + CameraHandle hCamera, + HWND hParent, + char* pWinText, + CAMERA_PAGE_MSG_PROC pCallbackFunc, + PVOID pCallbackCtx, + UINT uReserved +); + +/// @ingroup API_SETTINGS_PAGE +/// \~chinese +/// \brief ʹĬϲôڡ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Use the default parameters to create the camera's property configuration window. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraCreateSettingPageEx( + CameraHandle hCamera +); + +/// @ingroup API_SETTINGS_PAGE +/// \~chinese +/// \brief ôڵļҳ档ôжҳ湹ɣú趨ǰһҳΪ״̬ʾǰˡ +/// \param [in] hCamera ľ +/// \param [in] index ҳšο@link #emSdkPropSheetMask @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the camera configuration window's activation page. The camera configuration window is composed of multiple sub-pages. This function can set which sub-page is currently active and displayed at the forefront. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index number of the subpage. Reference @link #emSdkPropSheetMask @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetActiveSettingSubPage( + CameraHandle hCamera, + INT index +); + +/// @ingroup API_SETTINGS_PAGE +/// \~chinese +/// \brief ҳΪӴڷ񣬲ָĸڡ +/// \param [in] hCamera ľ +/// \param [in] hParentWnd ھΪNULL(0)ָҳΪڡ +/// \param [in] Flags ܱ־λbit0: رbit1-31: (Ϊ0) +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the camera configuration page to child window style and specifies its parent window. +/// \param [in] hCamera Camera handle. +/// \param [in] hParentWnd The parent window handle, NULL (0) restores the configuration page to a popup window. +/// \param [in] Flags function flag, bit0: Hide title bar, bit1-31: Reserved (must be 0) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetSettingPageParent( + CameraHandle hCamera, + HWND hParentWnd, + DWORD Flags + ); + +/// @ingroup API_SETTINGS_PAGE +/// \~chinese +/// \brief ȡҳĴھ +/// \param [in] hCamera ľ +/// \param [out] hWnd ҳĴھ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Gets the window handle of the camera configuration page. +/// \param [in] hCamera Camera handle. +/// \param [out] hWnd Returns the window handle of the configuration page. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetSettingPageHWnd( + CameraHandle hCamera, + HWND* hWnd + ); + +MVSDK_API CameraSdkStatus __stdcall CameraSpecialControl( + CameraHandle hCamera, + DWORD dwCtrlCode, + DWORD dwParam, + LPVOID lpData +); + +/// @ingroup API_BASIC +/// \~chinese +/// \brief ֡ʵͳϢ֡Ͷ֡ +/// \param [in] hCamera ľ +/// \param [out] psFrameStatistic ָ룬ͳϢ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the frame rate statistics of the camera, including error frame and frame loss. +/// \param [in] hCamera Camera handle. +/// \param [out] psFrameStatistic Returns statistics. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetFrameStatistic( + CameraHandle hCamera, + tSdkFrameStatistic* psFrameStatistic +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ͼģʹ״̬ +/// \param [in] hCamera ľ +/// \param [in] bEnable TRUEʹܣFALSEֹ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the enable status of the image noise reduction module. +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable TRUE, enable; FALSE, disable. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetNoiseFilter( + CameraHandle hCamera, + BOOL bEnable +); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ͼģʹ״̬ +/// \param [in] hCamera ľ +/// \param [out] pEnable ָ룬״̬TRUEΪʹܡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the image noise reduction module's enable state. +/// \param [in] hCamera Camera handle. +/// \param [out] pEnable Returns status. TRUE, to enable. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetNoiseFilterState( + CameraHandle hCamera, + BOOL* pEnable +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief λͼɼʱ0ʼ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Resets the time stamp of the image acquisition, starting from 0. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraRstTimeStamp( + CameraHandle hCamera +); + +/// @ingroup API_USERDATA +/// \~chinese +/// \brief ûԶݱ浽ķԴ洢С +/// \param [in] hCamera ľ +/// \param [in] uStartAddr ʼַ0ʼ +/// \param [in] pbData ݻָ +/// \param [in] ilen дݵijȣilen + uStartAddrСû󳤶 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ÿͺŵֵ֧û󳤶ȲһԴ豸лȡóϢ +/// \~english +/// \brief Save user-defined data to the camera's non-volatile memory. +/// \param [in] hCamera Camera handle. +/// \param [in] uStartAddr Start address, starting from 0. +/// \param [in] pbData data buffer pointer +/// \param [in] ilen The length of the write data, ilen + uStartAddr must be less than the maximum length of the user area +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note The maximum length of the user data area that each model of camera may support is different. This length information can be obtained from the device's feature description. +MVSDK_API CameraSdkStatus __stdcall CameraSaveUserData( + CameraHandle hCamera, + UINT uStartAddr, + BYTE *pbData, + int ilen +); + +/// @ingroup API_USERDATA +/// \~chinese +/// \brief ķԴ洢жȡûԶݡ +/// \param [in] hCamera ľ +/// \param [in] uStartAddr ʼַ0ʼ +/// \param [out] pbData ݻָ +/// \param [in] ilen ݵijȣilen + uStartAddrСû󳤶 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Read user-defined data from the camera's non-volatile memory. +/// \param [in] hCamera Camera handle. +/// \param [in] uStartAddr Start address, starting from 0. +/// \param [out] pbData data buffer pointer +/// \param [in] ilen The length of the data, ilen + uStartAddr must be less than the maximum length of the user area +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraLoadUserData( + CameraHandle hCamera, + UINT uStartAddr, + BYTE *pbData, + int ilen +); + +/// @ingroup API_USERDATA +/// \~chinese +/// \brief ȡûԶ豸dzơ +/// \param [in] hCamera ľ +/// \param [out] pName ָ룬ָ0βַ豸dzƲ32ֽڣ˸ָָĻڵ32ֽڿռ䡣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Read user-defined device nicknames. +/// \param [in] hCamera Camera handle. +/// \param [out] pName returns a string that points to the end of 0, the device nickname does not exceed 32 bytes, so the buffer pointed to by this pointer must be greater than or equal to 32 bytes. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetFriendlyName( + CameraHandle hCamera, + char* pName +); + +/// @ingroup API_USERDATA +/// \~chinese +/// \brief ûԶ豸dzơ +/// \param [in] hCamera ľ +/// \param [in] pName ָ룬ָ0βַ豸dzƲ32ֽڣ˸ַָָСڵ32ֽڿռ䡣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set user-defined device nicknames. +/// \param [in] hCamera Camera handle. +/// \param [in] pName A string that ends with 0, the device nickname does not exceed 32 bytes, so the pointer to the string must be less than or equal to 32 bytes. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetFriendlyName( + CameraHandle hCamera, + char* pName +); + +/// @ingroup API_BASIC +/// \~chinese +/// \brief ȡSDK汾 +/// \param [out] pVersionString ָ룬SDK汾ַָָĻС32ֽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Read the SDK version number +/// \param [out] pVersionString Returns the SDK version string. The buffer pointed to by this pointer must be larger than 32 bytes +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSdkGetVersionString( + char* pVersionString +); + +/******************************************************/ +// : CameraCheckFwUpdate +// : ̼汾ǷҪ +// : hCamera ľCameraInitá +// pNeedUpdate ָ룬ع̼״̬TRUEʾҪ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +MVSDK_API CameraSdkStatus __stdcall CameraCheckFwUpdate( + CameraHandle hCamera, + BOOL* pNeedUpdate +); + +/// @ingroup API_BASIC +/// \~chinese +/// \brief ù̼汾ַ +/// \param [in] hCamera ľ +/// \param [out] pVersion ָһ32ֽڵĻع̼İ汾ַ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the firmware version string +/// \param [in] hCamera Camera handle. +/// \param [out] pVersion must point to a buffer larger than 32 bytes and return the firmware version string. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetFirmwareVersion( + CameraHandle hCamera, + char* pVersion + ); + +// CameraGetFirmwareVersionͬVersionƴдΪ˼Ա +// Same function as CameraGetFirmwareVersion. Version misspelled, reserved for compatibility +MVSDK_API CameraSdkStatus __stdcall CameraGetFirmwareVision( + CameraHandle hCamera, + char* pVersion +); + +/// @ingroup API_BASIC +/// \~chinese +/// \brief ָ豸öϢ +/// \param [in] hCamera ľ +/// \param [out] pCameraInfo ָ룬豸öϢ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get enumeration information for the specified device +/// \param [in] hCamera Camera handle. +/// \param [out] pCameraInfo Returns the enumeration information for the device. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetEnumInfo( + CameraHandle hCamera, + tSdkCameraDevInfo* pCameraInfo +); + +/// @ingroup API_BASIC +/// \~chinese +/// \brief ָ豸ӿڵİ汾 +/// \param [in] hCamera ľ +/// \param [out] pVersion ָһ32ֽڵĻؽӿڰ汾ַ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the version of the specified device interface +/// \param [in] hCamera Camera handle. +/// \param [out] pVersion points to a buffer larger than 32 bytes and returns the interface version string. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetInerfaceVersion( + CameraHandle hCamera, + char* pVersion +); + +/// @ingroup API_GPIO +/// \~chinese +/// \brief ָIOĵƽ״̬IOΪIOԤɱIOĸ@link #tSdkCameraCapbility.iOutputIoCounts @endlink +/// \param [in] hCamera ľ +/// \param [in] iOutputIOIndex IOţ0ʼ +/// \param [in] uState Ҫ趨״̬1Ϊߣ0Ϊ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the level state of the specified IO. IO is the output IO. The number of programmable output IOs for the camera is determined by @link #tSdkCameraCapbility.iOutputIoCounts @endlink. +/// \param [in] hCamera Camera handle. +/// \param [in] iOutputIOIndex IO index, starting from 0. +/// \param [in] uState The state to set, 1 is high, 0 is low +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetIOState( + CameraHandle hCamera, + INT iOutputIOIndex, + UINT uState +); + +/// @ingroup API_GPIO +/// \~chinese +/// \brief ȡָIOĵƽ״̬IOΪIOԤɱIOĸ@link #tSdkCameraCapbility.iInputIoCounts @endlink +/// \param [in] hCamera ľ +/// \param [in] iInputIOIndex IOţ0ʼ +/// \param [out] puState ָ룬IO״̬,1Ϊߣ0Ϊ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Read the level state of the specified IO, IO is input type IO, the number of programmable output IOs that the camera reserves is decided by @link #tSdkCameraCapbility.iInputIoCounts @endlink. +/// \param [in] hCamera Camera handle. +/// \param [in] iInputIOIndex IO index, starting from 0. +/// \param [out] puState returns IO state, 1 is high, 0 is low +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetIOState( + CameraHandle hCamera, + INT iInputIOIndex, + UINT* puState +); + +/// @ingroup API_GPIO +/// \~chinese +/// \brief IOģʽ +/// \param [in] hCamera ľ +/// \param [in] iInputIOIndex IOţ0ʼ +/// \param [in] iMode IOģʽ,ο@link #emCameraGPIOMode @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the input IO mode +/// \param [in] hCamera Camera handle. +/// \param [in] iInputIOIndex IO index, starting from 0. +/// \param [in] iMode IO mode, reference @link #emCameraGPIOMode @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetInPutIOMode( + CameraHandle hCamera, + INT iInputIOIndex, + INT iMode + ); + +/// @ingroup API_GPIO +/// \~chinese +/// \brief IOģʽ +/// \param [in] hCamera ľ +/// \param [in] iOutputIOIndex IOţ0ʼ +/// \param [in] iMode IOģʽ,ο@link #emCameraGPIOMode @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the output IO mode +/// \param [in] hCamera Camera handle. +/// \param [in] iOutputIOIndex IO index, starting from 0. +/// \param [in] iMode IO mode, reference @link #emCameraGPIOMode @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetOutPutIOMode( + CameraHandle hCamera, + INT iOutputIOIndex, + INT iMode + ); + +/// @ingroup API_GPIO +/// \~chinese +/// \brief PWMIJ +/// \param [in] hCamera ľ +/// \param [in] iOutputIOIndex IOţ0ʼ +/// \param [in] iCycle PWMڣλ(us) +/// \param [in] uDuty ռñȣȡֵ1%~99% +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the PWM output parameters +/// \param [in] hCamera Camera handle. +/// \param [in] iOutputIOIndex IO index, starting from 0. +/// \param [in] iCycle Cycle of PWM, unit (us) +/// \param [in] uDuty Occupancy ratio, 1%~99% +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetOutPutPWM( + CameraHandle hCamera, + INT iOutputIOIndex, + UINT iCycle, + UINT uDuty + ); + +// @ingroup API_EXPOSURE +/// \~chinese +/// \brief Զعʱѡ㷨ͬ㷨ڲͬij +/// \param [in] hCamera ľ +/// \param [in] iIspProcessor ѡִи㷨Ķ,ο@link #emSdkIspProcessor @endlink +/// \param [in] iAeAlgorithmSel Ҫѡ㷨š0ʼֵ@link #tSdkCameraCapbility.iAeAlmSwDesc @endlink@link #tSdkCameraCapbility.iAeAlmHdDesc @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The algorithm selected when setting up the automatic exposure, different algorithms are suitable for different scenes. +/// \param [in] hCamera Camera handle. +/// \param [in] iIspProcessor Select the object to execute the algorithm, refer to @link #emSdkIspProcessor @endlink +/// \param [in] iAeAlgorithmSel The algorithm number to select. From 0, the maximum value is determined by @link #tSdkCameraCapbility.iAeAlmSwDesc @endlink and @link #tSdkCameraCapbility.iAeAlmHdDesc @endlink. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetAeAlgorithm( + CameraHandle hCamera, + INT iIspProcessor, + INT iAeAlgorithmSel +); + +// @ingroup API_EXPOSURE +/// \~chinese +/// \brief õǰԶعѡ㷨 +/// \param [in] hCamera ľ +/// \param [in] iIspProcessor ѡִи㷨Ķ,ο@link #emSdkIspProcessor @endlink +/// \param [out] piAlgorithmSel صǰѡ㷨š +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the current auto exposure selected algorithm +/// \param [in] hCamera Camera handle. +/// \param [in] iIspProcessor Select the object to execute the algorithm, refer to @link #emSdkIspProcessor @endlink +/// \param [out] piAlgorithmSel Returns the currently selected algorithm number. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAeAlgorithm( + CameraHandle hCamera, + INT iIspProcessor, + INT* piAlgorithmSel +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief Bayerתɫ㷨 +/// \param [in] hCamera ľ +/// \param [in] iIspProcessor ѡִи㷨Ķ󣬲ο@link #emSdkIspProcessor @endlink +/// \param [in] iAlgorithmSel Ҫѡ㷨š0ʼֵtSdkCameraCapbility.iBayerDecAlmSwDesctSdkCameraCapbility.iBayerDecAlmHdDesc +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set Bayer data to color algorithm. +/// \param [in] hCamera Camera handle. +/// \param [in] iIspProcessor Select the object to execute the algorithm, refer to @link #emSdkIspProcessor @endlink +/// \param [in] iAlgorithmSel The algorithm number to select. From 0, the maximum value is determined by tSdkCameraCapbility.iBayerDecAlmSwDesc and tSdkCameraCapbility.iBayerDecAlmHdDesc. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetBayerDecAlgorithm( + CameraHandle hCamera, + INT iIspProcessor, + INT iAlgorithmSel +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief Bayerתɫѡ㷨 +/// \param [in] hCamera ľ +/// \param [in] iIspProcessor ѡִи㷨Ķ󣬲ο@link #emSdkIspProcessor @endlink +/// \param [in] piAlgorithmSel صǰѡ㷨š +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the algorithm chosen by Bayer data to color. +/// \param [in] hCamera Camera handle. +/// \param [in] iIspProcessor Select the object to execute the algorithm, refer to @link #emSdkIspProcessor @endlink +/// \param [in] piAlgorithmSel Returns the currently selected algorithm number. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetBayerDecAlgorithm( + CameraHandle hCamera, + INT iIspProcessor, + INT* piAlgorithmSel +); + +// @ingroup API_ISP +/// \~chinese +/// \brief ͼԪ㷨ִжPC˻ִ㷨ִʱήPC˵CPUռʡ +/// \param [in] hCamera ľ +/// \param [in] iIspProcessor ο@link #emSdkIspProcessor @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the algorithm execution object of the image processing unit. The algorithm is executed by the PC or the camera. When executed by the camera, the CPU usage of the PC is reduced. +/// \param [in] hCamera Camera handle. +/// \param [in] iIspProcessor Reference @link #emSdkIspProcessor @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetIspProcessor( + CameraHandle hCamera, + INT iIspProcessor +); + +// @ingroup API_ISP +/// \~chinese +/// \brief ͼԪ㷨ִж +/// \param [in] hCamera ľ +/// \param [out] piIspProcessor ѡĶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the image processing unit's algorithm execution object. +/// \param [in] hCamera Camera handle. +/// \param [out] piIspProcessor returns the selected object +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetIspProcessor( + CameraHandle hCamera, + INT* piIspProcessor +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief ͼĺڵƽ׼ĬֵΪ0 +/// \param [in] hCamera ľ +/// \param [in] iBlackLevel Ҫ趨ĵƽֵΧΪ0255 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the black level reference of the image. The default value is 0 +/// \param [in] hCamera Camera handle. +/// \param [in] iBlackLevel The value to set. The range is 0 to 255. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetBlackLevel( + CameraHandle hCamera, + INT iBlackLevel +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief ͼĺڵƽ׼ĬֵΪ0 +/// \param [in] hCamera ľ +/// \param [out] piBlackLevel صǰĺڵƽֵΧΪ0255 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the black level of the image, the default value is 0 +/// \param [in] hCamera Camera handle. +/// \param [out] piBlackLevel Returns the current black level value. The range is 0 to 255. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetBlackLevel( + CameraHandle hCamera, + INT* piBlackLevel +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief ͼİ׵ƽ׼ĬֵΪ255 +/// \param [in] hCamera ľ +/// \param [in] iWhiteLevel Ҫ趨ĵƽֵΧΪ0255 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the white level reference of the image. The default value is 255 +/// \param [in] hCamera Camera handle. +/// \param [in] iWhiteLevel The level to be set. The range is 0 to 255. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetWhiteLevel( + CameraHandle hCamera, + INT iWhiteLevel +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief ͼİ׵ƽ׼ĬֵΪ255 +/// \param [in] hCamera ľ +/// \param [out] piWhiteLevel صǰİ׵ƽֵΧΪ0255 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the white level of the image, the default value is 255 +/// \param [in] hCamera Camera handle. +/// \param [out] piWhiteLevel Returns the current white level value. The range is 0 to 255. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetWhiteLevel( + CameraHandle hCamera, + INT* piWhiteLevel +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief @link #CameraImageProcess @endlinkͼʽ +/// \param [in] hCamera ľ +/// \param [in] uFormat ʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ֵ֧ĸʽCAMERA_MEDIA_TYPE_MONO8CAMERA_MEDIA_TYPE_MONO16CAMERA_MEDIA_TYPE_RGB8CAMERA_MEDIA_TYPE_RGBA8 CAMERA_MEDIA_TYPE_BGR8CAMERA_MEDIA_TYPE_BGRA8 +/// \~english +/// \brief Sets the output format of image processing for the @link #CameraImageProcess @endlink function. +/// \param [in] hCamera Camera handle. +/// \param [in] uFormat output format. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Supported formats: CAMERA_MEDIA_TYPE_MONO8, CAMERA_MEDIA_TYPE_MONO16, CAMERA_MEDIA_TYPE_RGB8, CAMERA_MEDIA_TYPE_RGBA8, CAMERA_MEDIA_TYPE_BGR8, CAMERA_MEDIA_TYPE_BGRA8 +MVSDK_API CameraSdkStatus __stdcall CameraSetIspOutFormat( + CameraHandle hCamera, + UINT uFormat +); + +/// @ingroup API_ISP +/// \~chinese +/// \brief ȡʽ +/// \param [in] hCamera ľ +/// \param [out] puFormat صǰʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSetIspOutFormat +/// \~english +/// \brief Get output format +/// \param [in] hCamera Camera handle. +/// \param [out] puFormat returns the current output format +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSetIspOutFormat +MVSDK_API CameraSdkStatus __stdcall CameraGetIspOutFormat( + CameraHandle hCamera, + UINT* puFormat +); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ôӦַ +/// \param [in] iStatusCode 롣(CameraStatus.h) +/// \return ɹʱشӦַ׵ַ;򷵻NULL +/// \~english +/// \brief Get the description string corresponding to the error code +/// \param [in] iStatusCode error code. (Defined in CameraStatus.h) +/// When the return is successful, the first address of the string corresponding to the error code is returned; otherwise it returns NULL. +MVSDK_API char* __stdcall CameraGetErrorString( + CameraSdkStatus iStatusCode +); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief һ֡ͼݡýӿڻõͼǾRGBʽ +/// \param [in] hCamera ľ +/// \param [out] pImageData ͼݵĻСuOutFormatָĸʽƥ䣬ݻ +/// \param [in] uOutFormat ʽ 0:Mono8 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [out] piWidth ָ룬ͼĿ +/// \param [out] piHeight ָ룬ͼĸ߶ +/// \param [in] wTimes ץȡͼijʱʱ䡣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note Ҫ @link #CameraReleaseImageBuffer @endlink +/// \~english +/// \brief Get a frame of image data. The image obtained by this interface is the processed RGB format. +/// \param [in] hCamera Camera handle. +/// \param [out] pImageData The buffer to receive the image data, the size must match the format specified by uOutFormat, otherwise the data will overflow +/// \param [in] uOutFormat output format 0:Mono8 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [out] piWidth Returns the width of the image +/// \param [out] piHeight Returns the height of the image +/// \param [in] wTimes The time-out time for capturing images. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note does not need to call @link #CameraReleaseImageBuffer @endlink +MVSDK_API CameraSdkStatus __stdcall CameraGetImageBufferEx2( + CameraHandle hCamera, + BYTE* pImageData, + UINT uOutFormat, + int* piWidth, + int* piHeight, + UINT wTimes +); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief һ֡ͼݡýӿڻõͼǾRGBʽ +/// \param [in] hCamera ľ +/// \param [out] pImageData ͼݵĻСuOutFormatָĸʽƥ䣬ݻ +/// \param [in] uOutFormat ʽ 0:Mono8 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [out] piWidth ָ룬ͼĿ +/// \param [out] piHeight ָ룬ͼĸ߶ +/// \param [out] puTimeStamp ͼʱ +/// \param [in] wTimes ץȡͼijʱʱ䡣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note Ҫ @link #CameraReleaseImageBuffer @endlink +/// \~english +/// \brief Get a frame of image data. The image obtained by this interface is the processed RGB format. +/// \param [in] hCamera Camera handle. +/// \param [out] pImageData The buffer to receive the image data, the size must match the format specified by uOutFormat, otherwise the data will overflow +/// \param [in] uOutFormat output format 0:Mono8 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [out] piWidth Returns the width of the image +/// \param [out] piHeight Returns the height of the image +/// \param [out] puTimeStamp returns image timestamp +/// \param [in] wTimes The time-out time for capturing images. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note does not need to call @link #CameraReleaseImageBuffer @endlink +MVSDK_API CameraSdkStatus __stdcall CameraGetImageBufferEx3( + CameraHandle hCamera, + BYTE*pImageData, + UINT uOutFormat, + int *piWidth, + int *piHeight, + UINT* puTimeStamp, + UINT wTimes +); + +/// @ingroup API_BASIC +/// \~chinese +/// \brief øһЩԡ +/// \param [in] hCamera ľ +/// \param [out] pMaxWidth ظֱʵĿ +/// \param [out] pMaxHeight ظֱʵĸ߶ +/// \param [out] pbColorCamera ظǷDzɫ1ʾɫ0ʾڰ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get some of the camera's features. +/// \param [in] hCamera Camera handle. +/// \param [out] pMaxWidth Returns the width of the camera's maximum resolution +/// \param [out] pMaxHeight Returns the height of the camera's maximum resolution +/// \param [out] pbColorCamera Returns whether the camera is a color camera. 1 indicates a color camera, 0 indicates a black and white camera +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetCapabilityEx2( + CameraHandle hCamera, + int* pMaxWidth, + int* pMaxHeight, + int* pbColorCamera +); + +/// @ingroup API_RECONNECT +/// \~chinese +/// \brief 豸ӻֶָ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \warning ĬʹԶԶģʽñ@see CameraSetAutoConnect +/// \~english +/// \brief Reconnect the device to manually reconnect after the connection is restored +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \warning The camera automatically enables reconnection by default. Do not call this function in auto reconnect mode. @see CameraSetAutoConnect +MVSDK_API CameraSdkStatus __stdcall CameraReConnect( + CameraHandle hCamera +); + +/// @ingroup API_RECONNECT +/// \~chinese +/// \brief ״̬ڼǷ +/// \param [in] hCamera ľ +/// \return CAMERA_STATUS_SUCCESS(0)ʾѵ +/// \~english +/// \brief Test camera connection status to detect if camera is dropped +/// \param [in] hCamera Camera handle. +/// \return The connection normally returns CAMERA_STATUS_SUCCESS(0). Otherwise it is dropped +MVSDK_API CameraSdkStatus __stdcall CameraConnectTest( + CameraHandle hCamera +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief LEDʹ״̬LEDͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index LEDƵţ0ʼֻһɿȵLEDòΪ0 +/// \param [in] enable ʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the camera's LED enable status, without the LED's model, this function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index of the LED, starting from 0. If there is only one LED that can control the brightness, this parameter is 0. +/// \param [in] enable enable state +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetLedEnable( + CameraHandle hCamera, + int index, + BOOL enable + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief LEDʹ״̬LEDͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index LEDƵţ0ʼֻһɿȵLEDòΪ0 +/// \param [out] enable ָ룬LEDʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the camera's LED enable status, without the LED's model, this function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index of the LED, starting from 0. If there is only one LED that can control the brightness, this parameter is 0. +/// \param [out] enable Return LED enable status +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetLedEnable( + CameraHandle hCamera, + int index, + BOOL* enable + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief LED״̬LEDͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index LEDƵţ0ʼֻһɿȵLEDòΪ0 +/// \param [in] onoff LED״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the camera's LED switch status, without the LED's model, this function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index of the LED, starting from 0. If there is only one LED that can control the brightness, this parameter is 0. +/// \param [in] onoff LED on/off status +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetLedOnOff( + CameraHandle hCamera, + int index, + BOOL onoff + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief LED״̬LEDͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index LEDƵţ0ʼֻһɿȵLEDòΪ0 +/// \param [out] onoff LED״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the camera's LED switch status, without the LED model, this function returns an error code that does not support. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index of the LED, starting from 0. If there is only one LED that can control the brightness, this parameter is 0. +/// \param [out] onoff Returns LED switch status +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetLedOnOff( + CameraHandle hCamera, + int index, + BOOL* onoff + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief LEDʱ䣬LEDͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index LEDƵţ0ʼֻһɿȵLEDòΪ0 +/// \param [in] duration LEDʱ䣬λ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the camera's LED duration, without the LED model, this function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index of the LED, starting from 0. If there is only one LED that can control the brightness, this parameter is 0. +/// \param [in] duration LED duration in milliseconds +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetLedDuration( + CameraHandle hCamera, + int index, + UINT duration + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief LEDʱ䣬LEDͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index LEDƵţ0ʼֻһɿȵLEDòΪ0 +/// \param [out] duration LEDʱ䣬λ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the camera's LED duration, without the LED model, this function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index of the LED, starting from 0. If there is only one LED that can control the brightness, this parameter is 0. +/// \param [out] duration Returns the LED duration in milliseconds +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetLedDuration( + CameraHandle hCamera, + int index, + UINT* duration + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief LEDȣLEDͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index LEDƵţ0ʼֻһɿȵLEDòΪ0 +/// \param [in] uBrightness LEDֵΧ0255. 0ʾرգ255 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the camera's LED brightness, without the LED model, this function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index of the LED, starting from 0. If there is only one LED that can control the brightness, this parameter is 0. +/// \param [in] uBrightness LED brightness value, range 0 to 255. 0 means off, 255 brightest. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetLedBrightness( + CameraHandle hCamera, + int index, + UINT uBrightness +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief LEDȣLEDͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index LEDƵţ0ʼֻһɿȵLEDòΪ0 +/// \param [out] uBrightness ָ룬LEDֵΧ0255. 0ʾرգ255 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the camera's LED brightness, without the LED model, this function returns an error code that does not support. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index of the LED, starting from 0. If there is only one LED that can control the brightness, this parameter is 0. +/// \param [out] uBrightness Returns the LED brightness value in the range 0 to 255. 0 means off, 255 is the brightest. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetLedBrightness( + CameraHandle hCamera, + int index, + UINT* uBrightness +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ʹֹܻ߽Ķ书ܣùܵͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] uEnableMask ʹ״̬룬ӦıλΪ1ʾʹܡ0ΪֹĿǰSDK֧4ɱ༭indexΧΪ03bit0 bit1bit2bit34ʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ùҪ˽ɼзָֻ֣Ķߴ֡ʡ䵽PCϺ󣬻Զƴӳ棬ûбIJ֣úɫ䡣 +/// \~english +/// \brief Enables or disables the camera's multi-zone transfer function. For models without this function, this function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] uEnableMask Area enable mask. The corresponding bit is 1 to enable. 0 is prohibited. Currently, the SDK supports four editable regions. The index range is 0 to 3, that is, bit0, bit1, bit2, and bit3 control the enabling status of the four regions. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note This function is mainly used to split the entire picture collected on the camera side and only transmit specified multiple areas to increase the transmission frame rate. After multiple areas are transferred to the PC, they will be automatically spliced into an entire frame. Parts that have not been transmitted will be filled with black. +MVSDK_API CameraSdkStatus __stdcall CameraEnableTransferRoi( + CameraHandle hCamera, + UINT uEnableMask +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief IJüˣͼӴϱɼ󣬽ᱻüָͣ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index ROIţ0ʼ +/// \param [in] X1 ROIϽX +/// \param [in] Y1 ROIϽY +/// \param [in] X2 ROI½X +/// \param [in] Y2 ROI½Y +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the clipping area for camera transmission. On the camera side, after the image is captured from the sensor, it will be cropped to the specified area for transmission. This function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index number of the ROI region, starting at 0. +/// \param [in] X1 The X coordinate of the upper left corner of ROI area +/// \param [in] Y1 The Y coordinate of the upper left corner of ROI area +/// \param [in] X2 The X coordinate of the lower right corner of ROI area +/// \param [in] Y2 The Y coordinate of the lower right corner of ROI area +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetTransferRoi( + CameraHandle hCamera, + int index, + UINT X1, + UINT Y1, + UINT X2, + UINT Y2 +); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ȡIJüˣͼӴϱɼ󣬽ᱻüָͣ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] index ROIţ0ʼ +/// \param [out] pX1 ROIϽX +/// \param [out] pY1 ROIϽY +/// \param [out] pX2 ROI½X +/// \param [out] pY2 ROI½Y +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the cropped area of the camera transmission. On the camera side, after the image is captured from the sensor, it will be cropped to the specified area for transmission. This function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] index The index number of the ROI region, starting at 0. +/// \param [out] pX1 Returns the X coordinate of the upper left corner of the ROI area +/// \param [out] pY1 Returns the Y coordinate of the upper left corner of the ROI area +/// \param [out] pX2 Returns the X coordinate of the lower right corner of the ROI area +/// \param [out] pY2 Returns the Y coordinate of the lower right corner of the ROI area +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetTransferRoi( + CameraHandle hCamera, + int index, + UINT* pX1, + UINT* pY1, + UINT* pX2, + UINT* pY2 +); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief һζڴռ䡣ܺmallocƣǷصڴalignָֽġ +/// \param [in] size ռĴС +/// \param [in] align ַֽ +/// \return ɹʱط0ֵʾڴ׵ַʧܷNULL +/// \note ڴʹ@link #CameraAlignFree @endlinkͷ +/// \~english +/// \brief Apply for an aligned memory space. The function is similar to malloc, but the returned memory is aligned with the number of bytes specified by align. +/// \param [in] size Size of the space. +/// \param [in] align The number of aligned bytes. +/// \return Successful a non-zero value is returned indicating the first address of the memory. Fails to return NULL. +/// \note Memory allocated must be freed using @link #CameraAlignFree @endlink +MVSDK_API BYTE* __stdcall CameraAlignMalloc( + int size, + int align + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ͷ@link #CameraAlignMalloc @endlinkڴռ䡣 +/// \param [in] membuffer ڴַ +/// \~english +/// \brief Releases the memory space allocated by the @link #CameraAlignMalloc @endlink function. +/// \param [in] membuffer memory address +MVSDK_API void __stdcall CameraAlignFree( + BYTE* membuffer +); + +/// @ingroup API_RECONNECT +/// \~chinese +/// \brief ûԶĬΪá +/// \param [in] hCamera ľ +/// \param [in] bEnable ʹλTRUEʱSDKڲԶǷߣߺԼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Enables or disables automatic reconnection. The default is enabled. +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable Enables the camera to reconnect. When TRUE, the SDK automatically detects if the camera is dropped and reconnects itself after disconnection. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetAutoConnect(CameraHandle hCamera,BOOL bEnable); + +/// @ingroup API_RECONNECT +/// \~chinese +/// \brief ȡԶʹ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbEnable Զʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get Automatic Reconnect Enable Status +/// \param [in] hCamera Camera handle. +/// \param [out] pbEnable Returns the camera's auto reconnect status +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetAutoConnect(CameraHandle hCamera,BOOL *pbEnable); + +/// @ingroup API_RECONNECT +/// \~chinese +/// \brief ԶĴǰ@link #CameraSetAutoConnect @endlinkʹԶܡĬʹܵġ +/// \param [in] hCamera ľ +/// \param [out] puCounts ԶĴ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the number of times the camera automatically reconnects, provided @link #CameraSetAutoConnect @endlink enables automatic camera reconnection. The default is enabled. +/// \param [in] hCamera Camera handle. +/// \param [out] puCounts returns the number of automatic reconnections +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetReConnectCounts(CameraHandle hCamera,UINT* puCounts); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ûõ֡ץȡģʽĬΪáܽUSB2.0֧֣ +/// \param [in] hCamera ľ +/// \param [in] bEnable ʹܵ֡ץȡģʽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ÿɹץȡһ֡SDKͣ״̬ӶռUSBҪڶյij +/// \~english +/// \brief Enables or disables single-frame crawl mode, which is disabled by default. (This function is only supported by USB2.0 camera) +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable enables single-frame mode +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Whenever a frame is successfully captured, the SDK enters a pause state, so that it no longer occupies the USB bandwidth. It is mainly used in scenes where multiple cameras take pictures. +MVSDK_API CameraSdkStatus __stdcall CameraSetSingleGrabMode(CameraHandle hCamera, BOOL bEnable); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ĵ֡ץȡʹ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbEnable ĵ֡ץȡģʽʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the camera's single frame capture enable status +/// \param [in] hCamera Camera handle. +/// \param [out] pbEnable Returns the camera's single frame capture mode enable status +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetSingleGrabMode(CameraHandle hCamera, BOOL* pbEnable); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ڵ֡ץȡģʽʱÿɹץȡһ֡SDKͣ״̬ô˺ʹSDK˳ͣ״̬ʼץȡһ֡ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief When the camera is in the single frame capture mode, the SDK will enter a pause state after successfully capturing a frame. Calling this function will cause the SDK to exit the pause state and start to grab the next frame. +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraRestartGrab(CameraHandle hCamera); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ͼƬ +/// \param [in] hCamera ľ +/// \param [in] iAlgorithSel ʹõ㷨,ο@link emEvaluateDefinitionAlgorith @endlinkĶ +/// \param [in] pbyIn ͼݵĻַΪNULL +/// \param [in] pFrInfo ͼ֡ͷϢ +/// \param [out] DefinitionValue صȹֵԽԽ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Image clarity assessment +/// \param [in] hCamera Camera handle. +/// \param [in] iAlgorithSel The currently used evaluation algorithm, see @link emEvaluateDefinitionAlgorith @endlink +/// \param [in] pbyIn The buffer address of the input image data. Cannot be NULL. +/// \param [in] pFrInfo input image frame header information +/// \param [out] DefinitionValue Returns the sharpness value (greater the clearer) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraEvaluateImageDefinition( + CameraHandle hCamera, + INT iAlgorithSel, + BYTE* pbyIn, + tSdkFrameHead* pFrInfo, + double* DefinitionValue + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ͼл +/// \param [inout] pRgbBuffer ͼݻ +/// \param [in] pFrInfo ͼ֡ͷϢ +/// \param [in] pFontFileName ļ +/// \param [in] FontWidth +/// \param [in] FontHeight ߶ +/// \param [in] pText Ҫ +/// \param [in] Left ֵ +/// \param [in] Top ֵ +/// \param [in] Width ֵ +/// \param [in] Height ֵ +/// \param [in] TextColor ɫRGB +/// \param [in] uFlags ־,@link #emCameraDrawTextFlags @endlinkеĶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Draw text in the input image data +/// \param [inout] pRgbBuffer image data buffer +/// \param [in] pFrInfo frame header information +/// \param [in] pFontFileName font file name +/// \param [in] FontWidth font width +/// \param [in] FontHeight font height +/// \param [in] pText Text to output +/// \param [in] Left text output rectangle +/// \param [in] Top text output rectangle +/// \param [in] Width Output rectangle of text +/// \param [in] Height the output rectangle of the text +/// \param [in] TextColor Text Color RGB +/// \param [in] uFlags output flags, as defined in @link #emCameraDrawTextFlags @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraDrawText( + BYTE* pRgbBuffer, + tSdkFrameHead* pFrInfo, + char const* pFontFileName, + UINT FontWidth, + UINT FontHeight, + char const* pText, + INT Left, + INT Top, + UINT Width, + UINT Height, + UINT TextColor, + UINT uFlags + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ȡGIGEIPַ +/// \param [in] pCameraInfo 豸Ϣ@link #CameraEnumerateDevice @endlinká +/// \param [out] CamIp IP(ע⣺뱣֤Ļڵ16ֽ) +/// \param [out] CamMask (ע⣺뱣֤Ļڵ16ֽ) +/// \param [out] CamGateWay (ע⣺뱣֤Ļڵ16ֽ) +/// \param [out] EtIp IP(ע⣺뱣֤Ļڵ16ֽ) +/// \param [out] EtMask (ע⣺뱣֤Ļڵ16ֽ) +/// \param [out] EtGateWay (ע⣺뱣֤Ļڵ16ֽ) +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the GIGE camera's IP address +/// \param [in] pCameraInfo camera's device description information can be obtained by @link #CameraEnumerateDevice @endlink function. +/// \param [out] CamIp camera IP (Note: must ensure that the incoming buffer is greater than or equal to 16 bytes) +/// \param [out] CamMask camera subnet mask (Note: must ensure that the incoming buffer is greater than or equal to 16 bytes) +/// \param [out] CamGateWay camera gateway (Note: must ensure that the incoming buffer is greater than or equal to 16 bytes) +/// \param [out] EtIp network card IP (Note: must ensure that the incoming buffer is greater than or equal to 16 bytes) +/// \param [out] EtMask subnet mask (Note: must ensure that the incoming buffer is greater than or equal to 16 bytes) +/// \param [out] EtGateWay NIC Gateway (Note: must ensure that the incoming buffer is greater than or equal to 16 bytes) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGigeGetIp( + tSdkCameraDevInfo* pCameraInfo, + char* CamIp, + char* CamMask, + char* CamGateWay, + char* EtIp, + char* EtMask, + char* EtGateWay + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief GIGEIPַ +/// \param [in] pCameraInfo 豸Ϣ@link #CameraEnumerateDevice @endlinká +/// \param [in] Ip IP(磺192.168.1.100) +/// \param [in] SubMask (磺255.255.255.0) +/// \param [in] GateWay (磺192.168.1.1) +/// \param [in] bPersistent TRUE: Ϊ̶IPFALSEԶIPԲIp, SubMask, GateWay +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the GIGE camera's IP address +/// \param [in] pCameraInfo camera's device description information can be obtained by @link #CameraEnumerateDevice @endlink function. +/// \param [in] Ip camera IP (eg 192.168.1.100) +/// \param [in] SubMask camera subnet mask (eg 255.255.255.0) +/// \param [in] GateWay Camera Gateway (eg 192.168.1.1) +/// \param [in] bPersistent TRUE: Set camera to fixed IP, FALSE: Set camera to assign IP automatically (ignoring parameters Ip, SubMask, GateWay) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGigeSetIp( + tSdkCameraDevInfo* pCameraInfo, + char const* Ip, + char const* SubMask, + char const* GateWay, + BOOL bPersistent + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ȡGIGEMACַ +/// \param [in] pCameraInfo 豸Ϣ@link #CameraEnumerateDevice @endlinká +/// \param [out] CamMac MAC(ע⣺뱣֤Ļڵ18ֽ) +/// \param [out] EtMac MAC(ע⣺뱣֤Ļڵ18ֽ) +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Select the LUT table in the preset LUT mode. +/// \param [in] pCameraInfo camera's device description information can be obtained by @link #CameraEnumerateDevice @endlink function. +/// \param [out] CamMac camera MAC (Note: must ensure that the incoming buffer is greater than or equal to 18 bytes) +/// \param [out] EtMac network card MAC (Note: must ensure that the incoming buffer is greater than or equal to 18 bytes) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGigeGetMac( + tSdkCameraDevInfo* pCameraInfo, + char* CamMac, + char* EtMac + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ʹܿӦ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Enable quick response +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraEnableFastResponse( + CameraHandle hCamera + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief ʹܻ +/// \param [in] hCamera ľ +/// \param [in] bEnable TRUE: ʹܻ FALSE: رջ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Enable dead pixel correction +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable TRUE: Enable dead pixel correction FALSE: Turn off dead pixel correction +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetCorrectDeadPixel( + CameraHandle hCamera, + BOOL bEnable + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief ȡʹ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbEnable ʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get dead pixel correction enabled +/// \param [in] hCamera Camera handle. +/// \param [out] pbEnable Returns enable state +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetCorrectDeadPixel( + CameraHandle hCamera, + BOOL* pbEnable + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ʹƽУ +/// \param [in] hCamera ľ +/// \param [in] bEnable TRUE: ʹƽУ FALSE: رƽУ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Enable flat field correction +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable TRUE: Enable flat field correction FALSE: Turn off flat field correction +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraFlatFieldingCorrectSetEnable( + CameraHandle hCamera, + BOOL bEnable + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ȡƽУʹ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbEnable ʹ״̬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get Plane Correction Enable Status +/// \param [in] hCamera Camera handle. +/// \param [out] pbEnable Returns enable state +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraFlatFieldingCorrectGetEnable( + CameraHandle hCamera, + BOOL* pbEnable + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ƽУ +/// \param [in] hCamera ľ +/// \param [in] pDarkFieldingImage ͼƬ +/// \param [in] pDarkFieldingFrInfo ͼƬϢ +/// \param [in] pLightFieldingImage ͼƬ +/// \param [in] pLightFieldingFrInfo ͼƬϢ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set flat field correction parameters +/// \param [in] hCamera Camera handle. +/// \param [in] pDarkFieldingImage dark field image +/// \param [in] pDarkFieldingFrInfo dark field image information +/// \param [in] pLightFieldingImage Brightfield image +/// \param [in] pLightFieldingFrInfo Brightfield image information +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraFlatFieldingCorrectSetParameter( + CameraHandle hCamera, + BYTE const* pDarkFieldingImage, + tSdkFrameHead const* pDarkFieldingFrInfo, + BYTE const* pLightFieldingImage, + tSdkFrameHead const* pLightFieldingFrInfo + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ȡƽУ״̬ +/// \param [in] hCamera ľ +/// \param [out] pbValid زǷЧ +/// \param [out] pFilePath زļ· +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get status of flat field correction parameters +/// \param [in] hCamera Camera handle. +/// \param [out] pbValid Return whether the parameter is valid +/// \param [out] pFilePath Returns the path of the parameter file +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraFlatFieldingCorrectGetParameterState( + CameraHandle hCamera, + BOOL *pbValid, + char *pFilePath + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ƽУļ +/// \param [in] hCamera ľ +/// \param [in] pszFileName ļ· +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Save flat correction parameters to file +/// \param [in] hCamera Camera handle. +/// \param [in] pszFileName file path +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraFlatFieldingCorrectSaveParameterToFile( + CameraHandle hCamera, + char const* pszFileName + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ļмƽУ +/// \param [in] hCamera ľ +/// \param [in] pszFileName ļ· +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Load flat field correction parameters from file +/// \param [in] hCamera Camera handle. +/// \param [in] pszFileName file path +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraFlatFieldingCorrectLoadParameterFromFile( + CameraHandle hCamera, + char const* pszFileName + ); + +/******************************************************/ +// : CameraCommonCall +// : һЩ⹦ܵãοʱһ㲻Ҫá +// : hCamera ľCameraInitá +// pszCall ܼ +// pszResult ýͬpszCallʱ岻ͬ +// uResultBufSize pszResultָĻֽڴС +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +MVSDK_API CameraSdkStatus __stdcall CameraCommonCall( + CameraHandle hCamera, + char const* pszCall, + char* pszResult, + UINT uResultBufSize + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief 3D +/// \param [in] hCamera ľ +/// \param [in] bEnable û +/// \param [in] nCount ʹüͼƬн(2-8) +/// \param [in] Weights Ȩأ統ʹ3ͼƬнԴ3(0.3,0.3,0.4)һͼƬȨشǰ2šҪʹȨأ0ʾͼƬȨͬ(0.33,0.33,0.33) +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set 3D noise reduction parameters +/// \param [in] hCamera Camera handle. +/// \param [in] bEnable enable or disable +/// \param [in] nCount Noise reduction using several pictures (2-8) +/// \param [in] Weights Noise reduction weight, such as when using 3 pictures for noise reduction, this parameter can be passed in 3 floating points (0.3, 0.3, 0.4). The weight of the last picture is larger than the first 2 pictures. . If you do not need to use weights, then pass this parameter to 0, indicating that all images have the same weight (0.33, 0.33, 0.33) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetDenoise3DParams( + CameraHandle hCamera, + BOOL bEnable, + int nCount, + float *Weights + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief ȡǰ3D +/// \param [in] hCamera ľ +/// \param [out] bEnable û +/// \param [out] nCount ʹ˼ͼƬн +/// \param [out] bUseWeight Ƿʹ˽Ȩ +/// \param [out] Weights Ȩ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get current 3D noise reduction parameters +/// \param [in] hCamera Camera handle. +/// \param [out] bEnable enable or disable +/// \param [out] nCount uses several pictures for noise reduction +/// \param [out] bUseWeight whether to use noise reduction weights +/// \param [out] Weights Noise Reduction Weights +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetDenoise3DParams( + CameraHandle hCamera, + BOOL *bEnable, + int *nCount, + BOOL *bUseWeight, + float *Weights + ); + +/// @ingroup API_ENHANCE +/// \~chinese +/// \brief һ֡һν봦 +/// \param [in] InFramesHead ֡ͷ +/// \param [in] InFramesData ֡ +/// \param [in] nCount ֡ +/// \param [in] Weights Ȩ +/// \param [out] OutFrameHead ֡ͷ +/// \param [out] OutFrameData ֡ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Perform a noise reduction on a group of frames +/// \param [in] InFramesHead input frame header +/// \param [in] InFramesData input frame data +/// \param [in] nCount Number of input frames +/// \param [in] Weights Noise Reduction Weight +/// \param [out] OutFrameHead output frame header +/// \param [out] OutFrameData output frame data +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraManualDenoise3D( + tSdkFrameHead *InFramesHead, + BYTE **InFramesData, + int nCount, + float *Weights, + tSdkFrameHead *OutFrameHead, + BYTE *OutFrameData + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief 򿪻༭ +/// \param [in] hCamera ľ +/// \param [in] hParent øúĴڵľΪNULL +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Open the dead pixels editing panel +/// \param [in] hCamera Camera handle. +/// \param [in] hParent The handle of the window that called the function. Can be NULL. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraCustomizeDeadPixels( + CameraHandle hCamera, + HWND hParent + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief ȡ +/// \param [in] hCamera ľ +/// \param [out] pRows y +/// \param [out] pCols x +/// \param [out] pNumPixel ʱʾлĴСʱʾлзصĻ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note pRowspColsΪNULLʱǰĻͨpNumPixel +/// \~english +/// \brief Reading camera dead pixels +/// \param [in] hCamera Camera handle. +/// \param [out] pRows dead pixels y coordinates +/// \param [out] pCols bad x coordinate +/// \param [out] pNumPixel Inputs the size of the row and column buffers. When returned, it indicates the number of bad pixels returned in the row and column buffers. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note When pRows or pCols is NULL, the function will return the camera's current number of dead pixels through pNumPixel. +MVSDK_API CameraSdkStatus __stdcall CameraReadDeadPixels( + CameraHandle hCamera, + USHORT* pRows, + USHORT* pCols, + UINT* pNumPixel + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief +/// \param [in] hCamera ľ +/// \param [in] pRows y +/// \param [in] pCols x +/// \param [in] NumPixel леĻ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Add camera dead pixels +/// \param [in] hCamera Camera handle. +/// \param [in] pRows dead point y coordinates +/// \param [in] pCols bad x coordinate +/// \param [in] NumPixel Number of dead pixels in row buffer +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraAddDeadPixels( + CameraHandle hCamera, + USHORT* pRows, + USHORT* pCols, + UINT NumPixel + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief ɾָ +/// \param [in] hCamera ľ +/// \param [in] pRows y +/// \param [in] pCols x +/// \param [in] NumPixel леĻ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Delete camera specified dead pixels +/// \param [in] hCamera Camera handle. +/// \param [in] pRows dead point y coordinates +/// \param [in] pCols bad x coordinate +/// \param [in] NumPixel Number of dead pixels in row buffer +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraRemoveDeadPixels( + CameraHandle hCamera, + USHORT* pRows, + USHORT* pCols, + UINT NumPixel + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief ɾл +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Remove all camera's dead pixels +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraRemoveAllDeadPixels( + CameraHandle hCamera + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief 㵽洢 +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Save camera dead pixels to camera memory +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSaveDeadPixels( + CameraHandle hCamera + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief 㵽ļ +/// \param [in] hCamera ľ +/// \param [in] sFileName ļ· +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Save Camera Dead Points to File +/// \param [in] hCamera Camera handle. +/// \param [in] sFileName Full path to the file. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSaveDeadPixelsToFile( + CameraHandle hCamera, + char const* sFileName + ); + +/// @ingroup API_DEAD_PIXEL +/// \~chinese +/// \brief ļ +/// \param [in] hCamera ľ +/// \param [in] sFileName ļ· +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Loading camera dead pixels from file +/// \param [in] hCamera Camera handle. +/// \param [in] sFileName Full path to the file. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraLoadDeadPixelsFromFile( + CameraHandle hCamera, + char const* sFileName + ); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief һ֡ͼݡ +/// \param [in] hCamera ľ +/// \param [out] pFrameInfo ͼ֡ͷϢָ롣 +/// \param [out] pbyBuffer ָͼݵĻָ롣 +/// \param [in] wTimes ץȡͼijʱʱ䡣 +/// \param [in] Priority ȡͼȼ @link #emCameraGetImagePriority @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ˶һȼ@link #CameraGetImageBuffer @endlinkͬ +/// \~english +/// \brief Get a frame of image data. +/// \param [in] hCamera Camera handle. +/// \param [out] pFrameInfo Frame header information pointer +/// \param [out] pbyBuffer Pointer to the buffer of data for the image. +/// \param [in] wTimes The time-out time for capturing images. +/// \param [in] Priority map priority See: @link #emCameraGetImagePriority @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Same as @link #CameraGetImageBuffer @endlink except one more priority parameter +MVSDK_API CameraSdkStatus __stdcall CameraGetImageBufferPriority( + CameraHandle hCamera, + tSdkFrameHead* pFrameInfo, + BYTE** pbyBuffer, + UINT wTimes, + UINT Priority + ); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief һ֡ͼݡýӿڻõͼǾRGBʽ +/// \param [in] hCamera ľ +/// \param [out] piWidth ָ룬ͼĿ +/// \param [out] piHeight ָ룬ͼĸ߶ +/// \param [in] wTimes ץȡͼijʱʱ䡣λ롣 +/// \param [in] Priority ȡͼȼ @link #emCameraGetImagePriority @endlink +/// \return ɹʱRGBݻ׵ַ;򷵻0 +/// \note ˶һȼ@link #CameraGetImageBufferEx @endlinkͬ +/// \~english +/// \brief Get a frame of image data. The image obtained by this interface is the processed RGB format. +/// \param [in] hCamera Camera handle. +/// \param [out] piWidth Returns the width of the image +/// \param [out] piHeight Returns the height of the image +/// \param [in] wTimes The time-out time for capturing images. The unit is milliseconds. +/// \param [in] Priority map priority See: @link #emCameraGetImagePriority @endlink +/// \return Returns the first address of the RGB data buffer when successful; otherwise returns 0. +/// \note Same as @link #CameraGetImageBufferEx @endlink except one more priority parameter +MVSDK_API unsigned char* __stdcall CameraGetImageBufferPriorityEx( + CameraHandle hCamera, + INT* piWidth, + INT* piHeight, + UINT wTimes, + UINT Priority + ); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief һ֡ͼݡýӿڻõͼǾRGBʽ +/// \param [in] hCamera ľ +/// \param [out] pImageData ͼݵĻСuOutFormatָĸʽƥ䣬ݻ +/// \param [in] uOutFormat ʽ 0:Mono8 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [out] piWidth ָ룬ͼĿ +/// \param [out] piHeight ָ룬ͼĸ߶ +/// \param [in] wTimes ץȡͼijʱʱ䡣λ롣 +/// \param [in] Priority ȡͼȼ @link #emCameraGetImagePriority @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ˶һȼ@link #CameraGetImageBufferEx2 @endlinkͬ +/// \~english +/// \brief Get a frame of image data. The image obtained by this interface is the processed RGB format. +/// \param [in] hCamera Camera handle. +/// \param [out] pImageData The buffer to receive the image data, the size must match the format specified by uOutFormat, otherwise the data will overflow +/// \param [in] uOutFormat Output Format 0:Mono8 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [out] piWidth Returns the width of the image +/// \param [out] piHeight Returns the height of the image +/// \param [in] wTimes The time-out time for capturing images. The unit is milliseconds. +/// \param [in] Priority map priority See: @link #emCameraGetImagePriority @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Same as @link #CameraGetImageBufferEx2 @endlink except one more priority parameter +MVSDK_API CameraSdkStatus __stdcall CameraGetImageBufferPriorityEx2( + CameraHandle hCamera, + BYTE* pImageData, + UINT uOutFormat, + int* piWidth, + int* piHeight, + UINT wTimes, + UINT Priority + ); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief һ֡ͼݡýӿڻõͼǾRGBʽ +/// \param [in] hCamera ľ +/// \param [out] pImageData ͼݵĻСuOutFormatָĸʽƥ䣬ݻ +/// \param [in] uOutFormat ʽ 0:Mono8 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [out] piWidth ָ룬ͼĿ +/// \param [out] piHeight ָ룬ͼĸ߶ +/// \param [out] puTimeStamp ͼʱ +/// \param [in] wTimes ץȡͼijʱʱ䡣 +/// \param [in] Priority ȡͼȼ @link #emCameraGetImagePriority @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ˶һȼ@link #CameraGetImageBufferEx3 @endlinkͬ +/// \~english +/// \brief Get a frame of image data. The image obtained by this interface is the processed RGB format. +/// \param [in] hCamera Camera handle. +/// \param [out] pImageData The buffer to receive the image data, the size must match the format specified by uOutFormat, otherwise the data will overflow +/// \param [in] uOutFormat output format 0:Mono8 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +/// \param [out] piWidth Returns the width of the image +/// \param [out] piHeight Returns the height of the image +/// \param [out] puTimeStamp returns image timestamp +/// \param [in] wTimes The time-out time for capturing images. +/// \param [in] Priority map priority See: @link #emCameraGetImagePriority @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Same as @link #CameraGetImageBufferEx3 @endlink except one more priority parameter +MVSDK_API CameraSdkStatus __stdcall CameraGetImageBufferPriorityEx3( + CameraHandle hCamera, + BYTE*pImageData, + UINT uOutFormat, + int *piWidth, + int *piHeight, + UINT* puTimeStamp, + UINT wTimes, + UINT Priority + ); + +/// @ingroup API_GRAB +/// \~chinese +/// \brief ѻ֡ +/// \param [in] hCamera ľ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Clear all cached frames in the camera +/// \param [in] hCamera Camera handle. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraClearBuffer( + CameraHandle hCamera + ); + +/// @ingroup API_TRIGGER +/// \~chinese +/// \brief ִ +/// \param [in] hCamera ľ +/// \param [in] uFlags ܱ־,@link #emCameraSoftTriggerExFlags @endlinkеĶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraSoftTrigger +/// \~english +/// \brief Perform a soft trigger. +/// \param [in] hCamera Camera handle. +/// \param [in] uFlags function flags, as defined in @link #emCameraSoftTriggerExFlags @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraSoftTrigger +MVSDK_API CameraSdkStatus __stdcall CameraSoftTriggerEx( + CameraHandle hCamera, + UINT uFlags + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief HDRҪ֧֣HDRܵͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] value HDRϵΧ0.01.0 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Setting the HDR of the camera requires camera support. Models without the HDR function. This function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] value HDR coefficient, range 0.0 to 1.0 +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetHDR( + CameraHandle hCamera, + float value + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ȡHDRҪ֧֣HDRܵͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [out] value HDRϵΧ0.01.0 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get camera HDR, need camera support, model without HDR function, this function returns an error code, indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [out] value HDR coefficient, range 0.0 to 1.0 +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetHDR( + CameraHandle hCamera, + float* value + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ȡǰ֡ID֧(ȫϵ֧)˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [out] id ֡ID +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief The ID of the current frame needs to be supported by the camera (supported by the full range of network ports). This function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [out] id Frame ID +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetFrameID( + CameraHandle hCamera, + UINT* id + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ȡǰ֡ʱ(λ΢) +/// \param [in] hCamera ľ +/// \param [out] TimeStampL ʱ32λ +/// \param [out] TimeStampH ʱ32λ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the timestamp of the current frame (in microseconds) +/// \param [in] hCamera Camera handle. +/// \param [out] TimeStampL timestamp low 32 bits +/// \param [out] TimeStampH Timestamp high 32 bits +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetFrameTimeStamp( + CameraHandle hCamera, + UINT* TimeStampL, + UINT* TimeStampH + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ģʽҪ֧֣ģʽлܵͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [in] value 0 1 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Setting the camera's gain mode requires camera support. Models without the gain mode switching function. This function returns an error code indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [in] value 0: low gain 1: high gain +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetHDRGainMode( + CameraHandle hCamera, + int value + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ȡģʽҪ֧֣ģʽлܵͺţ˺ش룬ʾ֧֡ +/// \param [in] hCamera ľ +/// \param [out] value 0 1 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get camera's gain mode, need camera support, model without gain mode switching function, this function returns error code, indicating that it is not supported. +/// \param [in] hCamera Camera handle. +/// \param [out] value 0: low gain 1: high gain +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetHDRGainMode( + CameraHandle hCamera, + int* value + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ֡ݴHBITMAP +/// \param [in] hDC Handle to a device contextWIN32 API CreateDIBitmapIJhdc +/// \param [in] pFrameBuffer ֡ +/// \param [in] pFrameHead ֡ͷ +/// \param [out] outBitmap ´HBITMAPʹҪWIN32 API DeleteObjectͷţ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Create HBITMAP from Frame Data +/// \param [in] hDC Handle to a device context (parameter hdc of WIN32 API CreateDIBitmap) +/// \param [in] pFrameBuffer Frame data +/// \param [in] pFrameHead Frame Header +/// \param [out] outBitmap newly created HBITMAP (need to call WIN32 API DeleteObject after use) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraCreateDIBitmap( + HDC hDC, + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + HBITMAP* outBitmap + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ָ֡ +/// \param [in] pFrameBuffer ֡ +/// \param [in] pFrameHead ֡ͷ +/// \param [in] hWnd ĿĴ +/// \param [in] Algorithm 㷨 0ٵԲ 1ٶ +/// \param [in] Mode ģʽ 0: ȱ 1 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Draw frames to the specified window +/// \param [in] pFrameBuffer frame data +/// \param [in] pFrameHead Frame Header +/// \param [in] hWnd destination window +/// \param [in] Algorithm scaling algorithm 0: fast but slightly worse quality 1 slower but better quality +/// \param [in] Mode Zoom Mode 0: Scale 1: Scale Zoom +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraDrawFrameBuffer( + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + HWND hWnd, + int Algorithm, + int Mode + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ת֡ +/// \param [inout] pFrameBuffer ֡ +/// \param [in] pFrameHead ֡ͷ +/// \param [in] Flags 1: 2 3¡ҽһηת(൱ת180) +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Flip frame data +/// \param [inout] pFrameBuffer frame data +/// \param [in] pFrameHead Frame Header +/// \param [in] Flags 1: Up and down 2: Around 3: Up and down, left and right are all flipped (equivalent to 180 degrees rotation) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraFlipFrameBuffer( + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + int Flags + ); + +/// @ingroup API_UTIL +/// \~chinese +/// \brief ת֡ݸʽ +/// \param [in] hCamera ľ +/// \param [in] pInFrameBuffer ֡ +/// \param [out] pOutFrameBuffer ֡ +/// \param [in] outWidth +/// \param [in] outHeight ߶ +/// \param [in] outMediaType ʽ @see CameraSetIspOutFormat +/// \param [inout] pFrameHead ֡ͷϢתɹϢᱻ޸Ϊ֡Ϣ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Conversion frame data format +/// \param [in] hCamera Camera handle. +/// \param [in] pInFrameBuffer input frame data +/// \param [out] pOutFrameBuffer output frame data +/// \param [in] outWidth output width +/// \param [in] outHeight output height +/// \param [in] outMediaType output format @see CameraSetIspOutFormat +/// \param [inout] pFrameHead frame header information (after successful conversion, the information inside will be modified to output frame information) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraConvertFrameBufferFormat( + CameraHandle hCamera, + BYTE *pInFrameBuffer, + BYTE *pOutFrameBuffer, + int outWidth, + int outHeight, + UINT outMediaType, + tSdkFrameHead* pFrameHead + ); + +/// @ingroup API_RECONNECT +/// \~chinese +/// \brief ״̬ıĻص֪ͨߡʱpCallBackָĻصͻᱻá +/// \param [in] hCamera ľ +/// \param [in] pCallBack صָ롣 +/// \param [in] pContext صĸӲڻصʱøӲᱻ룬ΪNULL +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the callback notification function for camera connection state changes. When the camera is disconnected and reconnected, the callback function pointed to by pCallBack will be called. +/// \param [in] hCamera Camera handle. +/// \param [in] pCallBack callback function pointer. +/// \param [in] pContext Additional parameter of the callback function. This additional parameter will be passed in when the callback function is called. It can be NULL. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetConnectionStatusCallback( + CameraHandle hCamera, + CAMERA_CONNECTION_STATUS_CALLBACK pCallBack, + PVOID pContext + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ùԴģʽϵҪӲ֧֣ +/// \param [in] hCamera ľ +/// \param [in] index +/// \param [in] mode ģʽ0: 1:ֶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the output mode of the light controller (Smart camera series and hardware support required) +/// \param [in] hCamera Camera handle. +/// \param [in] index controller index +/// \param [in] mode output mode (0: follow strobe 1: manual) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetLightingControllerMode( + CameraHandle hCamera, + int index, + int mode + ); + +/// @ingroup API_ADVANCE +/// \~chinese +/// \brief ùԴ״̬ϵҪӲ֧֣ +/// \param [in] hCamera ľ +/// \param [in] index +/// \param [in] state ״̬0:ر 1򿪣 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the output status of the light controller (Smart camera series and hardware support required) +/// \param [in] hCamera Camera handle. +/// \param [in] index controller index +/// \param [in] state output state (0: off 1: on) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraSetLightingControllerState( + CameraHandle hCamera, + int index, + int state + ); + +/// @ingroup API_MULTI_EYE +/// \~chinese +/// \brief ȡĿĿ +/// \param [in] hCamera ľ +/// \param [out] EyeCount Ŀ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get the number of eyes in the camera +/// \param [in] hCamera Camera handle. +/// \param [out] EyeCount eye count +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGetEyeCount( + CameraHandle hCamera, + int* EyeCount + ); + +/// @ingroup API_MULTI_EYE +/// \~chinese +/// \brief ԶĿ֡ڵijĿͼISP +/// \param [in] hCamera ľ +/// \param [in] iEyeIndex Ŀ +/// \param [in] pbyIn ͼݵĻַΪNULL +/// \param [in] pInFrInfo ͼݵ֡ͷΪNULL +/// \param [out] pbyOut ͼĻַΪNULL +/// \param [out] pOutFrInfo ͼ֡ͷϢΪNULL +/// \param [in] uOutFormat ͼʽ +/// \param [in] uReserved ԤΪ0 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Do ISP for a certain monocular in the multi-camera frame. +/// \param [in] hCamera Camera handle. +/// \param [in] iEyeIndex eye index. +/// \param [in] pbyIn Input the buffer address of the image data, which cannot be NULL. +/// \param [in] pInFrInfo Input the frame header of the image data, which cannot be NULL. +/// \param [out] pbyOut The buffer address of the image output after processing, cannot be NULL. +/// \param [out] pOutFrInfo The header information of the processed image cannot be NULL. +/// \param [in] uOutFormat The output format of the image after processing. +/// \param [in] uReserved Reservation parameters must be set to 0. +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraMultiEyeImageProcess( + CameraHandle hCamera, + int iEyeIndex, + BYTE* pbyIn, + tSdkFrameHead* pInFrInfo, + BYTE* pbyOut, + tSdkFrameHead* pOutFrInfo, + UINT uOutFormat, + UINT uReserved + ); + +#endif diff --git a/others/include/camera/CameraApiLoad.h b/others/include/camera/CameraApiLoad.h new file mode 100644 index 0000000..78a0a49 --- /dev/null +++ b/others/include/camera/CameraApiLoad.h @@ -0,0 +1,5622 @@ +#ifndef _MV_CAM_API +#define _MV_CAM_API + +#include "CameraDefine.h" +#include "CameraStatus.h" + +#ifndef MAX_PATH +#define MAX_PATH 256 +#endif + +//BIG5 TRANS ALLOWED + + +/******************************************************/ +// : CameraSdkInit +// : SDKʼڵκSDKӿǰ +// ȵøýӿڽгʼú +// ڼֻҪһΡ +// : iLanguageSel ѡSDKڲʾϢͽ, +// 0:ʾӢ,1:ʾġ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSdkInit)( + int iLanguageSel + ); + +/******************************************************/ +// : CameraEnumerateDevice +// : ö豸豸бڵCameraInit +// ֮ǰøú豸Ϣ +// : pCameraList 豸бָ롣 +// piNums 豸ĸָ룬ʱpCameraList +// Ԫظʱʵҵ豸 +// ע⣬piNumsֵָʼҲpCameraListԪظ +// пڴ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraEnumerateDevice)( + tSdkCameraDevInfo* pCameraList, + INT* piNums + ); + +/******************************************************/ +// : CameraEnumerateDeviceEx +// : ö豸豸бڵCameraInitEx +// ֮ǰøúö豸 +// : +// ֵ : 豸0ʾޡ +/******************************************************/ +typedef INT (__stdcall *_CameraEnumerateDeviceEx)( + ); + +/******************************************************/ +// : CameraIsOpened +// : 豸ǷѾӦó򿪡ڵCameraInit +// ֮ǰʹøúм⣬Ѿ򿪣 +// CameraInit᷵豸Ѿ򿪵Ĵ롣 +// : pCameraList 豸öϢṹָ룬CameraEnumerateDeviceá +// pOpened 豸״ָ̬룬豸Ƿ񱻴򿪵״̬TRUEΪ򿪣FALSEΪС +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraIsOpened)( + tSdkCameraDevInfo* pCameraList, + BOOL* pOpened + ); + +/******************************************************/ +// : CameraInit +// : ʼʼɹ󣬲ܵκ +// صIJӿڡ +// : pCameraInfo 豸ϢCameraEnumerateDevice +// á +// iParamLoadMode ʼʱʹõIJطʽ-1ʾʹϴ˳ʱIJطʽ +// emTeam ʼʱʹõIJ顣-1ʾϴ˳ʱIJ顣 +// pCameraHandle ľָ룬ʼɹ󣬸ָ +// ظЧڵ +// صIJӿʱҪþҪ +// ڶ֮֡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraInit)( + tSdkCameraDevInfo* pCameraInfo, + int emParamLoadMode, + int emTeam, + CameraHandle* pCameraHandle + ); + +/******************************************************/ +// : CameraInitEx +// : ʼʼɹ󣬲ܵκ +// صIJӿڡ +// : iDeviceIndex ţCameraEnumerateDeviceEx +// iParamLoadMode ʼʱʹõIJطʽ-1ʾʹϴ˳ʱIJطʽ +// Ϊ PARAM_MODE_BY_MODEL ʾͺż +// Ϊ PARAM_MODE_BY_SN ʾкż +// Ϊ PARAM_MODE_BY_NAME ʾdzƼ +// ϸοCameraDefine.h emSdkParameterMode 塣 +// emTeam ʼʱʹõIJ顣-1ʾϴ˳ʱIJ顣 +// pCameraHandle ľָ룬ʼɹ󣬸ָ +// ظЧڵ +// صIJӿʱҪþҪ +// ڶ֮֡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraInitEx)( + int iDeviceIndex, + int iParamLoadMode, + int emTeam, + CameraHandle* pCameraHandle + ); + +/******************************************************/ +// : CameraInitEx2 +// : ʼʼɹ󣬲ܵκ +// صIJӿڡ עҪȵCameraEnumerateDeviceExö +// : CameraName +// pCameraHandle ľָ룬ʼɹ󣬸ָ +// ظЧڵ +// صIJӿʱҪþҪ +// ڶ֮֡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraInitEx2)( + char* CameraName, + CameraHandle *pCameraHandle + ); + +/******************************************************/ +// : CameraSetCallbackFunction +// : ͼ񲶻Ļصµͼ֡ʱ +// pCallBackָĻصͻᱻá +// : hCamera ľCameraInitá +// pCallBack صָ롣 +// pContext صĸӲڻصʱ +// øӲᱻ룬ΪNULL +// ʱЯϢ +// pCallbackOld ڱ浱ǰĻصΪNULL +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetCallbackFunction)( + CameraHandle hCamera, + CAMERA_SNAP_PROC pCallBack, + PVOID pContext, + CAMERA_SNAP_PROC* pCallbackOld + ); + +/******************************************************/ +// : CameraUnInit +// : ʼͷԴ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraUnInit)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraGetInformation +// : Ϣ +// : hCamera ľCameraInitá +// pbuffer ָϢָָ롣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetInformation)( + CameraHandle hCamera, + char** pbuffer + ); + +/******************************************************/ +// : CameraImageProcess +// : õԭʼͼݽдӱͶȡ +// ɫУȴЧõRGB888 +// ʽͼݡ +// : hCamera ľCameraInitá +// pbyIn ͼݵĻַΪNULL +// pbyOut ͼĻַΪNULL +// pFrInfo ͼ֡ͷϢɺ֡ͷϢ +// еͼʽuiMediaType֮ı䡣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImageProcess)( + CameraHandle hCamera, + BYTE* pbyIn, + BYTE* pbyOut, + tSdkFrameHead* pFrInfo + ); + +/******************************************************/ +// : CameraImageProcessEx +// : õԭʼͼݽдӱͶȡ +// ɫУȴЧõRGB888 +// ʽͼݡ +// : hCamera ľCameraInitá +// pbyIn ͼݵĻַΪNULL +// pbyOut ͼĻַΪNULL +// pFrInfo ͼ֡ͷϢɺ֡ͷϢ +// uOutFormat ͼʽ +// uReserved ԤΪ0 +// еͼʽuiMediaType֮ı䡣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImageProcessEx)( + CameraHandle hCamera, + BYTE* pbyIn, + BYTE* pbyOut, + tSdkFrameHead* pFrInfo, + UINT uOutFormat, + UINT uReserved + ); + + +/******************************************************/ +// : CameraDisplayInit +// : ʼSDKڲʾģ顣ڵCameraDisplayRGB24 +// ǰȵøúʼڶοУ +// ʹԼķʽͼʾ(CameraDisplayRGB24) +// Ҫñ +// : hCamera ľCameraInitá +// hWndDisplay ʾڵľһΪڵm_hWndԱ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraDisplayInit)( + CameraHandle hCamera, + HWND hWndDisplay + ); + +/******************************************************/ +// : CameraDisplayInitEx +// : ʼSDKڲʾģ顣ڵCameraDisplayRGB24 +// ǰȵøúʼڶοУ +// ʹԼķʽͼʾ(CameraDisplayRGB24) +// Ҫñ ú CameraDisplayInit +// úʱΪͼļһSDKʹڲISPʾӿ +// : pCameraHandle ľ +// hWndDisplay ʾڵľһΪڵm_hWndԱ +// szFileName ͼļ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraDisplayInitEx)( + CameraHandle* pCameraHandle, + HWND hWndDisplay, + char* szFileName + ); + +/******************************************************/ +// : CameraDisplayRGB24 +// : ʾͼ񡣱ùCameraDisplayInit +// ʼܵñ +// : hCamera ľCameraInitá +// pbyRGB24 ͼݻRGB888ʽ +// pFrInfo ͼ֡ͷϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraDisplayRGB24)( + CameraHandle hCamera, + BYTE* pbyRGB24, + tSdkFrameHead* pFrInfo + ); + +/******************************************************/ +// : CameraSetDisplayMode +// : ʾģʽùCameraDisplayInit +// гʼܵñ +// : hCamera ľCameraInitá +// iMode ʾģʽDISPLAYMODE_SCALE +// DISPLAYMODE_REAL,μCameraDefine.h +// emSdkDisplayModeĶ塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetDisplayMode)( + CameraHandle hCamera, + INT iMode + ); + +/******************************************************/ +// : CameraSetDisplayOffset +// : ʾʼƫֵʾģʽΪDISPLAYMODE_REAL +// ʱЧʾؼĴСΪ320X240ͼ +// ijߴΪ640X480ôiOffsetX = 160,iOffsetY = 120ʱ +// ʾͼľ320X240λáù +// CameraDisplayInitгʼܵñ +// : hCamera ľCameraInitá +// iOffsetX ƫƵXꡣ +// iOffsetY ƫƵYꡣ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetDisplayOffset)( + CameraHandle hCamera, + int iOffsetX, + int iOffsetY + ); + +/******************************************************/ +// : CameraSetDisplaySize +// : ʾؼijߴ硣ù +// CameraDisplayInitгʼܵñ +// : hCamera ľCameraInitá +// iWidth +// iHeight ߶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetDisplaySize)( + CameraHandle hCamera, + INT iWidth, + INT iHeight + ); + +/******************************************************/ +// : CameraGetImageBuffer +// : һ֡ͼݡΪЧʣSDKͼץȡʱ㿽ƣ +// CameraGetImageBufferʵʻںеһַ +// úɹú󣬱CameraReleaseImageBufferͷ +// CameraGetImageBufferõĻ,Աں˼ʹ +// û +// : hCamera ľCameraInitá +// pFrameInfo ͼ֡ͷϢָ롣 +// pbyBuffer ָͼݵĻָ롣 +// 㿽Чʣ +// ʹһָָָ롣 +// UINT wTimes ץȡͼijʱʱ䡣λ롣 +// wTimesʱڻδͼú +// ᷵سʱϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetImageBuffer)( + CameraHandle hCamera, + tSdkFrameHead* pFrameInfo, + BYTE** pbyBuffer, + UINT wTimes + ); + +/******************************************************/ +// : CameraGetImageBufferEx +// : һ֡ͼݡýӿڻõͼǾRGBʽúú +// Ҫ CameraReleaseImageBuffer ͷţҲҪfree֮ĺͷ +// ͷŸúصͼݻ +// : hCamera ľCameraInitá +// piWidth ָ룬ͼĿ +// piHeight ָ룬ͼĸ߶ +// UINT wTimes ץȡͼijʱʱ䡣λ롣 +// wTimesʱڻδͼú +// ᷵سʱϢ +// ֵ : ɹʱRGBݻ׵ַ; +// 򷵻0 +/******************************************************/ +typedef unsigned char* (__stdcall *_CameraGetImageBufferEx)( + CameraHandle hCamera, + INT* piWidth, + INT* piHeight, + UINT wTimes + ); + +/******************************************************/ +// : CameraSnapToBuffer +// : ץһͼ񵽻Сץģʽ +// Զлץģʽķֱʽͼ񲶻Ȼ +// 񵽵ݱ浽С +// úɹú󣬱CameraReleaseImageBuffer +// ͷCameraSnapToBufferõĻο +// CameraGetImageBufferĹ֡ +// : hCamera ľCameraInitá +// pFrameInfo ָ룬ͼ֡ͷϢ +// pbyBuffer ָָָ룬ͼ񻺳ĵַ +// uWaitTimeMs ʱʱ䣬λ롣ڸʱڣȻû +// ɹݣ򷵻سʱϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSnapToBuffer)( + CameraHandle hCamera, + tSdkFrameHead* pFrameInfo, + BYTE** pbyBuffer, + UINT uWaitTimeMs + ); + +/******************************************************/ +// : CameraReleaseImageBuffer +// : ͷCameraGetImageBufferõĻ +// : hCamera ľCameraInitá +// pbyBuffer CameraGetImageBufferõĻַ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraReleaseImageBuffer)( + CameraHandle hCamera, + BYTE* pbyBuffer + ); + +/******************************************************/ +// : CameraPlay +// : SDK빤ģʽʼ͵ͼ +// ݡǰǴģʽҪյ +// ֡ԺŻͼ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraPlay)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraPause +// : SDKͣģʽͼݣ +// ͬʱҲᷢͣͷŴ +// ͣģʽ£ԶIJãЧ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraPause)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraStop +// : SDKֹͣ״̬һǷʼʱøú +// úãٶIJá +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraStop)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraInitRecord +// : ʼһ¼ +// : hCamera ľCameraInitá +// iFormat ¼ĸʽǰֲֻ֧ѹMSCVַʽ +// 0:ѹ1:MSCVʽѹ +// pcSavePath ¼ļ· +// b2GLimit ΪTRUE,ļ2GʱԶָ +// dwQuality ¼ӣԽԽáΧ1100. +// iFrameRate ¼֡ʡ趨ıʵʲɼ֡ʴ +// Ͳ©֡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraInitRecord)( + CameraHandle hCamera, + int iFormat, + char* pcSavePath, + BOOL b2GLimit, + DWORD dwQuality, + int iFrameRate + ); + +/******************************************************/ +// : CameraStopRecord +// : ¼񡣵CameraInitRecord󣬿ͨú +// һ¼񣬲ļ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraStopRecord)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraPushFrame +// : һ֡ݴ¼СCameraInitRecord +// ܵøúCameraStopRecordú󣬲ٵ +// úǵ֡ͷϢЯͼɼʱ +// Ϣ¼Ծ׼ʱͬ֡ʲȶ +// Ӱ졣 +// : hCamera ľCameraInitá +// pbyImageBuffer ͼݻRGBʽ +// pFrInfo ͼ֡ͷϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraPushFrame)( + CameraHandle hCamera, + BYTE* pbyImageBuffer, + tSdkFrameHead* pFrInfo + ); + +/******************************************************/ +// : CameraSaveImage +// : ͼ񻺳ݱͼƬļ +// : hCamera ľCameraInitá +// lpszFileName ͼƬļ· +// pbyImageBuffer ͼݻ +// pFrInfo ͼ֡ͷϢ +// byFileType ͼ񱣴ĸʽȡֵΧμCameraDefine.h +// emSdkFileTypeͶ塣Ŀǰ֧ +// BMPJPGPNGRAWָʽRAWʾ +// ԭʼݣRAWʽļҪ +// pbyImageBufferpFrInfoCameraGetImageBuffer +// õݣδCameraImageProcessת +// BMPʽ֮ҪBMPJPG +// PNGʽpbyImageBufferpFrInfo +// CameraImageProcessRGBʽݡ +// ÷ԲοAdvanced̡ +// byQuality ͼ񱣴ӣΪJPGʽ +// ʱòЧΧ1100ʽ +// д0 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSaveImage)( + CameraHandle hCamera, + char* lpszFileName, + BYTE* pbyImageBuffer, + tSdkFrameHead* pFrInfo, + UINT byFileType, + BYTE byQuality + ); + +/******************************************************/ +// : CameraGetImageResolution +// : õǰԤķֱʡ +// : hCamera ľCameraInitá +// psCurVideoSize ṹָ룬ڷصǰķֱʡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetImageResolution)( + CameraHandle hCamera, + tSdkImageResolution* psCurVideoSize + ); + +/******************************************************/ +// : CameraGetImageResolutionEx +// : ȡķֱʡ +// : hCamera ľCameraInitá +// iIndex ţ[0,N]ʾԤķֱ(N ΪԤֱʵһ㲻20),OXFF ʾԶֱ(ROI) +// acDescription ÷ֱʵϢԤֱʱϢЧԶֱʿɺԸϢ +// Mode 0: ͨģʽ 1Sum 2Average 3Skip 4Resample +// ModeSize ͨģʽºԣ1λʾ2X2 ڶλʾ3X3 ... +// x, y ˮƽֱƫ +// width, height +// ZoomWidth,ZoomHeight ʱΪ0ʾ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetImageResolutionEx)( + CameraHandle hCamera, + int* iIndex, + char acDescription[32], + int* Mode, + UINT* ModeSize, + int* x, + int* y, + int* width, + int* height, + int* ZoomWidth, + int* ZoomHeight + ); + +/******************************************************/ +// : CameraSetImageResolution +// : Ԥķֱʡ +// : hCamera ľCameraInitá +// pImageResolution ṹָ룬ڷصǰķֱʡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetImageResolution)( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution + ); + +/******************************************************/ +// : CameraSetImageResolutionEx +// : ķֱʡ +// : hCamera ľCameraInitá +// iIndex ţ[0,N]ʾԤķֱ(N ΪԤֱʵһ㲻20),OXFF ʾԶֱ(ROI) +// Mode 0: ͨģʽ 1Sum 2Average 3Skip 4Resample +// ModeSize ͨģʽºԣ1λʾ2X2 ڶλʾ3X3 ... +// x, y ˮƽֱƫ +// width, height +// ZoomWidth,ZoomHeight ʱΪ0ʾ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetImageResolutionEx)( + CameraHandle hCamera, + int iIndex, + int Mode, + UINT ModeSize, + int x, + int y, + int width, + int height, + int ZoomWidth, + int ZoomHeight + ); + +/******************************************************/ +// : CameraGetMediaType +// : ǰԭʼݵĸʽš +// : hCamera ľCameraInitá +// piMediaType ָ룬ڷصǰʽ͵š +// CameraGetCapabilityԣ +// tSdkCameraCapbilityṹеpMediaTypeDesc +// ԱУʽֵ֧ĸʽ +// piMediaTypeָţǸš +// pMediaTypeDesc[*piMediaType].iMediaTypeʾǰʽ +// 롣ñμCameraDefine.h[ͼʽ]֡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetMediaType)( + CameraHandle hCamera, + INT* piMediaType + ); + +/******************************************************/ +// : CameraSetMediaType +// : ԭʼݸʽ +// : hCamera ľCameraInitá +// iMediaType CameraGetCapabilityԣ +// tSdkCameraCapbilityṹеpMediaTypeDesc +// ԱУʽֵ֧ĸʽ +// iMediaTypeǸš +// pMediaTypeDesc[iMediaType].iMediaTypeʾǰʽ +// 롣ñμCameraDefine.h[ͼʽ]֡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetMediaType)( + CameraHandle hCamera, + INT iMediaType + ); + +/******************************************************/ +// : CameraSetAeState +// : عģʽԶֶ +// : hCamera ľCameraInitá +// bAeState TRUEʹԶع⣻FALSEֹͣԶع⡣ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAeState)( + CameraHandle hCamera, + BOOL bAeState + ); + +/******************************************************/ +// : CameraGetAeState +// : ǰعģʽ +// : hCamera ľCameraInitá +// pAeState ָ룬ڷԶعʹ״̬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAeState)( + CameraHandle hCamera, + BOOL* pAeState + ); + +/******************************************************/ +// : CameraSetSharpness +// : ͼĴ񻯲 +// : hCamera ľCameraInitá +// iSharpness 񻯲ΧCameraGetCapability +// ãһ[0,100]0ʾر񻯴 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetSharpness)( + CameraHandle hCamera, + int iSharpness + ); + +/******************************************************/ +// : CameraGetSharpness +// : ȡǰ趨ֵ +// : hCamera ľCameraInitá +// piSharpness ָ룬صǰ趨񻯵趨ֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetSharpness)( + CameraHandle hCamera, + int* piSharpness + ); + +/******************************************************/ +// : CameraSetLutMode +// : IJ任ģʽLUTģʽ +// : hCamera ľCameraInitá +// emLutMode LUTMODE_PARAM_GEN ʾ٤ͶԱȶȲ̬LUT +// LUTMODE_PRESET ʾʹԤLUT +// LUTMODE_USER_DEF ʾʹûԶLUT +// LUTMODE_PARAM_GENĶοCameraDefine.hemSdkLutMode͡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetLutMode)( + CameraHandle hCamera, + int emLutMode + ); + +/******************************************************/ +// : CameraGetLutMode +// : IJ任ģʽLUTģʽ +// : hCamera ľCameraInitá +// pemLutMode ָ룬صǰLUTģʽCameraSetLutMode +// emLutModeͬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetLutMode)( + CameraHandle hCamera, + int* pemLutMode + ); + +/******************************************************/ +// : CameraSelectLutPreset +// : ѡԤLUTģʽµLUTʹCameraSetLutMode +// LUTģʽΪԤģʽ +// : hCamera ľCameraInitá +// iSel šĸCameraGetCapability +// á +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSelectLutPreset)( + CameraHandle hCamera, + int iSel + ); + +/******************************************************/ +// : CameraGetLutPresetSel +// : ԤLUTģʽµLUTš +// : hCamera ľCameraInitá +// piSel ָ룬رš +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetLutPresetSel)( + CameraHandle hCamera, + int* piSel + ); + +/******************************************************/ +// : CameraSetCustomLut +// : ԶLUTʹCameraSetLutMode +// LUTģʽΪԶģʽ +// : hCamera ľCameraInitá +// iChannel ָҪ趨LUTɫͨΪLUT_CHANNEL_ALLʱ +// ͨLUTͬʱ滻 +// οCameraDefine.hemSdkLutChannel塣 +// pLut ָ룬ָLUTĵַLUTΪ޷Ŷ飬СΪ +// 4096ֱɫͨ04096(12bitɫ)Ӧӳֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetCustomLut)( + CameraHandle hCamera, + int iChannel, + USHORT* pLut + ); + +/******************************************************/ +// : CameraGetCustomLut +// : õǰʹõԶLUT +// : hCamera ľCameraInitá +// iChannel ָҪõLUTɫͨΪLUT_CHANNEL_ALLʱ +// غɫͨLUT +// οCameraDefine.hemSdkLutChannel塣 +// pLut ָ룬ָLUTĵַLUTΪ޷Ŷ飬СΪ +// 4096ֱɫͨ04096(12bitɫ)Ӧӳֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetCustomLut)( + CameraHandle hCamera, + int iChannel, + USHORT* pLut + ); + +/******************************************************/ +// : CameraGetCurrentLut +// : ǰLUTκLUTģʽ¶Ե, +// ֱ۵Ĺ۲LUTߵı仯 +// : hCamera ľCameraInitá +// iChannel ָҪõLUTɫͨΪLUT_CHANNEL_ALLʱ +// غɫͨLUT +// οCameraDefine.hemSdkLutChannel塣 +// pLut ָ룬ָLUTĵַLUTΪ޷Ŷ飬СΪ +// 4096ֱɫͨ04096(12bitɫ)Ӧӳֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetCurrentLut)( + CameraHandle hCamera, + int iChannel, + USHORT* pLut + ); + +/******************************************************/ +// : CameraSetWbMode +// : ƽģʽΪֶԶַʽ +// : hCamera ľCameraInitá +// bAuto TRUEʾʹԶģʽ +// FALSEʾʹֶģʽͨ +// CameraSetOnceWBһΰƽ⡣ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetWbMode)( + CameraHandle hCamera, + BOOL bAuto + ); + +/******************************************************/ +// : CameraGetWbMode +// : õǰİƽģʽ +// : hCamera ľCameraInitá +// pbAuto ָ룬TRUEʾԶģʽFALSE +// Ϊֶģʽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetWbMode)( + CameraHandle hCamera, + BOOL* pbAuto + ); + +/******************************************************/ +// : CameraSetPresetClrTemp +// : ѡָԤɫģʽ +// : hCamera ľCameraInitá +// iSel Ԥɫµģʽţ0ʼ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetPresetClrTemp)( + CameraHandle hCamera, + int iSel + ); + +/******************************************************/ +// : CameraGetPresetClrTemp +// : õǰѡԤɫģʽ +// : hCamera ľCameraInitá +// piSel ָ룬ѡԤɫ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetPresetClrTemp)( + CameraHandle hCamera, + int* piSel + ); + +/******************************************************/ +// : CameraSetUserClrTempGain +// : Զɫģʽµ +// : hCamera ľCameraInitá +// iRgain ɫ棬Χ0400ʾ04 +// iGgain ɫ棬Χ0400ʾ04 +// iBgain ɫ棬Χ0400ʾ04 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetUserClrTempGain)( + CameraHandle hCamera, + int iRgain, + int iGgain, + int iBgain + ); + + +/******************************************************/ +// : CameraGetUserClrTempGain +// : Զɫģʽµ +// : hCamera ľCameraInitá +// piRgain ָ룬غɫ棬Χ0400ʾ04 +// piGgain ָ룬ɫ棬Χ0400ʾ04 +// piBgain ָ룬ɫ棬Χ0400ʾ04 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetUserClrTempGain)( + CameraHandle hCamera, + int* piRgain, + int* piGgain, + int* piBgain + ); + +/******************************************************/ +// : CameraSetUserClrTempMatrix +// : Զɫģʽµɫ +// : hCamera ľCameraInitá +// pMatrix ָһfloat[3][3]׵ַ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetUserClrTempMatrix)( + CameraHandle hCamera, + float* pMatrix + ); + + +/******************************************************/ +// : CameraGetUserClrTempMatrix +// : Զɫģʽµɫ +// : hCamera ľCameraInitá +// pMatrix ָһfloat[3][3]׵ַ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetUserClrTempMatrix)( + CameraHandle hCamera, + float* pMatrix + ); + +/******************************************************/ +// : CameraSetClrTempMode +// : ðƽʱʹõɫģʽ +// ֵ֧ģʽֱ֣ԶԤԶ塣 +// Զģʽ£Զѡʵɫģʽ +// Ԥģʽ£ʹûָɫģʽ +// Զģʽ£ʹûԶɫ; +// : hCamera ľCameraInitá +// iMode ģʽֻemSdkClrTmpModeжһ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetClrTempMode)( + CameraHandle hCamera, + int iMode + ); + +/******************************************************/ +// : CameraGetClrTempMode +// : ðƽʱʹõɫģʽοCameraSetClrTempMode +// й֡ +// : hCamera ľCameraInitá +// pimode ָ룬ģʽѡ񣬲οemSdkClrTmpModeͶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetClrTempMode)( + CameraHandle hCamera, + int* pimode + ); + + +/******************************************************/ +// : CameraSetOnceWB +// : ֶƽģʽ£øúһΰƽ⡣ +// ЧʱΪյһ֡ͼʱ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetOnceWB)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraSetOnceBB +// : ִһκƽ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetOnceBB)( + CameraHandle hCamera + ); + + +/******************************************************/ +// : CameraSetAeTarget +// : 趨ԶعĿֵ趨ΧCameraGetCapability +// á +// : hCamera ľCameraInitá +// iAeTarget Ŀֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAeTarget)( + CameraHandle hCamera, + int iAeTarget + ); + +/******************************************************/ +// : CameraGetAeTarget +// : ԶعĿֵ +// : hCamera ľCameraInitá +// *piAeTarget ָ룬Ŀֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAeTarget)( + CameraHandle hCamera, + int* piAeTarget + ); + +/******************************************************/ +// : CameraSetAeExposureRange +// : 趨ԶعģʽعʱڷΧ +// : hCamera ľCameraInitá +// fMinExposureTime Сعʱ䣨΢룩 +// fMaxExposureTime عʱ䣨΢룩 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAeExposureRange)( + CameraHandle hCamera, + double fMinExposureTime, + double fMaxExposureTime + ); + +/******************************************************/ +// : CameraGetAeExposureRange +// : ԶعģʽعʱڷΧ +// : hCamera ľCameraInitá +// fMinExposureTime Сعʱ䣨΢룩 +// fMaxExposureTime عʱ䣨΢룩 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAeExposureRange)( + CameraHandle hCamera, + double* fMinExposureTime, + double* fMaxExposureTime + ); + +/******************************************************/ +// : CameraSetAeAnalogGainRange +// : 趨ԶعģʽڷΧ +// : hCamera ľCameraInitá +// iMinAnalogGain С +// iMaxAnalogGain +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAeAnalogGainRange)( + CameraHandle hCamera, + int iMinAnalogGain, + int iMaxAnalogGain + ); + +/******************************************************/ +// : CameraGetAeAnalogGainRange +// : ԶعģʽڷΧ +// : hCamera ľCameraInitá +// iMinAnalogGain С +// iMaxAnalogGain +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAeAnalogGainRange)( + CameraHandle hCamera, + int* iMinAnalogGain, + int* iMaxAnalogGain + ); + +/******************************************************/ +// : CameraSetAeThreshold +// : Զعģʽĵֵ +// : hCamera ľCameraInitá +// iThreshold abs(Ŀ-ͼ) < iThreshold ֹͣԶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAeThreshold)( + CameraHandle hCamera, + int iThreshold + ); + +/******************************************************/ +// : CameraGetAeThreshold +// : ȡԶعģʽĵֵ +// : hCamera ľCameraInitá +// iThreshold ȡĵֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAeThreshold)( + CameraHandle hCamera, + int* iThreshold + ); + +/******************************************************/ +// : CameraSetExposureTime +// : عʱ䡣λΪ΢롣CMOSع +// ĵλǰģˣعʱ䲢΢ +// ɵǻᰴȡᡣڵ +// 趨عʱ󣬽ٵCameraGetExposureTime +// ʵ趨ֵ +// : hCamera ľCameraInitá +// fExposureTime عʱ䣬λ΢롣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetExposureTime)( + CameraHandle hCamera, + double fExposureTime + ); + +//******************************************************/ +// : CameraGetExposureLineTime +// : һеعʱ䡣CMOSع +// ĵλǰģˣعʱ䲢΢ +// ɵǻᰴȡᡣ +// þǷCMOSعһжӦʱ䡣 +// : hCamera ľCameraInitá +// double *pfLineTime ָ룬һеعʱ䣬λΪ΢롣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ + +typedef CameraSdkStatus (__stdcall *_CameraGetExposureLineTime)( + CameraHandle hCamera, + double* pfLineTime + ); + +/******************************************************/ +// : CameraGetExposureTime +// : عʱ䡣μCameraSetExposureTime +// Ĺ +// : hCamera ľCameraInitá +// pfExposureTime ָ룬صǰعʱ䣬λ΢롣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetExposureTime)( + CameraHandle hCamera, + double* pfExposureTime + ); + +/******************************************************/ +// : CameraGetExposureTimeRange +// : عʱ䷶Χ +// : hCamera ľCameraInitá +// pfMin ָ룬عʱСֵλ΢롣 +// pfMax ָ룬عʱֵλ΢롣 +// pfStep ָ룬عʱIJֵλ΢롣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetExposureTimeRange)( + CameraHandle hCamera, + double* pfMin, + double* pfMax, + double* pfStep + ); + +/******************************************************/ +// : CameraSetAnalogGain +// : ͼģֵֵCameraGetCapability +// ԽṹsExposeDesc.fAnalogGainStep +// õʵʵͼźŷŴ +// : hCamera ľCameraInitá +// iAnalogGain 趨ģֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAnalogGain)( + CameraHandle hCamera, + INT iAnalogGain + ); + +/******************************************************/ +// : CameraGetAnalogGain +// : ͼźŵģֵμCameraSetAnalogGain +// ϸ˵ +// : hCamera ľCameraInitá +// piAnalogGain ָ룬صǰģֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAnalogGain)( + CameraHandle hCamera, + INT* piAnalogGain + ); + +/******************************************************/ +// : CameraSetGain +// : ͼ档趨ΧCameraGetCapability +// õԽṹsRgbGainRangeԱ +// ʵʵķŴ趨ֵ/100 +// : hCamera ľCameraInitá +// iRGain ɫֵͨ +// iGGain ɫֵͨ +// iBGain ɫֵͨ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetGain)( + CameraHandle hCamera, + int iRGain, + int iGGain, + int iBGain + ); + + +/******************************************************/ +// : CameraGetGain +// : ͼ档μCameraSetGain +// Ĺ֡ +// : hCamera ľCameraInitá +// piRGain ָ룬غɫֵͨ +// piGGain ָ룬ɫֵͨ +// piBGain ָ룬ɫֵͨ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetGain)( + CameraHandle hCamera, + int* piRGain, + int* piGGain, + int* piBGain + ); + + +/******************************************************/ +// : CameraSetGamma +// : 趨LUT̬ģʽµGammaֵ趨ֵ +// ϱSDKڲֻеڶ̬ +// ɵLUTģʽʱŻЧοCameraSetLutMode +// ĺ˵֡ +// : hCamera ľCameraInitá +// iGamma Ҫ趨Gammaֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetGamma)( + CameraHandle hCamera, + int iGamma + ); + +/******************************************************/ +// : CameraGetGamma +// : LUT̬ģʽµGammaֵοCameraSetGamma +// Ĺ +// : hCamera ľCameraInitá +// piGamma ָ룬صǰGammaֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetGamma)( + CameraHandle hCamera, + int* piGamma + ); + +/******************************************************/ +// : CameraSetContrast +// : 趨LUT̬ģʽµĶԱȶֵ趨ֵ +// ϱSDKڲֻеڶ̬ +// ɵLUTģʽʱŻЧοCameraSetLutMode +// ĺ˵֡ +// : hCamera ľCameraInitá +// iContrast 趨ĶԱȶֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetContrast)( + CameraHandle hCamera, + int iContrast + ); + +/******************************************************/ +// : CameraGetContrast +// : LUT̬ģʽµĶԱȶֵο +// CameraSetContrastĹ +// : hCamera ľCameraInitá +// piContrast ָ룬صǰĶԱȶֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetContrast)( + CameraHandle hCamera, + int* piContrast + ); + +/******************************************************/ +// : CameraSetSaturation +// : 趨ͼıͶȡԺڰЧ +// 趨ΧCameraGetCapabilityá100ʾ +// ʾԭʼɫȣǿ +// : hCamera ľCameraInitá +// iSaturation 趨ıͶֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetSaturation)( + CameraHandle hCamera, + int iSaturation + ); + +/******************************************************/ +// : CameraGetSaturation +// : ͼıͶȡ +// : hCamera ľCameraInitá +// piSaturation ָ룬صǰͼıͶֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetSaturation)( + CameraHandle hCamera, + int* piSaturation + ); + +/******************************************************/ +// : CameraSetMonochrome +// : òɫתΪڰ׹ܵʹܡ +// : hCamera ľCameraInitá +// bEnable TRUEʾɫͼתΪڰס +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetMonochrome)( + CameraHandle hCamera, + BOOL bEnable + ); + +/******************************************************/ +// : CameraGetMonochrome +// : òɫתڰ׹ܵʹ״ +// : hCamera ľCameraInitá +// pbEnable ָ롣TRUEʾ˲ɫͼ +// תΪڰͼĹܡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetMonochrome)( + CameraHandle hCamera, + BOOL* pbEnable + ); + +/******************************************************/ +// : CameraSetInverse +// : òͼɫתܵʹܡ +// : hCamera ľCameraInitá +// bEnable TRUEʾͼɫתܣ +// ԻƽƬЧ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetInverse)( + CameraHandle hCamera, + BOOL bEnable + ); + +/******************************************************/ +// : CameraGetInverse +// : ͼɫתܵʹ״̬ +// : hCamera ľCameraInitá +// pbEnable ָ룬ظùʹ״̬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetInverse)( + CameraHandle hCamera, + BOOL* pbEnable + ); + +/******************************************************/ +// : CameraSetAntiFlick +// : ԶعʱƵܵʹ״ֶ̬ +// عģʽЧ +// : hCamera ľCameraInitá +// bEnable TRUEƵ;FALSEرոùܡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAntiFlick)( + CameraHandle hCamera, + BOOL bEnable + ); + +/******************************************************/ +// : CameraGetAntiFlick +// : ԶعʱƵܵʹ״̬ +// : hCamera ľCameraInitá +// pbEnable ָ룬ظùܵʹ״̬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAntiFlick)( + CameraHandle hCamera, + BOOL* pbEnable + ); + +/******************************************************/ +// : CameraGetLightFrequency +// : ԶعʱƵƵѡ +// : hCamera ľCameraInitá +// piFrequencySel ָ룬ѡš0:50HZ 1:60HZ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetLightFrequency)( + CameraHandle hCamera, + int* piFrequencySel + ); + +/******************************************************/ +// : CameraSetLightFrequency +// : ԶعʱƵƵʡ +// : hCamera ľCameraInitá +// iFrequencySel 0:50HZ , 1:60HZ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetLightFrequency)( + CameraHandle hCamera, + int iFrequencySel + ); + +/******************************************************/ +// : CameraSetFrameSpeed +// : 趨ͼ֡ʡɹѡ֡ģʽ +// CameraGetCapabilityõϢṹiFrameSpeedDesc +// ʾ֡ѡģʽ +// : hCamera ľCameraInitá +// iFrameSpeed ѡ֡ģʽţΧ0 +// CameraGetCapabilityõϢṹiFrameSpeedDesc - 1 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetFrameSpeed)( + CameraHandle hCamera, + int iFrameSpeed + ); + +/******************************************************/ +// : CameraGetFrameSpeed +// : ͼ֡ѡš÷ο +// CameraSetFrameSpeedĹ֡ +// : hCamera ľCameraInitá +// piFrameSpeed ָ룬ѡ֡ģʽš +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetFrameSpeed)( + CameraHandle hCamera, + int* piFrameSpeed + ); + + +/******************************************************/ +// : CameraSetParameterMode +// : 趨ȡĿ +// : hCamera ľCameraInitá +// iMode ȡĶ󡣲οCameraDefine.h +// emSdkParameterModeͶ塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetParameterMode)( + CameraHandle hCamera, + int iTarget + ); + +/******************************************************/ +// : CameraGetParameterMode +// : +// : hCamera ľCameraInitá +// int* piTarget +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetParameterMode)( + CameraHandle hCamera, + int* piTarget + ); + +/******************************************************/ +// : CameraSetParameterMask +// : òȡ롣غͱʱݸ +// ģǷػ߱档 +// : hCamera ľCameraInitá +// uMask 롣οCameraDefine.hPROP_SHEET_INDEX +// Ͷ塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetParameterMask)( + CameraHandle hCamera, + UINT uMask + ); + +/******************************************************/ +// : CameraSaveParameter +// : 浱ǰָIJСṩA,B,C,D +// A,B,C,Dռвı档 +// : hCamera ľCameraInitá +// iTeam PARAMETER_TEAM_A 浽A, +// PARAMETER_TEAM_B 浽B, +// PARAMETER_TEAM_C 浽C, +// PARAMETER_TEAM_D 浽D +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSaveParameter)( + CameraHandle hCamera, + int iTeam + ); + +/******************************************************/ +// : CameraReadParameterFromFile +// : PCָIJļмزҹ˾ +// PCΪ.config׺ļλڰװµ +// Camera\ConfigsļС +// : hCamera ľCameraInitá +// *sFileName ļ· +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraReadParameterFromFile)( + CameraHandle hCamera, + char* sFileName + ); + +/******************************************************/ +// : CameraLoadParameter +// : ָIJС +// : hCamera ľCameraInitá +// iTeam PARAMETER_TEAM_A A, +// PARAMETER_TEAM_B B, +// PARAMETER_TEAM_C C, +// PARAMETER_TEAM_D D, +// PARAMETER_TEAM_DEFAULT Ĭϲ +// ͶοCameraDefine.hemSdkParameterTeam +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraLoadParameter)( + CameraHandle hCamera, + int iTeam + ); + +/******************************************************/ +// : CameraGetCurrentParameterGroup +// : õǰѡIJ顣 +// : hCamera ľCameraInitá +// piTeam ָ룬صǰѡIJ顣ֵ +// οCameraLoadParameteriTeam +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetCurrentParameterGroup)( + CameraHandle hCamera, + int* piTeam + ); + +/******************************************************/ +// : CameraSetTransPackLen +// : ͼݵķְС +// ĿǰSDK汾УýӿڽGIGEӿЧ +// 紫ķְС֧־֡ +// ǽѡ8KķְСЧĽʹ +// ռõCPUʱ䡣 +// : hCamera ľCameraInitá +// iPackSel ְѡšְȿ +// ԽṹpPackLenDescԱ +// iPackLenDescԱʾѡķְģʽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetTransPackLen)( + CameraHandle hCamera, + INT iPackSel + ); + +/******************************************************/ +// : CameraGetTransPackLen +// : ǰְСѡš +// : hCamera ľCameraInitá +// piPackSel ָ룬صǰѡķְСš +// μCameraSetTransPackLeniPackSel +// ˵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetTransPackLen)( + CameraHandle hCamera, + INT* piPackSel + ); + +/******************************************************/ +// : CameraIsAeWinVisible +// : Զعοڵʾ״̬ +// : hCamera ľCameraInitá +// pbIsVisible ָ룬TRUEʾǰڻ +// ͼϡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraIsAeWinVisible)( + CameraHandle hCamera, + BOOL* pbIsVisible + ); + +/******************************************************/ +// : CameraSetAeWinVisible +// : Զعοڵʾ״̬ô״̬ +// ΪʾCameraImageOverlayܹλ +// Ծεķʽͼϡ +// : hCamera ľCameraInitá +// bIsVisible TRUEΪʾFALSEʾ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAeWinVisible)( + CameraHandle hCamera, + BOOL bIsVisible + ); + +/******************************************************/ +// : CameraGetAeWindow +// : Զعοڵλá +// : hCamera ľCameraInitá +// piHOff ָ룬شλϽǺֵ +// piVOff ָ룬شλϽֵ +// piWidth ָ룬شڵĿȡ +// piHeight ָ룬شڵĸ߶ȡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAeWindow)( + CameraHandle hCamera, + INT* piHOff, + INT* piVOff, + INT* piWidth, + INT* piHeight + ); + +/******************************************************/ +// : CameraSetAeWindow +// : ԶعIJοڡ +// : hCamera ľCameraInitá +// iHOff Ͻǵĺ +// iVOff Ͻǵ +// iWidth ڵĿ +// iHeight ڵĸ߶ +// iHOffiVOffiWidthiHeightȫΪ0 +// Ϊÿֱµľ1/2С +// ֱʵı仯仯iHOffiVOffiWidthiHeight +// Ĵλ÷Χ˵ǰֱʷΧڣ +// Զʹþ1/2Сڡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAeWindow)( + CameraHandle hCamera, + int iHOff, + int iVOff, + int iWidth, + int iHeight + ); + +/******************************************************/ +// : CameraSetMirror +// : ͼΪˮƽʹֱ +// : hCamera ľCameraInitá +// iDir ʾķ0ʾˮƽ1ʾֱ +// bEnable TRUEʹܾ;FALSEֹ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetMirror)( + CameraHandle hCamera, + int iDir, + BOOL bEnable + ); + +/******************************************************/ +// : CameraGetMirror +// : ͼľ״̬ +// : hCamera ľCameraInitá +// iDir ʾҪõľ +// 0ʾˮƽ1ʾֱ +// pbEnable ָ룬TRUEʾiDirָķ +// ʹܡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetMirror)( + CameraHandle hCamera, + int iDir, + BOOL* pbEnable + ); + +/******************************************************/ +// : CameraSetRotate +// : ͼת +// : hCamera ľCameraInitá +// iRot ʾתĽǶȣʱ뷽򣩣0ת 1:90 2:180 3:270ȣ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetRotate)( + CameraHandle hCamera, + int iRot + ); + +/******************************************************/ +// : CameraGetRotate +// : ͼת״̬ +// : hCamera ľCameraInitá +// iRot ʾҪõת +// ʱ뷽򣩣0ת 1:90 2:180 3:270ȣ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetRotate)( + CameraHandle hCamera, + int* iRot + ); + +/******************************************************/ +// : CameraGetWbWindow +// : ðƽοڵλá +// : hCamera ľCameraInitá +// PiHOff ָ룬زοڵϽǺ +// PiVOff ָ룬زοڵϽ +// PiWidth ָ룬زοڵĿȡ +// PiHeight ָ룬زοڵĸ߶ȡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetWbWindow)( + CameraHandle hCamera, + INT* PiHOff, + INT* PiVOff, + INT* PiWidth, + INT* PiHeight + ); + +/******************************************************/ +// : CameraSetWbWindow +// : ðƽοڵλá +// : hCamera ľCameraInitá +// iHOff οڵϽǺꡣ +// iVOff οڵϽꡣ +// iWidth οڵĿȡ +// iHeight οڵĸ߶ȡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetWbWindow)( + CameraHandle hCamera, + INT iHOff, + INT iVOff, + INT iWidth, + INT iHeight + ); + +/******************************************************/ +// : CameraIsWbWinVisible +// : ðƽⴰڵʾ״̬ +// : hCamera ľCameraInitá +// pbShow ָ룬TRUEʾǿɼġ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraIsWbWinVisible)( + CameraHandle hCamera, + BOOL* pbShow + ); + +/******************************************************/ +// : CameraSetWbWinVisible +// : ðƽⴰڵʾ״̬ +// : hCamera ľCameraInitá +// bShow TRUEʾΪɼڵ +// CameraImageOverlayͼϽԾ +// ķʽӰƽοڵλá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetWbWinVisible)( + CameraHandle hCamera, + BOOL bShow + ); + +/******************************************************/ +// : CameraImageOverlay +// : ͼϵʮߡƽοڡ +// ԶعοڵͼΡֻΪɼ״̬ +// ʮߺͲοڲܱϡ +// ע⣬úͼRGBʽ +// : hCamera ľCameraInitá +// pRgbBuffer ͼݻ +// pFrInfo ͼ֡ͷϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImageOverlay)( + CameraHandle hCamera, + BYTE* pRgbBuffer, + tSdkFrameHead* pFrInfo + ); + +/******************************************************/ +// : CameraSetCrossLine +// : ָʮߵIJ +// : hCamera ľCameraInitá +// iLine ʾҪõڼʮߵ״̬ΧΪ[0,8]9 +// x ʮλõĺֵ +// y ʮλõֵ +// uColor ʮߵɫʽΪ(R|(G<<8)|(B<<16)) +// bVisible ʮߵʾ״̬TRUEʾʾ +// ֻΪʾ״̬ʮߣڵ +// CameraImageOverlayŻᱻӵͼϡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetCrossLine)( + CameraHandle hCamera, + int iLine, + INT x, + INT y, + UINT uColor, + BOOL bVisible + ); + +/******************************************************/ +// : CameraGetCrossLine +// : ָʮߵ״̬ +// : hCamera ľCameraInitá +// iLine ʾҪȡĵڼʮߵ״̬ΧΪ[0,8]9 +// px ָ룬ظʮλõĺꡣ +// py ָ룬ظʮλõĺꡣ +// pcolor ָ룬ظʮߵɫʽΪ(R|(G<<8)|(B<<16)) +// pbVisible ָ룬TRUEʾʮ߿ɼ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetCrossLine)( + CameraHandle hCamera, + INT iLine, + INT* px, + INT* py, + UINT* pcolor, + BOOL* pbVisible + ); + +/******************************************************/ +// : CameraGetCapability +// : ṹ塣ýṹа +// õĸֲķΧϢغIJ +// أҲڶ̬ý档 +// : hCamera ľCameraInitá +// pCameraInfo ָ룬ظĽṹ塣 +// tSdkCameraCapbilityCameraDefine.hж塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetCapability)( + CameraHandle hCamera, + tSdkCameraCapbility* pCameraInfo + ); + +/******************************************************/ +// : CameraWriteSN +// : кšҹ˾кŷΪ3 +// 0ҹ˾ԶкţʱѾ +// 趨ã12οʹáÿ +// ųȶ32ֽڡ +// : hCamera ľCameraInitá +// pbySN кŵĻ +// iLevel Ҫ趨кżֻ12 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraWriteSN)( + CameraHandle hCamera, + BYTE* pbySN, + INT iLevel + ); + +/******************************************************/ +// : CameraReadSN +// : ȡָкšкŵĶο +// CameraWriteSNĹ֡ +// : hCamera ľCameraInitá +// pbySN кŵĻ +// iLevel Ҫȡкżֻ12 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraReadSN)( + CameraHandle hCamera, + BYTE* pbySN, + INT iLevel + ); +/******************************************************/ +// : CameraSetTriggerDelayTime +// : ӲģʽµĴʱʱ䣬λ΢롣 +// Ӳźٺ󣬾ָʱٿʼɼ +// ͼ񡣽ͺŵָ֧ùܡ鿴 +// Ʒ˵顣 +// : hCamera ľCameraInitá +// uDelayTimeUs Ӳʱλ΢롣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetTriggerDelayTime)( + CameraHandle hCamera, + UINT uDelayTimeUs + ); + +/******************************************************/ +// : CameraGetTriggerDelayTime +// : õǰ趨Ӳʱʱ䡣 +// : hCamera ľCameraInitá +// puDelayTimeUs ָ룬ʱʱ䣬λ΢롣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetTriggerDelayTime)( + CameraHandle hCamera, + UINT* puDelayTimeUs + ); + +/******************************************************/ +// : CameraSetTriggerCount +// : ôģʽµĴ֡Ӳ +// ģʽЧĬΪ1֡һδźŲɼһ֡ͼ +// : hCamera ľCameraInitá +// iCount һδɼ֡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetTriggerCount)( + CameraHandle hCamera, + INT iCount + ); + +/******************************************************/ +// : CameraGetTriggerCount +// : һδ֡ +// : hCamera ľCameraInitá +// INT* piCount +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetTriggerCount)( + CameraHandle hCamera, + INT* piCount + ); + +/******************************************************/ +// : CameraSoftTrigger +// : ִһִк󣬻ᴥCameraSetTriggerCount +// ָ֡ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSoftTrigger)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraSetTriggerMode +// : Ĵģʽ +// : hCamera ľCameraInitá +// iModeSel ģʽѡš趨ģʽ +// CameraGetCapabilityȡο +// CameraDefine.htSdkCameraCapbilityĶ塣 +// һ0ʾɼģʽ1ʾ +// ģʽ2ʾӲģʽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetTriggerMode)( + CameraHandle hCamera, + int iModeSel + ); + +/******************************************************/ +// : CameraGetTriggerMode +// : Ĵģʽ +// : hCamera ľCameraInitá +// piModeSel ָ룬صǰѡģʽš +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetTriggerMode)( + CameraHandle hCamera, + INT* piModeSel + ); + +/******************************************************/ +// : CameraSetStrobeMode +// : IOŶϵSTROBEźšźſƿƣҲⲿеſơ +// : hCamera ľCameraInitá +// iMode ΪSTROBE_SYNC_WITH_TRIG_AUTO ʹźͬعʱԶSTROBEźš +// ʱЧԿ(CameraSetStrobePolarity) +// ΪSTROBE_SYNC_WITH_TRIG_MANUALʱʹźͬSTROBEʱָʱ(CameraSetStrobeDelayTime) +// ٳָʱ(CameraSetStrobePulseWidth) +// ЧԿ(CameraSetStrobePolarity) +// ΪSTROBE_ALWAYS_HIGHʱSTROBEźźΪ, +// ΪSTROBE_ALWAYS_LOWʱSTROBEźźΪ, +// +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetStrobeMode)( + CameraHandle hCamera, + INT iMode + ); + +/******************************************************/ +// : CameraGetStrobeMode +// : ߵǰSTROBEźõģʽ +// : hCamera ľCameraInitá +// piMode ָ룬STROBE_SYNC_WITH_TRIG_AUTO,STROBE_SYNC_WITH_TRIG_MANUALSTROBE_ALWAYS_HIGHSTROBE_ALWAYS_LOW +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetStrobeMode)( + CameraHandle hCamera, + INT* piMode + ); + +/******************************************************/ +// : CameraSetStrobeDelayTime +// : STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúԴźʱʱ䡣 +// : hCamera ľCameraInitá +// uDelayTimeUs Դźŵʱʱ䣬λΪusΪ0Ϊ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetStrobeDelayTime)( + CameraHandle hCamera, + UINT uDelayTimeUs + ); + +/******************************************************/ +// : CameraGetStrobeDelayTime +// : STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúԴźʱʱ䡣 +// : hCamera ľCameraInitá +// upDelayTimeUs ָ룬ʱʱ䣬λus +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetStrobeDelayTime)( + CameraHandle hCamera, + UINT* upDelayTimeUs + ); + +/******************************************************/ +// : CameraSetStrobePulseWidth +// : STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúȡ +// : hCamera ľCameraInitá +// uTimeUs ĿȣλΪʱus +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetStrobePulseWidth)( + CameraHandle hCamera, + UINT uTimeUs + ); + +/******************************************************/ +// : CameraGetStrobePulseWidth +// : STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúȡ +// : hCamera ľCameraInitá +// upTimeUs ָ룬ȡλΪʱus +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetStrobePulseWidth)( + CameraHandle hCamera, + UINT* upTimeUs + ); + + +/******************************************************/ +// : CameraSetStrobePolarity +// : STROBEźŴSTROBE_SYNC_WITH_TRIGʱͨúЧƽļԡĬΪЧźŵʱSTROBEźűߡ +// : hCamera ľCameraInitá +// iPolarity STROBEźŵļԣ0Ϊ͵ƽЧ1ΪߵƽЧĬΪߵƽЧ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetStrobePolarity)( + CameraHandle hCamera, + INT iPolarity + ); + +/******************************************************/ +// : CameraGetStrobePolarity +// : ǰSTROBEźŵЧԡĬΪߵƽЧ +// : hCamera ľCameraInitá +// ipPolarity ָ룬STROBEźŵǰЧԡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetStrobePolarity)( + CameraHandle hCamera, + INT* ipPolarity + ); + +/******************************************************/ +// : CameraSetExtTrigSignalType +// : ⴥźŵࡣϱء±ء߸ߡ͵ƽʽ +// : hCamera ľCameraInitá +// iType ⴥźֵ࣬οCameraDefine.h +// emExtTrigSignalͶ塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetExtTrigSignalType)( + CameraHandle hCamera, + INT iType + ); + +/******************************************************/ +// : CameraGetExtTrigSignalType +// : ǰⴥźŵࡣ +// : hCamera ľCameraInitá +// ipType ָ룬ⴥźֵ࣬οCameraDefine.h +// emExtTrigSignalͶ塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetExtTrigSignalType)( + CameraHandle hCamera, + INT* ipType + ); + +/******************************************************/ +// : CameraSetExtTrigShutterType +// : ⴥģʽ£ŵķʽĬΪ׼ŷʽ +// ֹŵCMOS֧GRRʽ +// : hCamera ľCameraInitá +// iType ⴥŷʽοCameraDefine.hemExtTrigShutterMode͡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetExtTrigShutterType)( + CameraHandle hCamera, + INT iType + ); + +/******************************************************/ +// : CameraSetExtTrigShutterType +// : ⴥģʽ£ŵķʽĬΪ׼ŷʽ +// ֹŵCMOS֧GRRʽ +// : hCamera ľCameraInitá +// ipType ָ룬صǰ趨ⴥŷʽֵο +// CameraDefine.hemExtTrigShutterMode͡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetExtTrigShutterType)( + CameraHandle hCamera, + INT* ipType + ); + +/******************************************************/ +// : CameraSetExtTrigDelayTime +// : ⴥźʱʱ䣬ĬΪ0λΪ΢롣 +// õֵuDelayTimeUsΪ0ʱյⴥźź󣬽ʱuDelayTimeUs΢ٽͼ񲶻 +// : hCamera ľCameraInitá +// uDelayTimeUs ʱʱ䣬λΪ΢룬ĬΪ0. +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetExtTrigDelayTime)( + CameraHandle hCamera, + UINT uDelayTimeUs + ); + +/******************************************************/ +// : CameraGetExtTrigDelayTime +// : õⴥźʱʱ䣬ĬΪ0λΪ΢롣 +// : hCamera ľCameraInitá +// UINT* upDelayTimeUs +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetExtTrigDelayTime)( + CameraHandle hCamera, + UINT* upDelayTimeUs + ); + +/******************************************************/ +// : CameraSetExtTrigJitterTime +// : ⴥźŵʱ䡣ĬΪ0λΪ΢롣 +// : hCamera ľCameraInitá +// UINT uTimeUs +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetExtTrigJitterTime)( + CameraHandle hCamera, + UINT uTimeUs + ); + +/******************************************************/ +// : CameraGetExtTrigJitterTime +// : õⴥʱ䣬ĬΪ0.λΪ΢ +// : hCamera ľCameraInitá +// UINT* upTimeUs +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetExtTrigJitterTime)( + CameraHandle hCamera, + UINT* upTimeUs + ); + +/******************************************************/ +// : CameraGetExtTrigCapability +// : ⴥ +// : hCamera ľCameraInitá +// puCapabilityMask ָ룬ظⴥ룬οCameraDefine.h +// EXT_TRIG_MASK_ ͷĺ궨塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetExtTrigCapability)( + CameraHandle hCamera, + UINT* puCapabilityMask + ); + +typedef CameraSdkStatus (__stdcall *_CameraPauseLevelTrigger)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraGetResolutionForSnap +// : ץģʽµķֱѡš +// : hCamera ľCameraInitá +// pImageResolution ָ룬ץģʽķֱʡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetResolutionForSnap)( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution + ); + +/******************************************************/ +// : CameraSetResolutionForSnap +// : ץģʽͼķֱʡ +// : hCamera ľCameraInitá +// pImageResolution pImageResolution->iWidth +// pImageResolution->iHeightΪ0 +// ʾ趨Ϊ浱ǰԤֱʡץ +// µͼķֱʻ͵ǰ趨 +// Ԥֱһ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetResolutionForSnap)( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution + ); + +/******************************************************/ +// : CameraCustomizeResolution +// : 򿪷ֱԶ壬ͨӻķʽ +// һԶֱʡ +// : hCamera ľCameraInitá +// pImageCustom ָ룬Զķֱʡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraCustomizeResolution)( + CameraHandle hCamera, + tSdkImageResolution* pImageCustom + ); + +/******************************************************/ +// : CameraCustomizeReferWin +// : 򿪲οԶ塣ͨӻķʽ +// һԶ崰ڵλáһԶƽ +// ԶعIJοڡ +// : hCamera ľCameraInitá +// iWinType ҪɵIJοڵ;0,Զعοڣ +// 1,ƽοڡ +// hParent øúĴڵľΪNULL +// piHOff ָ룬Զ崰ڵϽǺꡣ +// piVOff ָ룬Զ崰ڵϽꡣ +// piWidth ָ룬Զ崰ڵĿȡ +// piHeight ָ룬Զ崰ڵĸ߶ȡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraCustomizeReferWin)( + CameraHandle hCamera, + INT iWinType, + HWND hParent, + INT* piHOff, + INT* piVOff, + INT* piWidth, + INT* piHeight + ); + +/******************************************************/ +// : CameraShowSettingPage +// : ôʾ״̬ȵCameraCreateSettingPage +// ɹôں󣬲ܵñ +// ʾ +// : hCamera ľCameraInitá +// bShow TRUEʾ;FALSEء +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraShowSettingPage)( + CameraHandle hCamera, + BOOL bShow + ); + +/******************************************************/ +// : CameraCreateSettingPage +// : ôڡøúSDKڲ +// ôڣʡȥ¿ +// ýʱ䡣ǿҽʹʹøú +// SDKΪôڡ +// : hCamera ľCameraInitá +// hParent ӦóڵľΪNULL +// pWinText ַָ룬ʾı +// pCallbackFunc ϢĻصӦ¼ʱ +// pCallbackFuncָĺᱻã +// л˲֮IJʱpCallbackFunc +// صʱڲָϢ͡ +// ԷԼĽɵUI +// ֮ͬòΪNULL +// pCallbackCtx صĸӲΪNULLpCallbackCtx +// pCallbackFuncصʱΪ֮һ롣 +// ʹøòһЩжϡ +// uReserved ԤΪ0 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraCreateSettingPage)( + CameraHandle hCamera, + HWND hParent, + char* pWinText, + CAMERA_PAGE_MSG_PROC pCallbackFunc, + PVOID pCallbackCtx, + UINT uReserved + ); + +/******************************************************/ +// : CameraSetActiveSettingSubPage +// : ôڵļҳ档ôж +// ҳ湹ɣú趨ǰһҳ +// Ϊ״̬ʾǰˡ +// : hCamera ľCameraInitá +// index ҳšοCameraDefine.h +// PROP_SHEET_INDEXĶ塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetActiveSettingSubPage)( + CameraHandle hCamera, + INT index + ); + +typedef CameraSdkStatus (__stdcall *_CameraSetSettingPageParent)( + CameraHandle hCamera, + HWND hParentWnd, + DWORD Flags + ); + +typedef CameraSdkStatus (__stdcall *_CameraGetSettingPageHWnd)( + CameraHandle hCamera, + HWND* hWnd + ); + +/******************************************************/ +// : CameraSpecialControl +// : һЩõĽӿڣοʱһ㲻Ҫ +// á +// : hCamera ľCameraInitá +// dwCtrlCode 롣 +// dwParam 룬ͬdwCtrlCodeʱ岻ͬ +// lpData ӲͬdwCtrlCodeʱ岻ͬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSpecialControl)( + CameraHandle hCamera, + DWORD dwCtrlCode, + DWORD dwParam, + LPVOID lpData + ); + +/******************************************************/ +// : CameraGetFrameStatistic +// : ֡ʵͳϢ֡Ͷ֡ +// : hCamera ľCameraInitá +// psFrameStatistic ָ룬ͳϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetFrameStatistic)( + CameraHandle hCamera, + tSdkFrameStatistic* psFrameStatistic + ); + +/******************************************************/ +// : CameraSetNoiseFilter +// : ͼģʹ״̬ +// : hCamera ľCameraInitá +// bEnable TRUEʹܣFALSEֹ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetNoiseFilter)( + CameraHandle hCamera, + BOOL bEnable + ); + +/******************************************************/ +// : CameraGetNoiseFilterState +// : ͼģʹ״̬ +// : hCamera ľCameraInitá +// *pEnable ָ룬״̬TRUEΪʹܡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetNoiseFilterState)( + CameraHandle hCamera, + BOOL* pEnable + ); + + +/******************************************************/ +// : CameraRstTimeStamp +// : λͼɼʱ0ʼ +// : CameraHandle hCamera +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraRstTimeStamp)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraGetCapabilityEx +// : ṹ塣ýṹа +// õĸֲķΧϢغIJ +// أҲڶ̬ý档 +// : sDeviceModel ͺţɨблȡ +// pCameraInfo ָ룬ظĽṹ塣 +// PVOID hCameraHandle +// tSdkCameraCapbilityCameraDefine.hж塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetCapabilityEx)( + char* sDeviceModel, + tSdkCameraCapbility* pCameraInfo, + PVOID hCameraHandle + ); + +/******************************************************/ +// : CameraFreeCapabilityEx +// : +// أҲڶ̬ý档 +// : sDeviceModel ͺţɨблȡ +// hCameraHandle ָ +// tSdkCameraCapbilityCameraDefine.hж塣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraFreeCapabilityEx)( + char* sDeviceModel, + PVOID hCameraHandle + ); + + + +/******************************************************/ +// : CameraSaveUserData +// : ûԶݱ浽ķԴ洢С +// ÿͺŵֵ֧û󳤶Ȳһ +// Դ豸лȡóϢ +// : hCamera ľCameraInitá +// uStartAddr ʼַ0ʼ +// pbData ݻָ +// ilen дݵijȣilen + uStartAddr +// Сû󳤶 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSaveUserData)( + CameraHandle hCamera, + UINT uStartAddr, + BYTE *pbData, + int ilen + ); + +/******************************************************/ +// : CameraLoadUserData +// : ķԴ洢жȡûԶݡ +// ÿͺŵֵ֧û󳤶Ȳһ +// Դ豸лȡóϢ +// : hCamera ľCameraInitá +// uStartAddr ʼַ0ʼ +// pbData ݻָ룬ضݡ +// ilen ȡݵijȣilen + uStartAddr +// Сû󳤶 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraLoadUserData)( + CameraHandle hCamera, + UINT uStartAddr, + BYTE *pbData, + int ilen + ); + + + +/******************************************************/ +// : CameraGetFriendlyName +// : ȡûԶ豸dzơ +// : hCamera ľCameraInitá +// pName ָ룬ָ0βַ +// 豸dzƲ32ֽڣ˸ָ +// ָĻڵ32ֽڿռ䡣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetFriendlyName)( + CameraHandle hCamera, + char* pName + ); + + +/******************************************************/ +// : CameraSetFriendlyName +// : ûԶ豸dzơ +// : hCamera ľCameraInitá +// pName ָ룬ָ0βַ +// 豸dzƲ32ֽڣ˸ָ +// ַָСڵ32ֽڿռ䡣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetFriendlyName)( + CameraHandle hCamera, + char* pName + ); + + +/******************************************************/ +// : CameraSdkGetVersionString +// : +// : pVersionString ָ룬SDK汾ַ +// ָָĻС +// 32ֽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSdkGetVersionString)( + char* pVersionString + ); + +/******************************************************/ +// : CameraCheckFwUpdate +// : ̼汾ǷҪ +// : hCamera ľCameraInitá +// pNeedUpdate ָ룬ع̼״̬TRUEʾҪ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraCheckFwUpdate)( + CameraHandle hCamera, + BOOL* pNeedUpdate + ); + +/******************************************************/ +// : CameraGetFirmwareVersion +// : ù̼汾ַ +// : hCamera ľCameraInitá +// pVersion ָһ32ֽڵĻ +// ع̼İ汾ַ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetFirmwareVersion)( + CameraHandle hCamera, + char* pVersion + ); + +/******************************************************/ +// : CameraGetFirmwareVision +// : ù̼汾ַ +// : hCamera ľCameraInitá +// pVersion ָһ32ֽڵĻ +// ع̼İ汾ַ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetFirmwareVision)( + CameraHandle hCamera, + char* pVersion + ); + +/******************************************************/ +// : CameraGetEnumInfo +// : ָ豸öϢ +// : hCamera ľCameraInitá +// pCameraInfo ָ룬豸öϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetEnumInfo)( + CameraHandle hCamera, + tSdkCameraDevInfo* pCameraInfo + ); + +/******************************************************/ +// : CameraGetInerfaceVersion +// : ָ豸ӿڵİ汾 +// : hCamera ľCameraInitá +// pVersion ָһ32ֽڵĻؽӿڰ汾ַ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetInerfaceVersion)( + CameraHandle hCamera, + char* pVersion + ); + +/******************************************************/ +// : CameraSetIOState +// : ָIOĵƽ״̬IOΪIO +// ԤɱIOĸtSdkCameraCapbility +// iOutputIoCounts +// : hCamera ľCameraInitá +// iOutputIOIndex IOţ0ʼ +// uState Ҫ趨״̬1Ϊߣ0Ϊ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetIOState)( + CameraHandle hCamera, + INT iOutputIOIndex, + UINT uState + ); + +/******************************************************/ +// : CameraGetIOState +// : ָIOĵƽ״̬IOΪIO +// ԤɱIOĸtSdkCameraCapbility +// iInputIoCounts +// : hCamera ľCameraInitá +// iInputIOIndex IOţ0ʼ +// puState ָ룬IO״̬,1Ϊߣ0Ϊ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetIOState)( + CameraHandle hCamera, + INT iInputIOIndex, + UINT* puState + ); + +/******************************************************/ +// : CameraSetInPutIOMode +// : IOģʽ +// ԤɱIOĸtSdkCameraCapbility +// iInputIoCounts +// : hCamera ľCameraInitá +// iInputIOIndex IOţ0ʼ +// iMode IOģʽ,οCameraDefine.hemCameraGPIOMode +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetInPutIOMode)( + CameraHandle hCamera, + INT iInputIOIndex, + INT iMode + ); + +/******************************************************/ +// : CameraSetOutPutIOMode +// : IOģʽ +// ԤɱIOĸtSdkCameraCapbility +// iOutputIoCounts +// : hCamera ľCameraInitá +// iOutputIOIndex IOţ0ʼ +// iMode IOģʽ,οCameraDefine.hemCameraGPIOMode +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetOutPutIOMode)( + CameraHandle hCamera, + INT iOutputIOIndex, + INT iMode + ); + +/******************************************************/ +// : CameraSetOutPutPWM +// : PWMIJ +// ԤɱIOĸtSdkCameraCapbility +// iOutputIoCounts +// : hCamera ľCameraInitá +// iOutputIOIndex IOţ0ʼ +// iCycle PWMڣλ(us) +// uDuty ռñȣȡֵ1%~99% +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetOutPutPWM)( + CameraHandle hCamera, + INT iOutputIOIndex, + UINT iCycle, + UINT uDuty + ); + +/******************************************************/ +// : CameraSetBayerDecAlgorithm +// : Bayerתɫ㷨 +// : hCamera ľCameraInitá +// iIspProcessor ѡִи㷨Ķ󣬲οCameraDefine.h +// emSdkIspProcessorĶ +// iAlgorithmSel Ҫѡ㷨š0ʼֵtSdkCameraCapbility +// iBayerDecAlmSwDesciBayerDecAlmHdDesc +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetBayerDecAlgorithm)( + CameraHandle hCamera, + INT iIspProcessor, + INT iAlgorithmSel + ); + +/******************************************************/ +// : CameraGetBayerDecAlgorithm +// : Bayerתɫѡ㷨 +// : hCamera ľCameraInitá +// iIspProcessor ѡִи㷨Ķ󣬲οCameraDefine.h +// emSdkIspProcessorĶ +// piAlgorithmSel صǰѡ㷨š0ʼֵtSdkCameraCapbility +// iBayerDecAlmSwDesciBayerDecAlmHdDesc +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetBayerDecAlgorithm)( + CameraHandle hCamera, + INT iIspProcessor, + INT* piAlgorithmSel + ); + +/******************************************************/ +// : CameraSetBlackLevel +// : ͼĺڵƽ׼ĬֵΪ0 +// : hCamera ľCameraInitá +// iBlackLevel Ҫ趨ĵƽֵΧΪ0128 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetBlackLevel) + ( + CameraHandle hCamera, + INT iBlackLevel + ); + +/******************************************************/ +// : CameraGetBlackLevel +// : ͼĺڵƽ׼ĬֵΪ0 +// : hCamera ľCameraInitá +// piBlackLevel صǰĺڵƽֵΧΪ0128 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetBlackLevel) + ( + CameraHandle hCamera, + INT* piBlackLevel + ); + + +/******************************************************/ +// : CameraSetWhiteLevel +// : ͼİ׵ƽ׼ĬֵΪ255 +// : hCamera ľCameraInitá +// iWhiteLevel Ҫ趨ĵƽֵΧΪ128255 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetWhiteLevel) + ( + CameraHandle hCamera, + INT iWhiteLevel + ); + + + +/******************************************************/ +// : CameraGetWhiteLevel +// : ͼİ׵ƽ׼ĬֵΪ255 +// : hCamera ľCameraInitá +// piWhiteLevel صǰİ׵ƽֵΧΪ128255 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetWhiteLevel) + ( + CameraHandle hCamera, + INT* piWhiteLevel + ); + + +/******************************************************/ +// : CameraSetIspOutFormat +// : CameraGetImageBufferͼʽ֧ +// CAMERA_MEDIA_TYPE_MONO8CAMERA_MEDIA_TYPE_RGB8CAMERA_MEDIA_TYPE_RGBA8 +// (CameraDefine.hж)ֱ֣Ӧ8λҶͼ2432λɫͼ +// : hCamera ľCameraInitá +// uFormat Ҫ趨ʽCAMERA_MEDIA_TYPE_MONO8CAMERA_MEDIA_TYPE_RGB8CAMERA_MEDIA_TYPE_RGBA8 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetIspOutFormat) + ( + CameraHandle hCamera, + UINT uFormat + ); + +/******************************************************/ +// : CameraGetIspOutFormat +// : CameraGetImageBufferͼʽ֧ +// CAMERA_MEDIA_TYPE_MONO8CAMERA_MEDIA_TYPE_RGB8CAMERA_MEDIA_TYPE_RGBA8 +// (CameraDefine.hж)ֱ֣Ӧ8λҶͼ2432λɫͼ +// : hCamera ľCameraInitá +// puFormat صǰ趨ĸʽCAMERA_MEDIA_TYPE_MONO8CAMERA_MEDIA_TYPE_RGB8CAMERA_MEDIA_TYPE_RGBA8 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetIspOutFormat) + ( + CameraHandle hCamera, + UINT* puFormat + ); + +/******************************************************/ +// : CameraGetErrorString +// : ôӦַ +// : iStatusCode 롣(CameraStatus.h) +// ֵ : ɹʱشӦַ׵ַ; +// 򷵻NULL +/******************************************************/ +typedef char* (__stdcall *_CameraGetErrorString)( + CameraSdkStatus iStatusCode + ); + +/******************************************************/ +// : CameraGetImageBufferEx2 +// : һ֡ͼݡýӿڻõͼǾRGBʽúú +// Ҫ CameraReleaseImageBuffer ͷţҲҪfree֮ĺͷ +// ͷŸúصͼݻ +// : hCamera ľCameraInitá +// pImageData ͼݵĻСuOutFormatָĸʽƥ䣬ݻ +// piWidth ָ룬ͼĿ +// piHeight ָ룬ͼĸ߶ +// wTimes ץȡͼijʱʱ䡣λ롣 +// wTimesʱڻδͼú +// ᷵سʱϢ +// ֵ : ɹʱRGBݻ׵ַ; +// 򷵻0 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetImageBufferEx2)( + CameraHandle hCamera, + BYTE* pImageData, + UINT uOutFormat, + int* piWidth, + int* piHeight, + UINT wTimes + ); + +/******************************************************/ +// : CameraGetImageBufferEx3 +// : һ֡ͼݡýӿڻõͼǾRGBʽúú +// Ҫ CameraReleaseImageBuffer ͷ. +// uOutFormat 0 : 8 BIT gray 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +// : hCamera ľCameraInitá +// pImageData ͼݵĻСuOutFormatָĸʽƥ䣬ݻ +// piWidth ָ룬ͼĿ +// piHeight ָ룬ͼĸ߶ +// puTimeStamp ޷Σͼʱ +// UINT wTimes ץȡͼijʱʱ䡣λ롣 +// wTimes ʱڻδͼú᷵سʱϢ +// ֵ : ɹʱRGBݻ׵ַ; +// 򷵻0 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetImageBufferEx3)( + CameraHandle hCamera, + BYTE*pImageData, + UINT uOutFormat, + int *piWidth, + int *piHeight, + UINT* puTimeStamp, + UINT wTimes + ); + +/******************************************************/ +// : CameraGetCapabilityEx2 +// : øһЩԡ +// : hCamera ľCameraInitá +// pMaxWidth ظֱʵĿ +// pMaxHeight ظֱʵĸ߶ +// pbColorCamera ظǷDzɫ1ʾɫ0ʾڰ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetCapabilityEx2)( + CameraHandle hCamera, + int* pMaxWidth, + int* pMaxHeight, + int* pbColorCamera + ); + + +/******************************************************/ +// : CameraReConnect +// : 豸USB豸ߺ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraReConnect)( + CameraHandle hCamera + ); + + +/******************************************************/ +// : CameraConnectTest +// : ״̬ڼǷ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraConnectTest)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraSetLedEnable +// : LEDʹ״̬LEDͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index LEDƵţ0ʼֻһɿȵLEDòΪ0 +// enable ʹ״̬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetLedEnable)( + CameraHandle hCamera, + int index, + BOOL enable + ); + +/******************************************************/ +// : CameraGetLedEnable +// : LEDʹ״̬LEDͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index LEDƵţ0ʼֻһɿȵLEDòΪ0 +// enable ָ룬LEDʹ״̬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetLedEnable)( + CameraHandle hCamera, + int index, + BOOL* enable + ); + +/******************************************************/ +// : CameraSetLedOnOff +// : LED״̬LEDͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index LEDƵţ0ʼֻһɿȵLEDòΪ0 +// onoff LED״̬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetLedOnOff)( + CameraHandle hCamera, + int index, + BOOL onoff + ); + +/******************************************************/ +// : CameraGetLedOnOff +// : LED״̬LEDͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index LEDƵţ0ʼֻһɿȵLEDòΪ0 +// onoff ָ룬LED״̬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetLedOnOff)( + CameraHandle hCamera, + int index, + BOOL* onoff + ); + +/******************************************************/ +// : CameraSetLedDuration +// : LEDʱ䣬LEDͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index LEDƵţ0ʼֻһɿȵLEDòΪ0 +// duration LEDʱ䣬λ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetLedDuration)( + CameraHandle hCamera, + int index, + UINT duration + ); + +/******************************************************/ +// : CameraGetLedDuration +// : LEDʱ䣬LEDͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index LEDƵţ0ʼֻһɿȵLEDòΪ0 +// duration ָ룬LEDʱ䣬λ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetLedDuration)( + CameraHandle hCamera, + int index, + UINT* duration + ); + +/******************************************************/ +// : CameraSetLedLightless +// : LEDȣLEDͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index LEDƵţ0ʼֻһɿȵLEDòΪ0 +// uLightless LEDֵΧ0255. 0ʾرգ255 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetLedBrightness)( + CameraHandle hCamera, + int index, + UINT uLightless + ); + +/******************************************************/ +// : CameraGetLedLightless +// : LEDȣLEDͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index LEDƵţ0ʼֻһɿȵLEDòΪ0 +// uLightless ָ룬LEDֵΧ0255. 0ʾرգ255 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetLedBrightness)( + CameraHandle hCamera, + int index, + UINT* uLightless + ); + + +/******************************************************/ +// : CameraEnableTransferRoi +// : ʹֹܻ߽Ķ书ܣùܵͺţ˺ش룬ʾ֧֡ +// ùҪ˽ɼзָֻ֣Ķߴ֡ʡ +// 䵽PCϺ󣬻Զƴӳ棬ûбIJ֣úɫ䡣 +// : hCamera ľCameraInitá +// index ROIţ0ʼ +// uEnableMask ʹ״̬룬ӦıλΪ1ʾʹܡ0ΪֹĿǰSDK֧4ɱ༭indexΧΪ03bit0 bit1bit2bit34ʹ״̬ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֶ֧ROIͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraEnableTransferRoi)( + CameraHandle hCamera, + UINT uEnableMask + ); + + +/******************************************************/ +// : CameraSetTransferRoi +// : IJüˣͼӴϱɼ󣬽ᱻüָͣ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index ROIţ0ʼ +// X1,Y1 ROIϽ +// X2,Y2 ROIϽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֶ֧ROIͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetTransferRoi)( + CameraHandle hCamera, + int index, + UINT X1, + UINT Y1, + UINT X2, + UINT Y2 + ); + + +/******************************************************/ +// : CameraGetTransferRoi +// : IJüˣͼӴϱɼ󣬽ᱻüָͣ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// index ROIţ0ʼ +// pX1,pY1 ROIϽ +// pX2,pY2 ROIϽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֶ֧ROIͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetTransferRoi)( + CameraHandle hCamera, + int index, + UINT* pX1, + UINT* pY1, + UINT* pX2, + UINT* pY2 + ); + +/******************************************************/ +// : CameraAlignMalloc +// : һζڴռ䡣ܺmallocƣ +// Ƿصڴalignָֽġ +// : size ռĴС +// align ַֽ +// ֵ : ɹʱط0ֵʾڴ׵ַʧܷNULL +/******************************************************/ + +typedef BYTE* (__stdcall *_CameraAlignMalloc)( + int size, + int align + ); + +/******************************************************/ +// : CameraAlignFree +// : ͷCameraAlignMallocڴռ䡣 +// : membuffer CameraAlignMallocصڴ׵ַ +// ֵ : ޡ +/******************************************************/ +typedef void (__stdcall *_CameraAlignFree)( + BYTE* membuffer + ); + + +/******************************************************/ +// : CameraSetAutoConnect +// : Զʹ +// : hCamera ľCameraInitá +// bEnable ʹλTRUEʱSDKڲԶǷߣߺԼ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֵ֧ͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetAutoConnect)( + CameraHandle hCamera, + BOOL bEnable + ); + +/******************************************************/ +// : CameraGetAutoConnect +// : ȡԶʹ +// : hCamera ľCameraInitá +// pbEnable ʹ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֵ֧ͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetAutoConnect)(CameraHandle hCamera,BOOL *pbEnable); + +/******************************************************/ +// : CameraGetReConnectCounts +// : ԶĴǰCameraSetAutoConnect ʹԶܡĬʹܵġ +// : hCamera ľCameraInitá +// puCounts صԶĴ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֵ֧ͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetReConnectCounts)( + CameraHandle hCamera, + UINT* puCounts + ); + +/******************************************************/ +// : CameraSetSingleGrabMode +// : ʹܵ֡ץȡģʽ +// : hCamera ľCameraInitá +// bEnable ʹܵ֡ץȡģʽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֵ֧ͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetSingleGrabMode)(CameraHandle hCamera, BOOL bEnable); + +/******************************************************/ +// : CameraGetSingleGrabMode +// : ĵ֡ץȡģʽ +// : hCamera ľCameraInitá +// pbEnable ĵ֡ץȡģʽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֵ֧ͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetSingleGrabMode)(CameraHandle hCamera, BOOL* pbEnable); + +/******************************************************/ +// : CameraRestartGrab +// : ڵ֡ץȡģʽʱÿɹץȡһ֡SDKͣ״̬ô˺ʹSDK˳ͣ״̬ʼץȡһ֡ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// ڲֵ֧ͺţú᷵ CAMERA_STATUS_NOT_SUPPORTED(-4) ʾ֧ +// 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraRestartGrab)(CameraHandle hCamera); + +/******************************************************/ +// : CameraDrawText +// : ͼл +// : pRgbBuffer ͼݻ +// pFrInfo ͼ֡ͷϢ +// pFontFileName ļ +// FontWidth +// FontHeight ߶ +// pText Ҫ +// (Left, Top, Width, Height) ֵ +// TextColor ɫRGB +// uFlags ־,emCameraDrawTextFlagsеĶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraDrawText)( + BYTE* pRgbBuffer, + tSdkFrameHead* pFrInfo, + char const* pFontFileName, + UINT FontWidth, + UINT FontHeight, + char const* pText, + INT Left, + INT Top, + UINT Width, + UINT Height, + UINT TextColor, + UINT uFlags + ); + +/******************************************************/ +// : CameraGigeGetIp +// : ȡGIGEIPַ +// : pCameraInfo 豸ϢCameraEnumerateDeviceá +// CamIp IP(ע⣺뱣֤Ļڵ16ֽ) +// CamMask (ע⣺뱣֤Ļڵ16ֽ) +// CamGateWay (ע⣺뱣֤Ļڵ16ֽ) +// EtIp IP(ע⣺뱣֤Ļڵ16ֽ) +// EtMask (ע⣺뱣֤Ļڵ16ֽ) +// EtGateWay (ע⣺뱣֤Ļڵ16ֽ) +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGigeGetIp)( + tSdkCameraDevInfo* pCameraInfo, + char* CamIp, + char* CamMask, + char* CamGateWay, + char* EtIp, + char* EtMask, + char* EtGateWay + ); + +/******************************************************/ +// : CameraGigeSetIp +// : GIGEIPַ +// : pCameraInfo 豸ϢCameraEnumerateDeviceá +// Ip IP(磺192.168.1.100) +// SubMask (磺255.255.255.0) +// GateWay (磺192.168.1.1) +// bPersistent TRUE: Ϊ̶IPFALSEԶIPԲIp, SubMask, GateWay +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGigeSetIp)( + tSdkCameraDevInfo* pCameraInfo, + char const* Ip, + char const* SubMask, + char const* GateWay, + BOOL bPersistent + ); + +/******************************************************/ +// : CameraGigeGetMac +// : ȡGIGEMACַ +// : pCameraInfo 豸ϢCameraEnumerateDeviceá +// CamMac MAC(ע⣺뱣֤Ļڵ18ֽ) +// EtMac MAC(ע⣺뱣֤Ļڵ18ֽ) +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGigeGetMac)( + tSdkCameraDevInfo* pCameraInfo, + char* CamMac, + char* EtMac + ); + +/******************************************************/ +// : CameraEnableFastResponse +// : ʹܿӦ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraEnableFastResponse)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraSetCorrectDeadPixel +// : ʹܻ +// : hCamera ľCameraInitá +// bEnable TRUE: ʹܻ FALSE: رջ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetCorrectDeadPixel)( + CameraHandle hCamera, + BOOL bEnable + ); + +/******************************************************/ +// : CameraGetCorrectDeadPixel +// : ȡʹ״̬ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetCorrectDeadPixel)( + CameraHandle hCamera, + BOOL* pbEnable + ); + +/******************************************************/ +// : CameraFlatFieldingCorrectSetEnable +// : ʹƽУ +// : hCamera ľCameraInitá +// bEnable TRUE: ʹƽУ FALSE: رƽУ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraFlatFieldingCorrectSetEnable)( + CameraHandle hCamera, + BOOL bEnable + ); + +/******************************************************/ +// : CameraFlatFieldingCorrectGetEnable +// : ȡƽУʹ״̬ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraFlatFieldingCorrectGetEnable)( + CameraHandle hCamera, + BOOL* pbEnable + ); + +/******************************************************/ +// : CameraFlatFieldingCorrectSetParameter +// : ƽУ +// : hCamera ľCameraInitá +// pDarkFieldingImage ͼƬ +// pDarkFieldingFrInfo ͼƬϢ +// pLightFieldingImage ͼƬ +// pLightFieldingFrInfo ͼƬϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraFlatFieldingCorrectSetParameter)( + CameraHandle hCamera, + BYTE const* pDarkFieldingImage, + tSdkFrameHead const* pDarkFieldingFrInfo, + BYTE const* pLightFieldingImage, + tSdkFrameHead const* pLightFieldingFrInfo + ); + +/******************************************************/ +// : CameraFlatFieldingCorrectSaveParameterToFile +// : ƽУļ +// : hCamera ľCameraInitá +// pszFileName ļ· +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraFlatFieldingCorrectSaveParameterToFile)( + CameraHandle hCamera, + char const* pszFileName + ); + +/******************************************************/ +// : CameraFlatFieldingCorrectLoadParameterFromFile +// : ļмƽУ +// : hCamera ľCameraInitá +// pszFileName ļ· +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraFlatFieldingCorrectLoadParameterFromFile)( + CameraHandle hCamera, + char const* pszFileName + ); + +/******************************************************/ +// : CameraCommonCall +// : һЩ⹦ܵãοʱһ㲻Ҫá +// : hCamera ľCameraInitá +// pszCall ܼ +// pszResult ýͬpszCallʱ岻ͬ +// uResultBufSize pszResultָĻֽڴС +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraCommonCall)( + CameraHandle hCamera, + char const* pszCall, + char* pszResult, + UINT uResultBufSize + ); + +/******************************************************/ +// : CameraSetDenoise3DParams +// : 3D +// : hCamera ľCameraInitá +// bEnable û +// nCount ʹüͼƬн(2-8) +// Weights Ȩ +// 統ʹ3ͼƬнԴ3(0.3,0.3,0.4)һͼƬȨشǰ2 +// ҪʹȨأ0ʾͼƬȨͬ(0.33,0.33,0.33) +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetDenoise3DParams)( + CameraHandle hCamera, + BOOL bEnable, + int nCount, + float *Weights + ); + +/******************************************************/ +// : CameraGetDenoise3DParams +// : ȡǰ3D +// : hCamera ľCameraInitá +// bEnable û +// nCount ʹ˼ͼƬн +// bUseWeight Ƿʹ˽Ȩ +// Weights Ȩ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetDenoise3DParams)( + CameraHandle hCamera, + BOOL *bEnable, + int *nCount, + BOOL *bUseWeight, + float *Weights + ); + +/******************************************************/ +// : CameraManualDenoise3D +// : һ֡һν봦 +// : InFramesHead ֡ͷ +// InFramesData ֡ +// nCount ֡ +// Weights Ȩ +// 統ʹ3ͼƬнԴ3(0.3,0.3,0.4)һͼƬȨشǰ2 +// ҪʹȨأ0ʾͼƬȨͬ(0.33,0.33,0.33) +// OutFrameHead ֡ͷ +// OutFrameData ֡ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraManualDenoise3D)( + tSdkFrameHead *InFramesHead, + BYTE **InFramesData, + int nCount, + float *Weights, + tSdkFrameHead *OutFrameHead, + BYTE *OutFrameData + ); + +/******************************************************/ +// : CameraCustomizeDeadPixels +// : 򿪻༭ +// : hCamera ľCameraInitá +// hParent øúĴڵľΪNULL +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraCustomizeDeadPixels)( + CameraHandle hCamera, + HWND hParent + ); + +/******************************************************/ +// : CameraReadDeadPixels +// : ȡ +// : hCamera ľCameraInitá +// pRows y +// pCols x +// pNumPixel ʱʾлĴСʱʾлзصĻ +// pRowspColsΪNULLʱǰĻͨpNumPixel +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraReadDeadPixels)( + CameraHandle hCamera, + USHORT* pRows, + USHORT* pCols, + UINT* pNumPixel + ); + +/******************************************************/ +// : CameraAddDeadPixels +// : +// : hCamera ľCameraInitá +// pRows y +// pCols x +// NumPixel леĻ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraAddDeadPixels)( + CameraHandle hCamera, + USHORT* pRows, + USHORT* pCols, + UINT NumPixel + ); + +/******************************************************/ +// : CameraRemoveDeadPixels +// : ɾָ +// : hCamera ľCameraInitá +// pRows y +// pCols x +// NumPixel леĻ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraRemoveDeadPixels)( + CameraHandle hCamera, + USHORT* pRows, + USHORT* pCols, + UINT NumPixel + ); + +/******************************************************/ +// : CameraRemoveAllDeadPixels +// : ɾл +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraRemoveAllDeadPixels)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraSaveDeadPixels +// : 㵽洢 +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSaveDeadPixels)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraSaveDeadPixelsToFile +// : 㵽ļ +// : hCamera ľCameraInitá +// sFileName ļ· +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSaveDeadPixelsToFile)( + CameraHandle hCamera, + char const* sFileName + ); + +/******************************************************/ +// : CameraLoadDeadPixelsFromFile +// : ļ +// : hCamera ľCameraInitá +// sFileName ļ· +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraLoadDeadPixelsFromFile)( + CameraHandle hCamera, + char const* sFileName + ); + +/******************************************************/ +// : CameraGetImageBufferPriority +// : һ֡ͼݡΪЧʣSDKͼץȡʱ㿽ƣ +// CameraGetImageBufferʵʻںеһַ +// úɹú󣬱CameraReleaseImageBufferͷ +// CameraGetImageBufferõĻ,Աں˼ʹ +// û +// : hCamera ľCameraInitá +// pFrameInfo ͼ֡ͷϢָ롣 +// pbyBuffer ָͼݵĻָ롣 +// 㿽Чʣ +// ʹһָָָ롣 +// wTimes ץȡͼijʱʱ䡣λ롣 +// wTimesʱڻδͼú +// ᷵سʱϢ +// Priority ȡͼȼ emCameraGetImagePriority +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetImageBufferPriority)( + CameraHandle hCamera, + tSdkFrameHead* pFrameInfo, + BYTE** pbyBuffer, + UINT wTimes, + UINT Priority + ); + +/******************************************************/ +// : CameraGetImageBufferPriorityEx +// : һ֡ͼݡýӿڻõͼǾRGBʽúú +// Ҫ CameraReleaseImageBuffer ͷţҲҪfree֮ĺͷ +// ͷŸúصͼݻ +// : hCamera ľCameraInitá +// piWidth ָ룬ͼĿ +// piHeight ָ룬ͼĸ߶ +// UINT wTimes ץȡͼijʱʱ䡣λ롣 +// wTimesʱڻδͼú +// ᷵سʱϢ +// Priority ȡͼȼ emCameraGetImagePriority +// ֵ : ɹʱRGBݻ׵ַ; +// 򷵻0 +/******************************************************/ +typedef unsigned char* (__stdcall *_CameraGetImageBufferPriorityEx)( + CameraHandle hCamera, + INT* piWidth, + INT* piHeight, + UINT wTimes, + UINT Priority + ); + +/******************************************************/ +// : CameraGetImageBufferPriorityEx2 +// : һ֡ͼݡýӿڻõͼǾRGBʽúú +// Ҫ CameraReleaseImageBuffer ͷţҲҪfree֮ĺͷ +// ͷŸúصͼݻ +// : hCamera ľCameraInitá +// pImageData ͼݵĻСuOutFormatָĸʽƥ䣬ݻ +// piWidth ָ룬ͼĿ +// piHeight ָ룬ͼĸ߶ +// wTimes ץȡͼijʱʱ䡣λ롣 +// wTimesʱڻδͼú +// ᷵سʱϢ +// Priority ȡͼȼ emCameraGetImagePriority +// ֵ : ɹʱRGBݻ׵ַ; +// 򷵻0 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetImageBufferPriorityEx2)( + CameraHandle hCamera, + BYTE* pImageData, + UINT uOutFormat, + int* piWidth, + int* piHeight, + UINT wTimes, + UINT Priority + ); + +/******************************************************/ +// : CameraGetImageBufferPriorityEx3 +// : һ֡ͼݡýӿڻõͼǾRGBʽúú +// Ҫ CameraReleaseImageBuffer ͷ. +// uOutFormat 0 : 8 BIT gray 1:rgb24 2:rgba32 3:bgr24 4:bgra32 +// : hCamera ľCameraInitá +// pImageData ͼݵĻСuOutFormatָĸʽƥ䣬ݻ +// piWidth ָ룬ͼĿ +// piHeight ָ룬ͼĸ߶ +// puTimeStamp ޷Σͼʱ +// UINT wTimes ץȡͼijʱʱ䡣λ롣 +// wTimes ʱڻδͼú᷵سʱϢ +// Priority ȡͼȼ emCameraGetImagePriority +// ֵ : ɹʱRGBݻ׵ַ; +// 򷵻0 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetImageBufferPriorityEx3)( + CameraHandle hCamera, + BYTE*pImageData, + UINT uOutFormat, + int *piWidth, + int *piHeight, + UINT* puTimeStamp, + UINT wTimes, + UINT Priority + ); + +/******************************************************/ +// : CameraClearBuffer +// : ѻ֡ +// : hCamera ľCameraInitá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraClearBuffer)( + CameraHandle hCamera + ); + +/******************************************************/ +// : CameraSoftTriggerEx +// : ִһִк󣬻ᴥCameraSetTriggerCount +// ָ֡ +// : hCamera ľCameraInitá +// uFlags ܱ־,emCameraSoftTriggerExFlagsеĶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSoftTriggerEx)( + CameraHandle hCamera, + UINT uFlags + ); + +/******************************************************/ +// : CameraSetHDR +// : HDRҪ֧֣HDRܵͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// value HDRϵΧ0.01.0 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetHDR)( + CameraHandle hCamera, + float value + ); + +/******************************************************/ +// : CameraGetHDR +// : ȡHDRҪ֧֣HDRܵͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// value HDRϵΧ0.01.0 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetHDR)( + CameraHandle hCamera, + float* value + ); + +/******************************************************/ +// : CameraGetFrameID +// : ȡǰ֡ID֧(ȫϵ֧)˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// id ֡ID +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetFrameID)( + CameraHandle hCamera, + UINT* id + ); + +/******************************************************/ +// : CameraGetFrameTimeStamp +// : ȡǰ֡ʱ(λ΢) +// : hCamera ľCameraInitá +// TimeStampL ʱ32λ +// TimeStampH ʱ32λ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetFrameTimeStamp)( + CameraHandle hCamera, + UINT* TimeStampL, + UINT* TimeStampH + ); + +/******************************************************/ +// : CameraSetHDRGainMode +// : ģʽҪ֧֣ģʽлܵͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// value 0 1 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetHDRGainMode)( + CameraHandle hCamera, + int value + ); + +/******************************************************/ +// : CameraGetHDRGainMode +// : ȡģʽҪ֧֣ģʽлܵͺţ˺ش룬ʾ֧֡ +// : hCamera ľCameraInitá +// value 0 1 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0)ʾ״̬; +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGetHDRGainMode)( + CameraHandle hCamera, + int* value + ); + +/******************************************************/ +// : CameraCreateDIBitmap +// : ֡ݴHBITMAP +// : hDC: Handle to a device contextWIN32 API CreateDIBitmapIJhdc +// pFrameBuffer: ֡ +// pFrameHead: ֡ͷ +// outBitmap: ´HBITMAPʹҪWIN32 API DeleteObjectͷţ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0) +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraCreateDIBitmap)( + HDC hDC, + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + HBITMAP* outBitmap + ); + +/******************************************************/ +// : CameraDrawFrameBuffer +// : ָ֡ +// : pFrameBuffer: ֡ +// pFrameHead: ֡ͷ +// hWnd: ĿĴ +// Algorithm 㷨 0ٵԲ 1ٶ +// Mode ģʽ 0: ȱ 1 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0) +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraDrawFrameBuffer)( + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + HWND hWnd, + int Algorithm, + int Mode + ); + +/******************************************************/ +// : CameraFlipFrameBuffer +// : ת֡ +// : pFrameBuffer: ֡ +// pFrameHead: ֡ͷ +// Flags: 1: 2 3¡ҽһηת(൱ת180) +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0) +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraFlipFrameBuffer)( + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + int Flags + ); + +/******************************************************/ +// : CameraConvertFrameBufferFormat +// : ת֡ݸʽ +// : hCamera: +// pInFrameBuffer: ֡ +// pOutFrameBuffer: ֡ +// outWidth: +// outHeight: ߶ +// outMediaType: ʽ +// pFrameHead: ֡ͷϢתɹϢᱻ޸Ϊ֡Ϣ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0) +// 򷵻 0ֵοCameraStatus.hдĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraConvertFrameBufferFormat)( + CameraHandle hCamera, + BYTE *pInFrameBuffer, + BYTE *pOutFrameBuffer, + int outWidth, + int outHeight, + UINT outMediaType, + tSdkFrameHead* pFrameHead + ); + +/******************************************************/ +// : CameraSetConnectionStatusCallback +// : ״̬ıĻص֪ͨߡʱ +// pCallBackָĻصͻᱻá +// : hCamera ľCameraInitá +// pCallBack صָ롣 +// pContext صĸӲڻصʱ +// øӲᱻ룬ΪNULL +// ʱЯϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetConnectionStatusCallback)( + CameraHandle hCamera, + CAMERA_CONNECTION_STATUS_CALLBACK pCallBack, + PVOID pContext + ); + +/******************************************************/ +// : CameraSetLightingControllerMode +// : ùԴģʽϵҪӲ֧֣ +// : hCamera ľCameraInitá +// index +// mode ģʽ0: 1:ֶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetLightingControllerMode)( + CameraHandle hCamera, + int index, + int mode + ); + +/******************************************************/ +// : CameraSetLightingControllerState +// : ùԴ״̬ϵҪӲ֧֣ +// : hCamera ľCameraInitá +// index +// state ״̬0:ر 1򿪣 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraSetLightingControllerState)( + CameraHandle hCamera, + int index, + int state + ); + +typedef CameraSdkStatus (__stdcall *_CameraGetEyeCount)( + CameraHandle hCamera, + int* EyeCount + ); + +typedef CameraSdkStatus (__stdcall *_CameraMultiEyeImageProcess)( + CameraHandle hCamera, + int iEyeIndex, + BYTE* pbyIn, + tSdkFrameHead* pInFrInfo, + BYTE* pbyOut, + tSdkFrameHead* pOutFrInfo, + UINT uOutFormat, + UINT uReserved + ); + +/******************************************************/ +// : CameraGrabber_CreateFromDevicePage +// : бûѡҪ򿪵 +// : ִгɹغGrabber +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_CreateFromDevicePage)( + void** Grabber + ); + +/******************************************************/ +// : CameraGrabber_CreateByIndex +// : ʹбGrabber +// : Grabber ִгɹغGrabber +// Index +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_CreateByIndex)( + void** Grabber, + int Index + ); + +/******************************************************/ +// : CameraGrabber_CreateByName +// : ʹƴGrabber +// : Grabber ִгɹغGrabber +// Name +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_CreateByName)( + void** Grabber, + char* Name + ); + +/******************************************************/ +// : CameraGrabber_Create +// : 豸ϢGrabber +// : Grabber ִгɹغGrabber +// pDevInfo 豸ϢCameraEnumerateDeviceá +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_Create)( + void** Grabber, + tSdkCameraDevInfo* pDevInfo + ); + +/******************************************************/ +// : CameraGrabber_Destroy +// : Grabber +// : Grabber +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_Destroy)( + void* Grabber + ); + +/******************************************************/ +// : CameraGrabber_SetHWnd +// : ԤƵʾ +// : Grabber +// hWnd ھ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SetHWnd)( + void* Grabber, + HWND hWnd + ); + +/******************************************************/ +// : CameraGrabber_SetPriority +// : ȡͼʹõȼ +// : Grabber +// Priority ȡͼȼ emCameraGetImagePriority +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SetPriority)( + void* Grabber, + UINT Priority + ); + +/******************************************************/ +// : CameraGrabber_StartLive +// : Ԥ +// : Grabber +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_StartLive)( + void* Grabber + ); + +/******************************************************/ +// : CameraGrabber_StopLive +// : ֹͣԤ +// : Grabber +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_StopLive)( + void* Grabber + ); + +/******************************************************/ +// : CameraGrabber_SaveImage +// : ץͼ +// : Grabber +// Image ץȡͼҪCameraImage_Destroyͷţ +// TimeOut ʱʱ䣨룩 +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SaveImage)( + void* Grabber, + void** Image, + DWORD TimeOut + ); + +/******************************************************/ +// : CameraGrabber_SaveImageAsync +// : ύһ첽ץͼύɹץͼɻصûõɺ +// : Grabber +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SaveImageAsync)( + void* Grabber + ); + +/******************************************************/ +// : CameraGrabber_SaveImageAsyncEx +// : ύһ첽ץͼύɹץͼɻصûõɺ +// : Grabber +// UserData ʹCameraImage_GetUserDataImageȡֵ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SaveImageAsyncEx)( + void* Grabber, + void* UserData + ); + +/******************************************************/ +// : CameraGrabber_SetSaveImageCompleteCallback +// : 첽ʽץͼɺ +// : Grabber +// Callback ץͼʱ +// Context CallbackʱΪCallback +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SetSaveImageCompleteCallback)( + void* Grabber, + pfnCameraGrabberSaveImageComplete Callback, + void* Context + ); + +/******************************************************/ +// : CameraGrabber_SetFrameListener +// : ֡ +// : Grabber +// Listener ˺0ʾǰ֡ +// Context ListenerʱΪListener +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SetFrameListener)( + void* Grabber, + pfnCameraGrabberFrameListener Listener, + void* Context + ); + +/******************************************************/ +// : CameraGrabber_SetRawCallback +// : RAWص +// : Grabber +// Callback Rawص +// Context CallbackʱΪCallback +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SetRawCallback)( + void* Grabber, + pfnCameraGrabberFrameCallback Callback, + void* Context + ); + +/******************************************************/ +// : CameraGrabber_SetRGBCallback +// : RGBص +// : Grabber +// Callback RGBص +// Context CallbackʱΪCallback +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_SetRGBCallback)( + void* Grabber, + pfnCameraGrabberFrameCallback Callback, + void* Context + ); + +/******************************************************/ +// : CameraGrabber_GetCameraHandle +// : ȡ +// : Grabber +// hCamera ص +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_GetCameraHandle)( + void* Grabber, + CameraHandle *hCamera + ); + +/******************************************************/ +// : CameraGrabber_GetStat +// : ȡ֡ͳϢ +// : Grabber +// stat صͳϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_GetStat)( + void* Grabber, + tSdkGrabberStat *stat + ); + +/******************************************************/ +// : CameraGrabber_GetCameraDevInfo +// : ȡDevInfo +// : Grabber +// DevInfo صDevInfo +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraGrabber_GetCameraDevInfo)( + void* Grabber, + tSdkCameraDevInfo *DevInfo + ); + +/******************************************************/ +// : CameraImage_Create +// : һµImage +// : Image +// pFrameBuffer ֡ݻ +// pFrameHead ֡ͷ +// bCopy TRUE: Ƴһµ֡ FALSE: ƣֱʹpFrameBufferָĻ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_Create)( + void** Image, + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + BOOL bCopy + ); + +/******************************************************/ +// : CameraImage_Destroy +// : Image +// : Image +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_Destroy)( + void* Image + ); + +/******************************************************/ +// : CameraImage_GetData +// : ȡImage +// : Image +// DataBuffer ͼ +// Head ͼϢ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_GetData)( + void* Image, + BYTE** DataBuffer, + tSdkFrameHead** Head + ); + +/******************************************************/ +// : CameraImage_GetUserData +// : ȡImageûԶ +// : Image +// UserData ûԶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_GetUserData)( + void* Image, + void** UserData + ); + +/******************************************************/ +// : CameraImage_SetUserData +// : ImageûԶ +// : Image +// UserData ûԶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_SetUserData)( + void* Image, + void* UserData + ); + +/******************************************************/ +// : CameraImage_IsEmpty +// : жһImageǷΪ +// : Image +// IsEmpty Ϊշ:TRUE(1) 򷵻:FALSE(0) +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_IsEmpty)( + void* Image, + BOOL* IsEmpty + ); + +/******************************************************/ +// : CameraImage_Draw +// : Imageָ +// : Image +// hWnd ĿĴ +// Algorithm 㷨 0ٵԲ 1ٶ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_Draw)( + void* Image, + HWND hWnd, + int Algorithm + ); + +/******************************************************/ +// : CameraImage_BitBlt +// : Imageָڣţ +// : Image +// hWnd ĿĴ +// xDst,yDst: ĿεϽ +// cxDst,cyDst: ĿεĿ +// xSrc,ySrc: ͼεϽ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_BitBlt)( + void* Image, + HWND hWnd, + int xDst, + int yDst, + int cxDst, + int cyDst, + int xSrc, + int ySrc + ); + +/******************************************************/ +// : CameraImage_SaveAsBmp +// : bmpʽImage +// : Image +// FileName ļ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_SaveAsBmp)( + void* Image, + char const* FileName + ); + +/******************************************************/ +// : CameraImage_SaveAsJpeg +// : jpgʽImage +// : Image +// FileName ļ +// Quality (1-100)100ΪѵļҲ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_SaveAsJpeg)( + void* Image, + char const* FileName, + BYTE Quality + ); + +/******************************************************/ +// : CameraImage_SaveAsPng +// : pngʽImage +// : Image +// FileName ļ +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_SaveAsPng)( + void* Image, + char const* FileName + ); + +/******************************************************/ +// : CameraImage_SaveAsRaw +// : raw Image +// : Image +// FileName ļ +// Format 0: 8Bit Raw 1: 16Bit Raw +// ֵ : ɹʱCAMERA_STATUS_SUCCESS (0); +// 򷵻ط0ֵĴ,οCameraStatus.h +// дĶ塣 +/******************************************************/ +typedef CameraSdkStatus (__stdcall *_CameraImage_SaveAsRaw)( + void* Image, + char const* FileName, + int Format + ); + + +#ifdef API_LOAD_MAIN +#define EXTERN +#else +#define EXTERN extern +#endif + +EXTERN INT gSdkLanguageSel;//0:English 1:Chinese + +EXTERN _CameraSdkInit CameraSdkInit; + +EXTERN _CameraSetCallbackFunction CameraSetCallbackFunction; + +EXTERN _CameraGetInformation CameraGetInformation; + +EXTERN _CameraSaveImage CameraSaveImage; + +EXTERN _CameraInitRecord CameraInitRecord; + +EXTERN _CameraStopRecord CameraStopRecord; + +EXTERN _CameraPushFrame CameraPushFrame; + +EXTERN _CameraSpecialControl CameraSpecialControl; + +EXTERN _CameraSnapToBuffer CameraSnapToBuffer; + +EXTERN _CameraIsOpened CameraIsOpened; + +EXTERN _CameraInit CameraInit; + +EXTERN _CameraInitEx CameraInitEx; + +EXTERN _CameraInitEx2 CameraInitEx2; + +EXTERN _CameraUnInit CameraUnInit; + +EXTERN _CameraPlay CameraPlay; + +EXTERN _CameraPause CameraPause; + +EXTERN _CameraStop CameraStop; + +EXTERN _CameraSetDisplayMode CameraSetDisplayMode; + +EXTERN _CameraDisplayRGB24 CameraDisplayRGB24; + +EXTERN _CameraSetDisplayOffset CameraSetDisplayOffset; + +EXTERN _CameraImageOverlay CameraImageOverlay; + +EXTERN _CameraDisplayInit CameraDisplayInit; + +EXTERN _CameraDisplayInitEx CameraDisplayInitEx; + +EXTERN _CameraSetDisplaySize CameraSetDisplaySize; + +EXTERN _CameraGetImageBuffer CameraGetImageBuffer; + +EXTERN _CameraGetImageBufferEx CameraGetImageBufferEx; + +EXTERN _CameraReleaseImageBuffer CameraReleaseImageBuffer; + +EXTERN _CameraCreateSettingPage CameraCreateSettingPage; + +EXTERN _CameraSetActiveSettingSubPage CameraSetActiveSettingSubPage; + +EXTERN _CameraSetSettingPageParent CameraSetSettingPageParent; + +EXTERN _CameraGetSettingPageHWnd CameraGetSettingPageHWnd; + +EXTERN _CameraCustomizeResolution CameraCustomizeResolution; + +EXTERN _CameraSetMirror CameraSetMirror; + +EXTERN _CameraGetMirror CameraGetMirror; + +EXTERN _CameraSetRotate CameraSetRotate; + +EXTERN _CameraGetRotate CameraGetRotate; + +EXTERN _CameraSetMonochrome CameraSetMonochrome; + +EXTERN _CameraGetMonochrome CameraGetMonochrome; + +EXTERN _CameraSetInverse CameraSetInverse; + +EXTERN _CameraGetInverse CameraGetInverse; + +EXTERN _CameraGetImageResolution CameraGetImageResolution; + +EXTERN _CameraGetImageResolutionEx CameraGetImageResolutionEx; + +EXTERN _CameraSetImageResolution CameraSetImageResolution; + +EXTERN _CameraSetImageResolutionEx CameraSetImageResolutionEx; + +EXTERN _CameraGetMediaType CameraGetMediaType; + +EXTERN _CameraSetMediaType CameraSetMediaType; + +EXTERN _CameraSetAeState CameraSetAeState; + +EXTERN _CameraGetAeState CameraGetAeState; + +EXTERN _CameraSetAeTarget CameraSetAeTarget; + +EXTERN _CameraGetAeTarget CameraGetAeTarget; + +EXTERN _CameraSetAeExposureRange CameraSetAeExposureRange; + +EXTERN _CameraGetAeExposureRange CameraGetAeExposureRange; + +EXTERN _CameraSetAeAnalogGainRange CameraSetAeAnalogGainRange; + +EXTERN _CameraGetAeAnalogGainRange CameraGetAeAnalogGainRange; + +EXTERN _CameraSetAeThreshold CameraSetAeThreshold; + +EXTERN _CameraGetAeThreshold CameraGetAeThreshold; + +EXTERN _CameraSetExposureTime CameraSetExposureTime; + +EXTERN _CameraGetExposureTime CameraGetExposureTime; + +EXTERN _CameraGetExposureTimeRange CameraGetExposureTimeRange; + +EXTERN _CameraGetExposureLineTime CameraGetExposureLineTime; + +EXTERN _CameraSetAnalogGain CameraSetAnalogGain; + +EXTERN _CameraGetAnalogGain CameraGetAnalogGain; + +EXTERN _CameraSetSharpness CameraSetSharpness; + +EXTERN _CameraGetSharpness CameraGetSharpness; + +EXTERN _CameraGetPresetClrTemp CameraGetPresetClrTemp; + +EXTERN _CameraSetPresetClrTemp CameraSetPresetClrTemp; + +EXTERN _CameraSetUserClrTempGain CameraSetUserClrTempGain; + +EXTERN _CameraGetUserClrTempGain CameraGetUserClrTempGain; + +EXTERN _CameraSetUserClrTempMatrix CameraSetUserClrTempMatrix; + +EXTERN _CameraGetUserClrTempMatrix CameraGetUserClrTempMatrix; + +EXTERN _CameraSetClrTempMode CameraSetClrTempMode; + +EXTERN _CameraGetClrTempMode CameraGetClrTempMode; + +EXTERN _CameraSetLutMode CameraSetLutMode; + +EXTERN _CameraGetLutMode CameraGetLutMode; + +EXTERN _CameraSelectLutPreset CameraSelectLutPreset; + +EXTERN _CameraGetLutPresetSel CameraGetLutPresetSel; + +EXTERN _CameraSetCustomLut CameraSetCustomLut; + +EXTERN _CameraGetCustomLut CameraGetCustomLut; + +EXTERN _CameraGetCurrentLut CameraGetCurrentLut; + +EXTERN _CameraSetOnceWB CameraSetOnceWB; + +EXTERN _CameraSetOnceBB CameraSetOnceBB; + +EXTERN _CameraSetWbMode CameraSetWbMode; + +EXTERN _CameraGetWbMode CameraGetWbMode; + +EXTERN _CameraSetWbWindow CameraSetWbWindow; + +EXTERN _CameraSetGain CameraSetGain; + +EXTERN _CameraGetGain CameraGetGain; + +EXTERN _CameraSetGamma CameraSetGamma; + +EXTERN _CameraGetGamma CameraGetGamma; + +EXTERN _CameraSetSaturation CameraSetSaturation; + +EXTERN _CameraGetSaturation CameraGetSaturation; + +EXTERN _CameraSetContrast CameraSetContrast; + +EXTERN _CameraGetContrast CameraGetContrast; + +EXTERN _CameraSetFrameSpeed CameraSetFrameSpeed; + +EXTERN _CameraGetFrameSpeed CameraGetFrameSpeed; + +EXTERN _CameraSetAntiFlick CameraSetAntiFlick; + +EXTERN _CameraGetAntiFlick CameraGetAntiFlick; + +EXTERN _CameraGetLightFrequency CameraGetLightFrequency; + +EXTERN _CameraSetLightFrequency CameraSetLightFrequency; + +EXTERN _CameraSetTransPackLen CameraSetTransPackLen; + +EXTERN _CameraGetTransPackLen CameraGetTransPackLen; + +EXTERN _CameraWriteSN CameraWriteSN; + +EXTERN _CameraReadSN CameraReadSN; + +EXTERN _CameraSaveParameter CameraSaveParameter; + +EXTERN _CameraLoadParameter CameraLoadParameter; + +EXTERN _CameraGetCurrentParameterGroup CameraGetCurrentParameterGroup; + +EXTERN _CameraEnumerateDevice CameraEnumerateDevice; + +EXTERN _CameraEnumerateDeviceEx CameraEnumerateDeviceEx; + +EXTERN _CameraGetCapability CameraGetCapability; + +EXTERN _CameraImageProcess CameraImageProcess; + +EXTERN _CameraImageProcessEx CameraImageProcessEx; + +EXTERN _CameraSoftTrigger CameraSoftTrigger; + +EXTERN _CameraSetTriggerMode CameraSetTriggerMode; + +EXTERN _CameraGetTriggerMode CameraGetTriggerMode; + +EXTERN _CameraSetStrobeMode CameraSetStrobeMode; + +EXTERN _CameraGetStrobeMode CameraGetStrobeMode; + +EXTERN _CameraSetStrobeDelayTime CameraSetStrobeDelayTime; + +EXTERN _CameraGetStrobeDelayTime CameraGetStrobeDelayTime; + +EXTERN _CameraSetStrobePulseWidth CameraSetStrobePulseWidth; + +EXTERN _CameraGetStrobePulseWidth CameraGetStrobePulseWidth; + +EXTERN _CameraSetStrobePolarity CameraSetStrobePolarity; + +EXTERN _CameraGetStrobePolarity CameraGetStrobePolarity; + +EXTERN _CameraSetExtTrigSignalType CameraSetExtTrigSignalType; + +EXTERN _CameraGetExtTrigSignalType CameraGetExtTrigSignalType; + +EXTERN _CameraSetExtTrigShutterType CameraSetExtTrigShutterType; + +EXTERN _CameraGetExtTrigShutterType CameraGetExtTrigShutterType; + +EXTERN _CameraSetExtTrigDelayTime CameraSetExtTrigDelayTime; + +EXTERN _CameraGetExtTrigDelayTime CameraGetExtTrigDelayTime; + +EXTERN _CameraSetExtTrigJitterTime CameraSetExtTrigJitterTime; + +EXTERN _CameraGetExtTrigJitterTime CameraGetExtTrigJitterTime; + +EXTERN _CameraGetExtTrigCapability CameraGetExtTrigCapability; + +EXTERN _CameraPauseLevelTrigger CameraPauseLevelTrigger; + +EXTERN _CameraShowSettingPage CameraShowSettingPage; + +EXTERN _CameraGetFrameStatistic CameraGetFrameStatistic; + +EXTERN _CameraGetResolutionForSnap CameraGetResolutionForSnap; + +EXTERN _CameraSetResolutionForSnap CameraSetResolutionForSnap; + +EXTERN _CameraIsAeWinVisible CameraIsAeWinVisible; + +EXTERN _CameraIsWbWinVisible CameraIsWbWinVisible; + +EXTERN _CameraGetNoiseFilterState CameraGetNoiseFilterState; + +EXTERN _CameraSetParameterMode CameraSetParameterMode; + +EXTERN _CameraGetParameterMode CameraGetParameterMode; + +EXTERN _CameraSetParameterMask CameraSetParameterMask; + +EXTERN _CameraGetTriggerCount CameraGetTriggerCount; + +EXTERN _CameraGetCrossLine CameraGetCrossLine; + +EXTERN _CameraSetCrossLine CameraSetCrossLine; + +EXTERN _CameraGetTriggerDelayTime CameraGetTriggerDelayTime; + +EXTERN _CameraSetTriggerDelayTime CameraSetTriggerDelayTime; + +EXTERN _CameraSetAeWinVisible CameraSetAeWinVisible; + +EXTERN _CameraSetNoiseFilter CameraSetNoiseFilter; + +EXTERN _CameraSetTriggerCount CameraSetTriggerCount; + +EXTERN _CameraCustomizeReferWin CameraCustomizeReferWin; + +EXTERN _CameraSetAeWindow CameraSetAeWindow; + +EXTERN _CameraReadParameterFromFile CameraReadParameterFromFile; + +EXTERN _CameraSetWbWinVisible CameraSetWbWinVisible; + +EXTERN _CameraRstTimeStamp CameraRstTimeStamp; + +EXTERN _CameraGetCapabilityEx CameraGetCapabilityEx; + +EXTERN _CameraSaveUserData CameraSaveUserData; + +EXTERN _CameraLoadUserData CameraLoadUserData; + +EXTERN _CameraGetFriendlyName CameraGetFriendlyName; + +EXTERN _CameraSetFriendlyName CameraSetFriendlyName; + +EXTERN _CameraSdkGetVersionString CameraSdkGetVersionString; + +EXTERN _CameraCheckFwUpdate CameraCheckFwUpdate; + +EXTERN _CameraGetFirmwareVersion CameraGetFirmwareVersion; + +EXTERN _CameraGetFirmwareVision CameraGetFirmwareVision; + +EXTERN _CameraGetEnumInfo CameraGetEnumInfo; + +EXTERN _CameraGetInerfaceVersion CameraGetInerfaceVersion; + +EXTERN _CameraSetIOState CameraSetIOState; + +EXTERN _CameraGetIOState CameraGetIOState; + +EXTERN _CameraSetInPutIOMode CameraSetInPutIOMode; + +EXTERN _CameraSetOutPutIOMode CameraSetOutPutIOMode; + +EXTERN _CameraSetOutPutPWM CameraSetOutPutPWM; + +EXTERN _CameraSetBayerDecAlgorithm CameraSetBayerDecAlgorithm; + +EXTERN _CameraGetBayerDecAlgorithm CameraGetBayerDecAlgorithm; + +EXTERN _CameraSetBlackLevel CameraSetBlackLevel; + +EXTERN _CameraGetBlackLevel CameraGetBlackLevel; + +EXTERN _CameraSetWhiteLevel CameraSetWhiteLevel; + +EXTERN _CameraGetWhiteLevel CameraGetWhiteLevel; + +EXTERN _CameraSetIspOutFormat CameraSetIspOutFormat; + +EXTERN _CameraGetIspOutFormat CameraGetIspOutFormat; + +EXTERN _CameraGetErrorString CameraGetErrorString; + +EXTERN _CameraGetCapabilityEx2 CameraGetCapabilityEx2; + +EXTERN _CameraGetImageBufferEx2 CameraGetImageBufferEx2; + +EXTERN _CameraGetImageBufferEx3 CameraGetImageBufferEx3; + +EXTERN _CameraReConnect CameraReConnect; + +EXTERN _CameraConnectTest CameraConnectTest; + +EXTERN _CameraSetLedEnable CameraSetLedEnable; + +EXTERN _CameraGetLedEnable CameraGetLedEnable; + +EXTERN _CameraSetLedOnOff CameraSetLedOnOff; + +EXTERN _CameraGetLedOnOff CameraGetLedOnOff; + +EXTERN _CameraSetLedDuration CameraSetLedDuration; + +EXTERN _CameraGetLedDuration CameraGetLedDuration; + +EXTERN _CameraSetLedBrightness CameraSetLedBrightness; + +EXTERN _CameraGetLedBrightness CameraGetLedBrightness; + +EXTERN _CameraEnableTransferRoi CameraEnableTransferRoi; + +EXTERN _CameraSetTransferRoi CameraSetTransferRoi; + +EXTERN _CameraGetTransferRoi CameraGetTransferRoi; + +EXTERN _CameraAlignMalloc CameraAlignMalloc; + +EXTERN _CameraAlignFree CameraAlignFree; + +EXTERN _CameraSetAutoConnect CameraSetAutoConnect; + +EXTERN _CameraGetAutoConnect CameraGetAutoConnect; + +EXTERN _CameraGetReConnectCounts CameraGetReConnectCounts; + +EXTERN _CameraSetSingleGrabMode CameraSetSingleGrabMode; + +EXTERN _CameraGetSingleGrabMode CameraGetSingleGrabMode; + +EXTERN _CameraRestartGrab CameraRestartGrab; + +EXTERN _CameraDrawText CameraDrawText; + +EXTERN _CameraGigeGetIp CameraGigeGetIp; + +EXTERN _CameraGigeSetIp CameraGigeSetIp; + +EXTERN _CameraGigeGetMac CameraGigeGetMac; + +EXTERN _CameraEnableFastResponse CameraEnableFastResponse; + +EXTERN _CameraSetCorrectDeadPixel CameraSetCorrectDeadPixel; + +EXTERN _CameraGetCorrectDeadPixel CameraGetCorrectDeadPixel; + +EXTERN _CameraFlatFieldingCorrectSetEnable CameraFlatFieldingCorrectSetEnable; + +EXTERN _CameraFlatFieldingCorrectGetEnable CameraFlatFieldingCorrectGetEnable; + +EXTERN _CameraFlatFieldingCorrectSetParameter CameraFlatFieldingCorrectSetParameter; + +EXTERN _CameraFlatFieldingCorrectSaveParameterToFile CameraFlatFieldingCorrectSaveParameterToFile; + +EXTERN _CameraFlatFieldingCorrectLoadParameterFromFile CameraFlatFieldingCorrectLoadParameterFromFile; + +EXTERN _CameraCommonCall CameraCommonCall; + +EXTERN _CameraSetDenoise3DParams CameraSetDenoise3DParams; + +EXTERN _CameraGetDenoise3DParams CameraGetDenoise3DParams; + +EXTERN _CameraManualDenoise3D CameraManualDenoise3D; + +EXTERN _CameraCustomizeDeadPixels CameraCustomizeDeadPixels; + +EXTERN _CameraReadDeadPixels CameraReadDeadPixels; + +EXTERN _CameraAddDeadPixels CameraAddDeadPixels; + +EXTERN _CameraRemoveDeadPixels CameraRemoveDeadPixels; + +EXTERN _CameraRemoveAllDeadPixels CameraRemoveAllDeadPixels; + +EXTERN _CameraSaveDeadPixels CameraSaveDeadPixels; + +EXTERN _CameraSaveDeadPixelsToFile CameraSaveDeadPixelsToFile; + +EXTERN _CameraLoadDeadPixelsFromFile CameraLoadDeadPixelsFromFile; + +EXTERN _CameraGetImageBufferPriority CameraGetImageBufferPriority; + +EXTERN _CameraGetImageBufferPriorityEx CameraGetImageBufferPriorityEx; + +EXTERN _CameraGetImageBufferPriorityEx2 CameraGetImageBufferPriorityEx2; + +EXTERN _CameraGetImageBufferPriorityEx3 CameraGetImageBufferPriorityEx3; + +EXTERN _CameraClearBuffer CameraClearBuffer; + +EXTERN _CameraSoftTriggerEx CameraSoftTriggerEx; + +EXTERN _CameraSetHDR CameraSetHDR; + +EXTERN _CameraGetHDR CameraGetHDR; + +EXTERN _CameraGetFrameID CameraGetFrameID; + +EXTERN _CameraGetFrameTimeStamp CameraGetFrameTimeStamp; + +EXTERN _CameraSetHDRGainMode CameraSetHDRGainMode; + +EXTERN _CameraGetHDRGainMode CameraGetHDRGainMode; + +EXTERN _CameraCreateDIBitmap CameraCreateDIBitmap; + +EXTERN _CameraDrawFrameBuffer CameraDrawFrameBuffer; + +EXTERN _CameraFlipFrameBuffer CameraFlipFrameBuffer; + +EXTERN _CameraConvertFrameBufferFormat CameraConvertFrameBufferFormat; + +EXTERN _CameraSetConnectionStatusCallback CameraSetConnectionStatusCallback; + +EXTERN _CameraSetLightingControllerMode CameraSetLightingControllerMode; + +EXTERN _CameraSetLightingControllerState CameraSetLightingControllerState; + +EXTERN _CameraGetEyeCount CameraGetEyeCount; + +EXTERN _CameraMultiEyeImageProcess CameraMultiEyeImageProcess; + +EXTERN _CameraGrabber_CreateFromDevicePage CameraGrabber_CreateFromDevicePage; + +EXTERN _CameraGrabber_CreateByIndex CameraGrabber_CreateByIndex; + +EXTERN _CameraGrabber_CreateByName CameraGrabber_CreateByName; + +EXTERN _CameraGrabber_Create CameraGrabber_Create; + +EXTERN _CameraGrabber_Destroy CameraGrabber_Destroy; + +EXTERN _CameraGrabber_SetHWnd CameraGrabber_SetHWnd; + +EXTERN _CameraGrabber_SetPriority CameraGrabber_SetPriority; + +EXTERN _CameraGrabber_StartLive CameraGrabber_StartLive; + +EXTERN _CameraGrabber_StopLive CameraGrabber_StopLive; + +EXTERN _CameraGrabber_SaveImage CameraGrabber_SaveImage; + +EXTERN _CameraGrabber_SaveImageAsync CameraGrabber_SaveImageAsync; + +EXTERN _CameraGrabber_SaveImageAsyncEx CameraGrabber_SaveImageAsyncEx; + +EXTERN _CameraGrabber_SetSaveImageCompleteCallback CameraGrabber_SetSaveImageCompleteCallback; + +EXTERN _CameraGrabber_SetFrameListener CameraGrabber_SetFrameListener; + +EXTERN _CameraGrabber_SetRawCallback CameraGrabber_SetRawCallback; + +EXTERN _CameraGrabber_SetRGBCallback CameraGrabber_SetRGBCallback; + +EXTERN _CameraGrabber_GetCameraHandle CameraGrabber_GetCameraHandle; + +EXTERN _CameraGrabber_GetStat CameraGrabber_GetStat; + +EXTERN _CameraGrabber_GetCameraDevInfo CameraGrabber_GetCameraDevInfo; + +EXTERN _CameraImage_Create CameraImage_Create; + +EXTERN _CameraImage_Destroy CameraImage_Destroy; + +EXTERN _CameraImage_GetData CameraImage_GetData; + +EXTERN _CameraImage_GetUserData CameraImage_GetUserData; + +EXTERN _CameraImage_SetUserData CameraImage_SetUserData; + +EXTERN _CameraImage_IsEmpty CameraImage_IsEmpty; + +EXTERN _CameraImage_Draw CameraImage_Draw; + +EXTERN _CameraImage_BitBlt CameraImage_BitBlt; + +EXTERN _CameraImage_SaveAsBmp CameraImage_SaveAsBmp; + +EXTERN _CameraImage_SaveAsJpeg CameraImage_SaveAsJpeg; + +EXTERN _CameraImage_SaveAsPng CameraImage_SaveAsPng; + +EXTERN _CameraImage_SaveAsRaw CameraImage_SaveAsRaw; + + +CameraSdkStatus LoadSdkApi(); + +CameraSdkStatus UnloadCameraSdk(); + +#ifdef API_LOAD_MAIN +#undef API_LOAD_MAIN + + +//SDK汾ƥ䣬ܳijЩʧܡ + +#define CHCEK_API_LOAD 0 // 1:API⣬ʧܣʾ 0:(ͨSDK汾ŽжԱ) + +#if CHCEK_API_LOAD +#define CHECK_API(API) if(API == NULL)\ +{\ + MessageBoxA(NULL,#API,gSdkLanguageSel?"ʧ":"Function load failed!",0);\ + return CAMERA_STATUS_FAILED;\ +} +#else +#define CHECK_API(API) +#endif + +HMODULE ghSDK = NULL; + +CameraSdkStatus LoadSdkApi() +{ + char szCompany[64]; + char strPath[MAX_PATH]; + char strDir[MAX_PATH]; + HKEY hkey = NULL; + DWORD dwType = REG_SZ; + DWORD dwSize = MAX_PATH; + BYTE abyValue[MAX_PATH]; + LONG status; + + gSdkLanguageSel = 0; + + if (ERROR_SUCCESS != RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Industry Camera", 0, KEY_READ, &hkey)) + return CAMERA_STATUS_NOT_INITIALIZED; + dwSize = sizeof(szCompany); + status = RegQueryValueExA(hkey, "Company", NULL, &dwType, (LPBYTE)szCompany, &dwSize); + RegCloseKey(hkey); + hkey = NULL; + if (status != ERROR_SUCCESS) + return CAMERA_STATUS_NOT_INITIALIZED; + +#ifdef _WIN64 + sprintf_s(strPath, sizeof(strPath), "Software\\%s\\Settings_X64", szCompany); +#else + sprintf_s(strPath, sizeof(strPath), "Software\\%s\\Settings", szCompany); +#endif + hkey = NULL; + RegCreateKeyExA(HKEY_LOCAL_MACHINE, strPath, 0, NULL, 0, KEY_READ, NULL, &hkey, NULL); + + do + { + if (NULL != hkey) + { + memset(abyValue, 0x00, MAX_PATH); + dwType = REG_SZ; + dwSize = MAX_PATH; + status = RegQueryValueExA(hkey, "Language", NULL, &dwType, abyValue, &dwSize); + if (ERROR_SUCCESS == status) + { + abyValue[MAX_PATH-1] = '\0'; + if (strcmp((const char *)abyValue,"Chinese") == 0) + { + gSdkLanguageSel = 1; + } + else if (strcmp((const char *)abyValue,"TradChinese") == 0) + { + gSdkLanguageSel = 2; + } + } + + dwType = REG_SZ; + dwSize = MAX_PATH; + status = RegQueryValueExA(hkey, "SdkPath", NULL, &dwType, abyValue, &dwSize); + if (ERROR_SUCCESS == status) + { + abyValue[MAX_PATH-1] = '\0'; + strcpy(strPath,(const char *)abyValue); + break; + } + } + + MessageBoxA(NULL, "Failed to access registry", "Error", 0); + return CAMERA_STATUS_FAILED; + } while(0); + + if (hkey != NULL) + { + RegCloseKey(hkey); + hkey = NULL; + } + +#ifndef _WIN64 + sprintf_s(strDir,sizeof(strDir),"%s%s",strPath,"\\MVCAMSDK.dll"); +#else + sprintf_s(strDir,sizeof(strDir),"%s%s",strPath,"\\MVCAMSDK_X64.dll"); +#endif + ghSDK = ::LoadLibraryA(strDir); + + + if (NULL == ghSDK) + { + if (gSdkLanguageSel == 1) + { + sprintf_s(strPath,sizeof(strPath),"ļ[%s]ʧ ,ȷϸ·ڸļ½аװ!",strDir); + MessageBoxA(NULL, strPath, "", 0); + } + else + { + sprintf_s(strPath,sizeof(strPath),"Failed to load file[%s] ,put the file on the directory or re-install the platform and try again!",strDir); + MessageBoxA(NULL, strPath, "Error", 0); + } + return CAMERA_STATUS_FAILED; + } + +#define GET_MVSDK_API(name) \ + name = (_##name)GetProcAddress(ghSDK, #name);\ + CHECK_API(name) + + GET_MVSDK_API(CameraSdkInit); + GET_MVSDK_API(CameraSetCallbackFunction); + GET_MVSDK_API(CameraGetInformation); + GET_MVSDK_API(CameraInit); + GET_MVSDK_API(CameraInitEx); + GET_MVSDK_API(CameraInitEx2); + GET_MVSDK_API(CameraUnInit); + GET_MVSDK_API(CameraImageProcess); + GET_MVSDK_API(CameraImageProcessEx); + GET_MVSDK_API(CameraPlay); + GET_MVSDK_API(CameraPause); + GET_MVSDK_API(CameraStop); + GET_MVSDK_API(CameraDisplayRGB24); + GET_MVSDK_API(CameraSetDisplayMode); + GET_MVSDK_API(CameraImageOverlay); + GET_MVSDK_API(CameraDisplayInit); + GET_MVSDK_API(CameraDisplayInitEx); + GET_MVSDK_API(CameraSetDisplaySize); + GET_MVSDK_API(CameraSetDisplayOffset); + GET_MVSDK_API(CameraInitRecord); + GET_MVSDK_API(CameraStopRecord); + GET_MVSDK_API(CameraPushFrame); + GET_MVSDK_API(CameraSpecialControl); + GET_MVSDK_API(CameraSnapToBuffer); + GET_MVSDK_API(CameraGetImageBuffer); + GET_MVSDK_API(CameraGetImageBufferEx); + GET_MVSDK_API(CameraReleaseImageBuffer); + GET_MVSDK_API(CameraCreateSettingPage); + GET_MVSDK_API(CameraSetActiveSettingSubPage); + GET_MVSDK_API(CameraSetSettingPageParent); + GET_MVSDK_API(CameraGetSettingPageHWnd); + GET_MVSDK_API(CameraSetMirror); + GET_MVSDK_API(CameraGetMirror); + GET_MVSDK_API(CameraSetRotate); + GET_MVSDK_API(CameraGetRotate); + GET_MVSDK_API(CameraSetMonochrome); + GET_MVSDK_API(CameraGetMonochrome); + GET_MVSDK_API(CameraSetInverse); + GET_MVSDK_API(CameraGetInverse); + GET_MVSDK_API(CameraCustomizeResolution); + GET_MVSDK_API(CameraGetImageResolution); + GET_MVSDK_API(CameraGetImageResolutionEx); + GET_MVSDK_API(CameraSetImageResolution); + GET_MVSDK_API(CameraSetImageResolutionEx); + GET_MVSDK_API(CameraGetMediaType); + GET_MVSDK_API(CameraSetMediaType); + GET_MVSDK_API(CameraSetAeState); + GET_MVSDK_API(CameraGetAeState); + GET_MVSDK_API(CameraSetAeTarget); + GET_MVSDK_API(CameraGetAeTarget); + GET_MVSDK_API(CameraSetAeExposureRange); + GET_MVSDK_API(CameraGetAeExposureRange); + GET_MVSDK_API(CameraSetAeAnalogGainRange); + GET_MVSDK_API(CameraGetAeAnalogGainRange); + GET_MVSDK_API(CameraSetAeThreshold); + GET_MVSDK_API(CameraGetAeThreshold); + GET_MVSDK_API(CameraIsAeWinVisible); + GET_MVSDK_API(CameraSetExposureTime); + GET_MVSDK_API(CameraGetExposureTime); + GET_MVSDK_API(CameraGetExposureTimeRange); + GET_MVSDK_API(CameraGetExposureLineTime); + GET_MVSDK_API(CameraSetAnalogGain); + GET_MVSDK_API(CameraGetAnalogGain); + GET_MVSDK_API(CameraSetSharpness); + GET_MVSDK_API(CameraGetSharpness); + GET_MVSDK_API(CameraSetOnceWB); + GET_MVSDK_API(CameraSetLutMode); + GET_MVSDK_API(CameraGetLutMode); + GET_MVSDK_API(CameraSelectLutPreset); + GET_MVSDK_API(CameraGetLutPresetSel); + GET_MVSDK_API(CameraSetCustomLut); + GET_MVSDK_API(CameraGetCustomLut); + GET_MVSDK_API(CameraGetCurrentLut); + GET_MVSDK_API(CameraSetWbMode); + GET_MVSDK_API(CameraGetWbMode); + GET_MVSDK_API(CameraSetWbWindow); + GET_MVSDK_API(CameraIsWbWinVisible); + GET_MVSDK_API(CameraSaveImage); + GET_MVSDK_API(CameraSetGain); + GET_MVSDK_API(CameraGetGain); + GET_MVSDK_API(CameraSetGamma); + GET_MVSDK_API(CameraGetGamma); + GET_MVSDK_API(CameraSetSaturation); + GET_MVSDK_API(CameraGetSaturation); + GET_MVSDK_API(CameraSetContrast); + GET_MVSDK_API(CameraGetContrast); + GET_MVSDK_API(CameraSetFrameSpeed); + GET_MVSDK_API(CameraGetFrameSpeed); + GET_MVSDK_API(CameraSetAntiFlick); + GET_MVSDK_API(CameraGetAntiFlick); + GET_MVSDK_API(CameraGetLightFrequency); + GET_MVSDK_API(CameraSetLightFrequency); + GET_MVSDK_API(CameraSetTransPackLen); + GET_MVSDK_API(CameraGetTransPackLen); + GET_MVSDK_API(CameraWriteSN); + GET_MVSDK_API(CameraReadSN); + GET_MVSDK_API(CameraGetPresetClrTemp); + GET_MVSDK_API(CameraSetPresetClrTemp); + GET_MVSDK_API(CameraSaveParameter); + GET_MVSDK_API(CameraLoadParameter); + GET_MVSDK_API(CameraGetCurrentParameterGroup); + GET_MVSDK_API(CameraEnumerateDevice); + GET_MVSDK_API(CameraEnumerateDeviceEx); + GET_MVSDK_API(CameraGetCapability); + GET_MVSDK_API(CameraSoftTrigger); + GET_MVSDK_API(CameraSetTriggerMode); + GET_MVSDK_API(CameraGetTriggerMode); + GET_MVSDK_API(CameraShowSettingPage); + GET_MVSDK_API(CameraGetFrameStatistic); + GET_MVSDK_API(CameraGetResolutionForSnap); + GET_MVSDK_API(CameraSetResolutionForSnap); + GET_MVSDK_API(CameraGetNoiseFilterState); + GET_MVSDK_API(CameraSetParameterMode); + GET_MVSDK_API(CameraGetParameterMode); + GET_MVSDK_API(CameraSetParameterMask); + GET_MVSDK_API(CameraGetTriggerCount); + GET_MVSDK_API(CameraGetCrossLine); + GET_MVSDK_API(CameraSetCrossLine); + GET_MVSDK_API(CameraGetTriggerDelayTime); + GET_MVSDK_API(CameraSetTriggerDelayTime); + GET_MVSDK_API(CameraSetAeWinVisible); + GET_MVSDK_API(CameraSetNoiseFilter); + GET_MVSDK_API(CameraSetTriggerCount); + GET_MVSDK_API(CameraCustomizeReferWin); + GET_MVSDK_API(CameraSetAeWindow); + GET_MVSDK_API(CameraReadParameterFromFile); + GET_MVSDK_API(CameraSetWbWinVisible); + GET_MVSDK_API(CameraRstTimeStamp); + GET_MVSDK_API(CameraGetCapabilityEx); + GET_MVSDK_API(CameraLoadUserData); + GET_MVSDK_API(CameraSaveUserData); + GET_MVSDK_API(CameraIsOpened); + GET_MVSDK_API(CameraSetFriendlyName); + GET_MVSDK_API(CameraGetFriendlyName); + GET_MVSDK_API(CameraSetUserClrTempGain); + GET_MVSDK_API(CameraGetUserClrTempGain); + GET_MVSDK_API(CameraSetUserClrTempMatrix); + GET_MVSDK_API(CameraGetUserClrTempMatrix); + GET_MVSDK_API(CameraSetClrTempMode); + GET_MVSDK_API(CameraGetClrTempMode); + GET_MVSDK_API(CameraSdkGetVersionString); + GET_MVSDK_API(CameraCheckFwUpdate); + GET_MVSDK_API(CameraGetFirmwareVersion); + GET_MVSDK_API(CameraGetFirmwareVision); + GET_MVSDK_API(CameraGetEnumInfo); + GET_MVSDK_API(CameraGetInerfaceVersion); + GET_MVSDK_API(CameraSetIOState); + GET_MVSDK_API(CameraGetIOState); + GET_MVSDK_API(CameraSetInPutIOMode); + GET_MVSDK_API(CameraSetOutPutIOMode); + GET_MVSDK_API(CameraSetOutPutPWM); + CameraSetBayerDecAlgorithm = (_CameraSetBayerDecAlgorithm)GetProcAddress(ghSDK, +#ifdef _WIN64 + "CameraSetBayerDecAlgorithm"); +#else + "_CameraSetBayerDecAlgorithm@12"); +#endif + CHECK_API(CameraSetBayerDecAlgorithm); + GET_MVSDK_API(CameraGetBayerDecAlgorithm); + GET_MVSDK_API(CameraSetBlackLevel); + GET_MVSDK_API(CameraGetBlackLevel); + GET_MVSDK_API(CameraSetWhiteLevel); + GET_MVSDK_API(CameraGetWhiteLevel); + GET_MVSDK_API(CameraSetIspOutFormat); + GET_MVSDK_API(CameraGetIspOutFormat); + GET_MVSDK_API(CameraSetStrobeMode); + GET_MVSDK_API(CameraGetStrobeMode); + GET_MVSDK_API(CameraSetStrobeDelayTime); + GET_MVSDK_API(CameraGetStrobeDelayTime); + GET_MVSDK_API(CameraSetStrobePulseWidth); + GET_MVSDK_API(CameraGetStrobePulseWidth); + GET_MVSDK_API(CameraSetStrobePolarity); + GET_MVSDK_API(CameraGetStrobePolarity); + GET_MVSDK_API(CameraSetExtTrigSignalType); + GET_MVSDK_API(CameraGetExtTrigSignalType); + GET_MVSDK_API(CameraSetExtTrigShutterType); + GET_MVSDK_API(CameraGetExtTrigShutterType); + GET_MVSDK_API(CameraSetExtTrigDelayTime); + GET_MVSDK_API(CameraGetExtTrigDelayTime); + GET_MVSDK_API(CameraSetExtTrigJitterTime); + GET_MVSDK_API(CameraGetExtTrigJitterTime); + GET_MVSDK_API(CameraGetExtTrigCapability); + GET_MVSDK_API(CameraPauseLevelTrigger); + GET_MVSDK_API(CameraGetErrorString); + GET_MVSDK_API(CameraGetCapabilityEx2); + GET_MVSDK_API(CameraGetImageBufferEx2); + GET_MVSDK_API(CameraGetImageBufferEx3); + GET_MVSDK_API(CameraReConnect); + GET_MVSDK_API(CameraConnectTest); + GET_MVSDK_API(CameraSetLedEnable); + GET_MVSDK_API(CameraGetLedEnable); + GET_MVSDK_API(CameraSetLedOnOff); + GET_MVSDK_API(CameraGetLedOnOff); + GET_MVSDK_API(CameraSetLedDuration); + GET_MVSDK_API(CameraGetLedDuration); + GET_MVSDK_API(CameraSetLedBrightness); + GET_MVSDK_API(CameraGetLedBrightness); + GET_MVSDK_API(CameraEnableTransferRoi); + GET_MVSDK_API(CameraSetTransferRoi); + GET_MVSDK_API(CameraGetTransferRoi); + GET_MVSDK_API(CameraAlignMalloc); + GET_MVSDK_API(CameraAlignFree); + GET_MVSDK_API(CameraSetAutoConnect); + GET_MVSDK_API(CameraGetAutoConnect); + GET_MVSDK_API(CameraGetReConnectCounts); + GET_MVSDK_API(CameraSetSingleGrabMode); + GET_MVSDK_API(CameraGetSingleGrabMode); + GET_MVSDK_API(CameraRestartGrab); + GET_MVSDK_API(CameraDrawText); + GET_MVSDK_API(CameraGigeGetIp); + GET_MVSDK_API(CameraGigeSetIp); + GET_MVSDK_API(CameraGigeGetMac); + GET_MVSDK_API(CameraEnableFastResponse); + GET_MVSDK_API(CameraSetCorrectDeadPixel); + GET_MVSDK_API(CameraGetCorrectDeadPixel); + GET_MVSDK_API(CameraFlatFieldingCorrectSetEnable); + GET_MVSDK_API(CameraFlatFieldingCorrectGetEnable); + GET_MVSDK_API(CameraFlatFieldingCorrectSetParameter); + GET_MVSDK_API(CameraFlatFieldingCorrectSaveParameterToFile); + GET_MVSDK_API(CameraFlatFieldingCorrectLoadParameterFromFile); + GET_MVSDK_API(CameraCommonCall); + GET_MVSDK_API(CameraSetDenoise3DParams); + GET_MVSDK_API(CameraGetDenoise3DParams); + GET_MVSDK_API(CameraManualDenoise3D); + GET_MVSDK_API(CameraCustomizeDeadPixels); + GET_MVSDK_API(CameraReadDeadPixels); + GET_MVSDK_API(CameraAddDeadPixels); + GET_MVSDK_API(CameraRemoveDeadPixels); + GET_MVSDK_API(CameraRemoveAllDeadPixels); + GET_MVSDK_API(CameraSaveDeadPixels); + GET_MVSDK_API(CameraSaveDeadPixelsToFile); + GET_MVSDK_API(CameraLoadDeadPixelsFromFile); + GET_MVSDK_API(CameraGetImageBufferPriority); + GET_MVSDK_API(CameraGetImageBufferPriorityEx); + GET_MVSDK_API(CameraGetImageBufferPriorityEx2); + GET_MVSDK_API(CameraGetImageBufferPriorityEx3); + GET_MVSDK_API(CameraClearBuffer); + GET_MVSDK_API(CameraSoftTriggerEx); + GET_MVSDK_API(CameraSetHDR); + GET_MVSDK_API(CameraGetHDR); + GET_MVSDK_API(CameraGetFrameID); + GET_MVSDK_API(CameraGetFrameTimeStamp); + GET_MVSDK_API(CameraSetHDRGainMode); + GET_MVSDK_API(CameraGetHDRGainMode); + GET_MVSDK_API(CameraCreateDIBitmap); + GET_MVSDK_API(CameraDrawFrameBuffer); + GET_MVSDK_API(CameraFlipFrameBuffer); + GET_MVSDK_API(CameraConvertFrameBufferFormat); + GET_MVSDK_API(CameraSetConnectionStatusCallback); + GET_MVSDK_API(CameraSetLightingControllerMode); + GET_MVSDK_API(CameraSetLightingControllerState); + GET_MVSDK_API(CameraGetEyeCount); + GET_MVSDK_API(CameraMultiEyeImageProcess); + + GET_MVSDK_API(CameraGrabber_CreateFromDevicePage); + GET_MVSDK_API(CameraGrabber_CreateByIndex); + GET_MVSDK_API(CameraGrabber_CreateByName); + GET_MVSDK_API(CameraGrabber_Create); + GET_MVSDK_API(CameraGrabber_Destroy); + GET_MVSDK_API(CameraGrabber_SetHWnd); + GET_MVSDK_API(CameraGrabber_SetPriority); + GET_MVSDK_API(CameraGrabber_StartLive); + GET_MVSDK_API(CameraGrabber_StopLive); + GET_MVSDK_API(CameraGrabber_SaveImage); + GET_MVSDK_API(CameraGrabber_SaveImageAsync); + GET_MVSDK_API(CameraGrabber_SaveImageAsyncEx); + GET_MVSDK_API(CameraGrabber_SetSaveImageCompleteCallback); + GET_MVSDK_API(CameraGrabber_SetFrameListener); + GET_MVSDK_API(CameraGrabber_SetRawCallback); + GET_MVSDK_API(CameraGrabber_SetRGBCallback); + GET_MVSDK_API(CameraGrabber_GetCameraHandle); + GET_MVSDK_API(CameraGrabber_GetStat); + GET_MVSDK_API(CameraGrabber_GetCameraDevInfo); + + GET_MVSDK_API(CameraImage_Create); + GET_MVSDK_API(CameraImage_Destroy); + GET_MVSDK_API(CameraImage_GetData); + GET_MVSDK_API(CameraImage_GetUserData); + GET_MVSDK_API(CameraImage_SetUserData); + GET_MVSDK_API(CameraImage_IsEmpty); + GET_MVSDK_API(CameraImage_Draw); + GET_MVSDK_API(CameraImage_BitBlt); + GET_MVSDK_API(CameraImage_SaveAsBmp); + GET_MVSDK_API(CameraImage_SaveAsJpeg); + GET_MVSDK_API(CameraImage_SaveAsPng); + GET_MVSDK_API(CameraImage_SaveAsRaw); + +#undef GET_MVSDK_API + + return CAMERA_STATUS_SUCCESS; +} + +CameraSdkStatus UnloadCameraSdk() +{ + if (ghSDK) + { + FreeLibrary(ghSDK); + } + return CAMERA_STATUS_SUCCESS; +} +#endif + +#endif diff --git a/others/include/camera/CameraDefine.H b/others/include/camera/CameraDefine.H new file mode 100644 index 0000000..0d6474e --- /dev/null +++ b/others/include/camera/CameraDefine.H @@ -0,0 +1,961 @@ +#pragma once +#ifndef _CAMERA_DEFINE_H_ +#define _CAMERA_DEFINE_H_ + +#include "CameraStatus.h" + +#define MAX_CROSS_LINE 9 + +/// @ingroup MV_TYPEDEF +/// \~chinese 相机的句柄类型定义 +/// \~english Camera handle type definition +typedef int CameraHandle; + + + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 图像查表变换的方式 +/// \~english Image lookup table transformation +typedef enum +{ + LUTMODE_PARAM_GEN=0, ///< \~chinese 通过调节参数动态生成LUT表。 \~english Dynamically generate LUT tables by adjusting parameters. + LUTMODE_PRESET=1, ///< \~chinese 使用预设的LUT表 \~english Use a preset LUT table + LUTMODE_USER_DEF=2 ///< \~chinese 使用用户自定义的LUT表 \~english Use a user-defined LUT table +}emSdkLutMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 相机的视频流控制 +/// \~english Camera video flow control +typedef enum +{ + /// \~chinese 正常预览,捕获到图像就显示。(如果相机处于触发模式,则会等待触发帧的到来) + /// \~english Normal preview, the captured image is displayed. (If the camera is in trigger mode, it will wait for the arrival of the trigger frame) + RUNMODE_PLAY=0, + RUNMODE_PAUSE=1, ///< \~chinese 暂停,会暂停相机的图像输出,同时也不会去捕获图像 \~english Pause, will pause the camera's image output, and will not capture the image. + RUNMODE_STOP=2 ///< \~chinese 停止相机工作。反初始化后,相机就处于停止模式 \~english Stop the camera. Camera is in stop mode after deinitialization. +}emSdkRunMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese SDK内部显示接口的显示方式 +/// \~english How to display the internal display interface of the SDK +typedef enum +{ + DISPLAYMODE_SCALE=0, ///< \~chinese 缩放显示模式,缩放到显示控件的尺寸 \~english Zoom the display mode, zoom to the size of the display control + DISPLAYMODE_REAL=1, ///< \~chinese 1:1显示模式,当图像尺寸大于显示控件的尺寸时,只显示局部 \~english 1:1 display mode, when the image size is larger than the size of the display control, only the local display + DISPLAYMODE_2X=2, ///< \~chinese 放大2X \~english Zoom in 2X + DISPLAYMODE_4X=3, ///< \~chinese 放大4X \~english Zoom in 4X + DISPLAYMODE_8X=4, ///< \~chinese 放大8X \~english Zoom in 8X + DISPLAYMODE_16X=5 ///< \~chinese 放大16X \~english Zoom in 16X +}emSdkDisplayMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 录像状态 +/// \~english Recording status +typedef enum +{ + RECORD_STOP=0, ///< \~chinese 停止 \~english Stop + RECORD_START=1, ///< \~chinese 录像中 \~english Start + RECORD_PAUSE=2 ///< \~chinese 暂停 \~english Pause +}emSdkRecordMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 图像的镜像操作 +/// \~english Image mirroring operation +typedef enum +{ + MIRROR_DIRECTION_HORIZONTAL=0, ///< \~chinese 水平镜像 \~english Horizontal mirroring + MIRROR_DIRECTION_VERTICAL=1 ///< \~chinese 垂直镜像 \~english Vertical mirroring +}emSdkMirrorDirection; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 图像的旋转操作 +/// \~english Rotation of the image +typedef enum +{ + ROTATE_DIRECTION_0=0, ///< \~chinese 不旋转 \~english Do not rotate + ROTATE_DIRECTION_90=1, ///< \~chinese 逆时针90度 \~english Counterclockwise 90 degrees + ROTATE_DIRECTION_180=2, ///< \~chinese 逆时针180度 \~english Counterclockwise 180 degrees + ROTATE_DIRECTION_270=3, ///< \~chinese 逆时针270度 \~english Counterclockwise 270 degrees +}emSdkRotateDirection; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 相机视频的帧率 +/// \~english Camera video frame rate +typedef enum +{ + FRAME_SPEED_LOW=0, ///< \~chinese 低速模式 \~english Low Speed + FRAME_SPEED_NORMAL=1, ///< \~chinese 普通模式 \~english Normal Speed + FRAME_SPEED_HIGH=2, ///< \~chinese 高速模式(需要较高的传输带宽,多设备共享传输带宽时会对帧率的稳定性有影响) \~english High Speed + FRAME_SPEED_SUPER=3 ///< \~chinese 超高速模式(需要较高的传输带宽,多设备共享传输带宽时会对帧率的稳定性有影响) \~english Super Speed +}emSdkFrameSpeed; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 保存文件的格式类型 +/// \~english Save file format type +typedef enum +{ + FILE_JPG = 1, ///< \~chinese JPG \~english JPG + FILE_BMP = 2, ///< \~chinese BMP 24bit \~english BMP 24bit + FILE_RAW = 4, ///< \~chinese RAW \~english RAW + FILE_PNG = 8, ///< \~chinese PNG 24bit \~english PNG 24bit + FILE_BMP_8BIT = 16, ///< \~chinese BMP 8bit \~english BMP 8bit + FILE_PNG_8BIT = 32, ///< \~chinese PNG 8bit \~english PNG 8bit + FILE_RAW_16BIT = 64 ///< \~chinese RAW 16bit \~english RAW 16bit +}emSdkFileType; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 相机中的图像传感器的工作模式 +/// \~english Image Sensor Operation Mode in Camera +typedef enum +{ + /// \~chinese 连续采集模式 + /// \~english Continuous acquisition mode + CONTINUATION=0, + + /// \~chinese 软件触发模式,由软件发送指令后,传感器开始采集指定帧数的图像,采集完成后,停止输出 + /// \~english Software trigger mode. After the software sends the instruction, the sensor starts to capture the image of the specified frame number. After the acquisition is completed, the output is stopped. + SOFT_TRIGGER=1, + + /// \~chinese 硬件触发模式,当接收到外部信号,传感器开始采集指定帧数的图像,采集完成后,停止输出 + /// \~english In the hardware trigger mode, when receiving an external signal, the sensor starts to capture the image of the specified frame number. After the acquisition is completed, the output is stopped. + EXTERNAL_TRIGGER=2 +} emSdkSnapMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 自动曝光时抗频闪的频率 +/// \~english Anti-strobe frequency at auto exposure +typedef enum +{ + /// \~chinese 50HZ,一般的灯光都是50HZ + /// \~english 50HZ, the general lighting is 50HZ + LIGHT_FREQUENCY_50HZ=0, + + /// \~chinese 60HZ,主要是指显示器的 + /// \~english 60HZ, mainly refers to the monitor + LIGHT_FREQUENCY_60HZ=1 +}emSdkLightFrequency; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 相机的配置参数,分为A,B,C,D 4组进行保存。 +/// \~english The camera configuration parameters are divided into groups A, B, C, and D for preservation. +typedef enum +{ + PARAMETER_TEAM_DEFAULT = 0xff, ///< \~chinese 默认参数 \~english Default parameters + PARAMETER_TEAM_A = 0, ///< \~chinese 参数A \~english parametersA + PARAMETER_TEAM_B = 1, ///< \~chinese 参数B \~english parametersB + PARAMETER_TEAM_C = 2, ///< \~chinese 参数C \~english parametersC + PARAMETER_TEAM_D = 3 ///< \~chinese 参数D \~english parametersD +}emSdkParameterTeam; + + +/// @ingroup MV_ENUM_TYPE +/// \~chinese +/// \brief 相机参数加载模式 +/// \note 您可以根据自己的使用环境,灵活使用以上几种方式加载参数。例如,以 +/// \note MV-U300为例,您希望多台该型号的相机在您的 电脑上都共用4组参数,那么就 +/// \note 使用PARAM_MODE_BY_MODEL方式;如果您希望其中某一台或者某几台MV-U300能 +/// \note 使用自己参数文件而其余的MV-U300又要使用相同的参数文件,那么使用 +/// \note PARAM_MODE_BY_NAME方式;如果您希望每台MV-U300都使用不同的参数文件,那么 +/// \note 使用PARAM_MODE_BY_SN方式。 +/// \note 参数文件存在安装目录的 \\Camera\\Configs 目录下,以config为后缀名的文件。 +/// \~english +/// \brief Camera parameter loading mode +/// \note You can use the above several ways to load parameters according to your own environment. For example, with +/// \note MV-U300 as an example, you want multiple cameras of this model to share 4 sets of parameters on your computer. +/// \note Use the PARAM_MODE_BY_MODEL method; if you want one or more of the MV-U300s +/// \note Use your own parameter file and the rest of the MV-U300 use the same parameter file again, then use +/// \note PARAM_MODE_BY_NAME way; if you want each MV-U300 to use a different parameter file, then +/// \note Use the PARAM_MODE_BY_SN method. +/// \note The parameter file exists in the \\Camera\\Configs directory of the installation directory, with a config extension file. +typedef enum +{ + /// \~chinese 根据相机型号名从文件中加载参数,例如MV-U300 + /// \note 所有同型号的相机共用ABCD四组参数文件。修改一台相机的参数文件,会影响到整个同型号的相机参数加载。 + /// \~english Load parameters from a file based on the camera model name, such as the MV-U300 + /// \note All ABCD four-group parameter files are shared by all cameras of the same model. Modifying a camera's parameter file will affect the entire camera model parameter loading. + PARAM_MODE_BY_MODEL=0, + + /// \~chinese 根据设备昵称(tSdkCameraDevInfo.acFriendlyName)从文件中加载参数,例如MV-U300,该昵称可自定义 + /// \note 所有设备名相同的相机,共用ABCD四组参数文件。 + /// \note 默认情况下,当电脑上只接了某型号一台相机时, + /// \note 设备名都是一样的,而您希望某一台相机能够加载 + /// \note 不同的参数文件,则可以通过修改其设备名的方式 + /// \note 来让其加载指定的参数文件。 + /// \~english Load parameters from a file based on device nickname (tSdkCameraDevInfo.acFriendlyName), such as MV-U300, which can be customized + /// \note All cameras with the same device name share the four ABCD parameter files. + /// \note By default, when only one model of a camera is connected to the computer, + /// \note The device name is the same, and you want a camera to load + /// \note different parameter files, you can modify the device name + /// \note to have it load the specified parameter file. + PARAM_MODE_BY_NAME=1, + + /// \~chinese 根据设备的唯一序列号从文件中加载参数,序列号在出厂时已经写入设备,每台相机拥有不同的序列号。 + /// \note 相机按照自己的唯一序列号来加载ABCD四组参数文件, + /// \note 序列号在出厂时已经固化在相机内,每台相机的序列号 + /// \note 都不相同,通过这种方式,每台相机的参数文件都是独立的。 + /// \~english The parameters are loaded from the file according to the unique serial number of the device. The serial number is already written to the device at the factory and each camera has a different serial number. + /// \note The camera loads ABCD four sets of parameter files according to their unique serial number. + /// \note The serial number has been fixed in the camera at the factory, the serial number of each camera + /// \note is not the same. In this way, the parameter files for each camera are independent. + PARAM_MODE_BY_SN=2, + + /// \~chinese 从设备的固态存储器中加载参数。不是所有的型号都支持从相机中读写参数组,由tSdkCameraCapbility.bParamInDevice决定 + /// \~english Load parameters from the device's solid-state memory. Not all models support reading and writing parameters from the camera, as determined by tSdkCameraCapbility.bParamInDevice + PARAM_MODE_IN_DEVICE=3 +}emSdkParameterMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese SDK生成的相机配置页面掩码值 +/// \~english SDK generated camera configuration page mask values +typedef enum +{ + PROP_SHEET_INDEX_EXPOSURE=0, ///< \~chinese 曝光设置 \~english Exposure Settings + PROP_SHEET_INDEX_ISP_COLOR=1, ///< \~chinese 颜色矩阵设置 \~english Color Matrix Settings + PROP_SHEET_INDEX_ISP_LUT=2, ///< \~chinese LUT设置 \~english LUT setting + PROP_SHEET_INDEX_ISP_SHAPE=3, ///< \~chinese 变换设置 \~english transform settings + PROP_SHEET_INDEX_VIDEO_FORMAT=4, ///< \~chinese 格式设置 \~english Formatting + PROP_SHEET_INDEX_RESOLUTION=5, ///< \~chinese 分辨率设置 \~english resolution setting + PROP_SHEET_INDEX_IO_CTRL=6, ///< \~chinese IO控制 \~english IO control + PROP_SHEET_INDEX_TRIGGER_SET=7, ///< \~chinese 触发模式 \~english trigger setting + PROP_SHEET_INDEX_OVERLAY=8, ///< \~chinese 十字线 \~english Crosshair + PROP_SHEET_INDEX_DEVICE_INFO=9, ///< \~chinese 设备信息 \~english Device Information + PROP_SHEET_INDEX_WDR=10 ///< \~chinese 宽动态 \~english Wide Dynamic +}emSdkPropSheetMask; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese SDK生成的相机配置页面的回调消息类型 +/// \~english SDK callback camera configuration page callback message type +typedef enum +{ + SHEET_MSG_LOAD_PARAM_DEFAULT=0, ///< \~chinese 参数被恢复成默认后,触发该消息 \~english After the parameter is restored to the default, the message is triggered + SHEET_MSG_LOAD_PARAM_GROUP=1, ///< \~chinese 加载指定参数组,触发该消息 \~english Load the specified parameter group and trigger the message + SHEET_MSG_LOAD_PARAM_FROMFILE=2, ///< \~chinese 从指定文件加载参数后,触发该消息 \~english Fires the message after loading parameters from the specified file + SHEET_MSG_SAVE_PARAM_GROUP=3 ///< \~chinese 当前参数组被保存时,触发该消息 \~english Trigger this message when the current parameter group is saved +}emSdkPropSheetMsg; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 可视化选择参考窗口的类型 +/// \~english Visualize the type of reference window +typedef enum +{ + REF_WIN_AUTO_EXPOSURE=0, ///< \~chinese 自动曝光窗口 \~english Automatic exposure window + REF_WIN_WHITE_BALANCE=1, ///< \~chinese 白平衡窗口 \~english White balance window +}emSdkRefWinType; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 可视化选择参考窗口的类型 +/// \~english Visualize the type of reference window +typedef enum +{ + RES_MODE_PREVIEW=0, ///< \~chinese 预览 \~english Preview + RES_MODE_SNAPSHOT=1, ///< \~chinese 抓拍 \~english Snapshot +}emSdkResolutionMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 白平衡时色温模式 +/// \~english White balance color temperature mode +typedef enum +{ + CT_MODE_AUTO=0, ///< \~chinese 自动识别色温 \~english Automatically recognize color temperature + CT_MODE_PRESET=1, ///< \~chinese 使用指定的预设色温 \~english Use the specified preset color temperature + CT_MODE_USER_DEF=2 ///< \~chinese 自定义色温(增益和矩阵) \~english Custom color temperature (gain and matrix) +}emSdkClrTmpMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese LUT的颜色通道 +/// \~english LUT color channel +typedef enum +{ + LUT_CHANNEL_ALL=0, ///< \~chinese R,B,G三通道同时调节 \~english R, B, G simultaneous adjustment of three channels + LUT_CHANNEL_RED=1, ///< \~chinese 红色通道 \~english Red channel + LUT_CHANNEL_GREEN=2, ///< \~chinese 绿色通道 \~english Green channel + LUT_CHANNEL_BLUE=3, ///< \~chinese 蓝色通道 \~english Blue channel +}emSdkLutChannel; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese ISP处理单元 +/// \~english ISP processing unit +typedef enum +{ + ISP_PROCESSSOR_PC=0, ///< \~chinese 使用PC的软件ISP模块 \~english Use software ISP module of PC + ISP_PROCESSSOR_DEVICE=1 ///< \~chinese 使用相机自带的硬件ISP模块 \~english Use the camera's own hardware ISP module +}emSdkIspProcessor; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 闪光灯信号控制方式 +/// \~english Strobe signal control method +typedef enum +{ + STROBE_SYNC_WITH_TRIG_AUTO=0, ///< \~chinese 和触发信号同步,触发后,相机进行曝光时,自动生成STROBE信号。此时,有效极性可设置(@link #CameraSetStrobePolarity @endlink)。 \~english Synchronized with the trigger signal, the STROBE signal is automatically generated when the camera performs exposure. At this point, the effective polarity can be set (@link #CameraSetStrobePolarity @endlink). + STROBE_SYNC_WITH_TRIG_MANUAL=1, ///< \~chinese 和触发信号同步,触发后,STROBE延时指定的时间后(@link #CameraSetStrobeDelayTime @endlink),再持续指定时间的脉冲(@link #CameraSetStrobePulseWidth @endlink),有效极性可设置(@link #CameraSetStrobePolarity @endlink)。 \~english Synchronized with the trigger signal. After the trigger, STROBE is delayed by the specified time (@link #CameraSetStrobeDelayTime @endlink) and continues for the specified time (@link #CameraSetStrobePulseWidth @endlink). The effective polarity can be set (@link #CameraSetStrobePolarity @endlink). + STROBE_ALWAYS_HIGH=2, ///< \~chinese 始终为高,忽略STROBE信号的其他设置 \~english Always high, ignoring other settings of the STROBE signal + STROBE_ALWAYS_LOW=3 ///< \~chinese 始终为低,忽略STROBE信号的其他设置 \~english Always low, ignoring other settings of the STROBE signal +}emStrobeControl; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 硬件外触发的信号种类 +/// \~english Signal types triggered by hardware +typedef enum +{ + EXT_TRIG_LEADING_EDGE=0, ///< \~chinese 上升沿触发,默认为该方式 \~english Rising edge trigger, default is this method + EXT_TRIG_TRAILING_EDGE=1, ///< \~chinese 下降沿触发 \~english Falling edge trigger + EXT_TRIG_HIGH_LEVEL=2, ///< \~chinese 高电平触发,电平宽度决定曝光时间,仅部分型号的相机支持电平触发方式。 \~english The high level triggers, the level width determines the exposure time, only some models of cameras support level triggering. + EXT_TRIG_LOW_LEVEL=3, ///< \~chinese 低电平触发 \~english Low level trigger + EXT_TRIG_DOUBLE_EDGE=4, ///< \~chinese 双边沿触发 \~english Bilateral trigger +}emExtTrigSignal; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 硬件外触发时的快门方式 +/// \~english Shutter mode when triggered by hardware +typedef enum +{ + EXT_TRIG_EXP_STANDARD=0, ///< \~chinese 标准方式,默认为该方式。 \~english Standard mode, the default is this mode. + EXT_TRIG_EXP_GRR=1, ///< \~chinese 全局复位方式,部分滚动快门的CMOS型号的相机支持该方式,配合外部机械快门,可以达到全局快门的效果,适合拍高速运动的物体 \~english Global reset mode, part of the rolling shutter CMOS model camera supports this method, with the external mechanical shutter, you can achieve the effect of a global shutter, suitable for shooting high-speed objects +}emExtTrigShutterMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 清晰度评估算法 +/// \~english Sharpness assessment algorithm +typedef enum +{ + EVALUATE_DEFINITION_DEVIATION=0, ///< \~chinese 方差法 \~english Variance method + EVALUATE_DEFINITION_SMD=1, ///< \~chinese 相邻像素灰度方差法 \~english Adjacent Pixel Gray Difference Method + EVALUATE_DEFINITION_GRADIENT=2, ///< \~chinese 梯度统计 \~english Gradient statistics + EVALUATE_DEFINITION_SOBEL=3, ///< \~chinese Sobel \~english Sobel + EVALUATE_DEFINITION_ROBERT=4, ///< \~chinese Robert \~english Robert + EVALUATE_DEFINITION_LAPLACE=5, ///< \~chinese Laplace \~english Laplace + + EVALUATE_DEFINITION_ALG_MAX=6, ///< \~chinese 算法个数 \~english The number of algorithms +}emEvaluateDefinitionAlgorith; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 文字输出标志 +/// \~english Text output flag +typedef enum +{ + CAMERA_DT_VCENTER = 0x1, ///< \~chinese 垂直居中 \~english Vertically centered + CAMERA_DT_BOTTOM = 0x2, ///< \~chinese 底部对齐 \~english Bottom alignment + CAMERA_DT_HCENTER = 0x4, ///< \~chinese 水平居中 \~english Horizontally centered + CAMERA_DT_RIGHT = 0x8, ///< \~chinese 右对齐 \~english Right alignment + CAMERA_DT_SINGLELINE = 0x10, ///< \~chinese 单行显示 \~english Single-line display + CAMERA_DT_ALPHA_BLEND = 0x20, ///< \~chinese Alpha混合 \~english Alpha blend + CAMERA_DT_ANTI_ALIASING = 0x40, ///< \~chinese 抗锯齿 \~english Anti-aliasing +}emCameraDrawTextFlags; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese GPIO模式 +/// \~english GPIO Mode +typedef enum +{ + IOMODE_TRIG_INPUT=0, ///< \~chinese 触发输入 \~english Trigger input + IOMODE_STROBE_OUTPUT=1, ///< \~chinese 闪光灯输出 \~english Strobe output + IOMODE_GP_INPUT=2, ///< \~chinese 通用型输入 \~english Universal input + IOMODE_GP_OUTPUT=3, ///< \~chinese 通用型输出 \~english Universal output + IOMODE_PWM_OUTPUT=4, ///< \~chinese PWM型输出 \~english PWM output +}emCameraGPIOMode; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 取图优先级 +/// \~english Get Image priority +typedef enum +{ + CAMERA_GET_IMAGE_PRIORITY_OLDEST=0, ///< \~chinese 获取缓存中最旧的一帧 \~english Get the oldest frame in the cache + CAMERA_GET_IMAGE_PRIORITY_NEWEST=1, ///< \~chinese 获取缓存中最新的一帧(比此帧旧的将全部丢弃) \~english Get the latest frame in the cache (older than this frame will be discarded) + + /// \~chinese 丢弃缓存中的所有帧,并且如果此刻相机正在曝光或传输将会被立即打断,等待接收下一帧 + /// \note 某些型号的相机不支持此功能,对于不支持此功能的相机这个标志相当于@link #CAMERA_GET_IMAGE_PRIORITY_OLDEST @endlink + /// \~english All frames in the cache are discarded, and if the camera is now being exposed or transmitted it will be immediately interrupted, waiting to receive the next frame + /// \note Some models do not support this feature. For cameras that do not support this feature this flag is equivalent to @link #CAMERA_GET_IMAGE_PRIORITY_OLDEST @endlink + CAMERA_GET_IMAGE_PRIORITY_NEXT=2, +}emCameraGetImagePriority; + +/// @ingroup MV_ENUM_TYPE +/// \~chinese 软触发功能标志 +/// \~english Soft trigger function flag +typedef enum +{ + CAMERA_ST_CLEAR_BUFFER_BEFORE = 0x1, ///< \~chinese 在软触发之前先清空相机已缓存的帧 \~english Empty camera-cached frames before soft triggering +}emCameraSoftTriggerExFlags; + +/// \~chinese 相机的设备信息 +/// \~english Camera device information +typedef struct +{ + char acProductSeries[32]; ///< \~chinese 产品系列 \~english Product Series + char acProductName[32]; ///< \~chinese 产品名称 \~english product name + + /// \~chinese 产品昵称,用户可自定义改昵称,保存在相机内,用于区分多个相机同时使用,可以用@link #CameraSetFriendlyName @endlink接口改变该昵称,设备重启后生效。 + /// \~english Product nicknames, users can customize the nickname, saved in the camera, used to distinguish between multiple cameras at the same time, you can use the @link #CameraSetFriendlyName @endlink interface to change the nickname, the device takes effect after restart. + char acFriendlyName[32]; + char acLinkName[32]; ///< \~chinese 内核符号连接名,内部使用 \~english Kernel symbolic connection name, internal use + char acDriverVersion[32]; ///< \~chinese 驱动版本 \~english Driver version + char acSensorType[32]; ///< \~chinese sensor类型 \~english Sensor type + char acPortType[32]; ///< \~chinese 接口类型 \~english Interface Type + char acSn[32]; ///< \~chinese 产品唯一序列号 \~english Product unique serial number + UINT uInstance; ///< \~chinese 该型号相机在该电脑上的实例索引号,用于区分同型号多相机 \~english The example index number of this model camera on this computer, used to distinguish the same model multiple cameras +} tSdkCameraDevInfo; + +/// @ingroup MV_MACRO_TYPE +/// @{ +#define EXT_TRIG_MASK_GRR_SHUTTER 1 ///< \~chinese 快门支持GRR模式 \~english Shutter supports GRR mode +#define EXT_TRIG_MASK_LEVEL_MODE 2 ///< \~chinese 支持电平触发 \~english Support level trigger +#define EXT_TRIG_MASK_DOUBLE_EDGE 4 ///< \~chinese 支持双边沿触发 \~english Supports bilateral triggering + +//tSdkResolutionRange结构体中SKIP、 BIN、RESAMPLE模式的掩码值 +#define MASK_2X2_HD (1<<0) //硬件SKIP、BIN、重采样 2X2 +#define MASK_3X3_HD (1<<1) +#define MASK_4X4_HD (1<<2) +#define MASK_5X5_HD (1<<3) +#define MASK_6X6_HD (1<<4) +#define MASK_7X7_HD (1<<5) +#define MASK_8X8_HD (1<<6) +#define MASK_9X9_HD (1<<7) +#define MASK_10X10_HD (1<<8) +#define MASK_11X11_HD (1<<9) +#define MASK_12X12_HD (1<<10) +#define MASK_13X13_HD (1<<11) +#define MASK_14X14_HD (1<<12) +#define MASK_15X15_HD (1<<13) +#define MASK_16X16_HD (1<<14) +#define MASK_17X17_HD (1<<15) +#define MASK_2X2_SW (1<<16) //软件SKIP、BIN、重采样 2X2 +#define MASK_3X3_SW (1<<17) +#define MASK_4X4_SW (1<<18) +#define MASK_5X5_SW (1<<19) +#define MASK_6X6_SW (1<<20) +#define MASK_7X7_SW (1<<21) +#define MASK_8X8_SW (1<<22) +#define MASK_9X9_SW (1<<23) +#define MASK_10X10_SW (1<<24) +#define MASK_11X11_SW (1<<25) +#define MASK_12X12_SW (1<<26) +#define MASK_13X13_SW (1<<27) +#define MASK_14X14_SW (1<<28) +#define MASK_15X15_SW (1<<29) +#define MASK_16X16_SW (1<<30) +#define MASK_17X17_SW (1<<31) +/// @} + +/// \~chinese 相机的分辨率设定范围,可用于构件UI +/// \~english Camera resolution setting range, can be used for component UI +typedef struct +{ + INT iHeightMax; ///< \~chinese 图像最大高度 \~english Maximum image height + INT iHeightMin; ///< \~chinese 图像最小高度 \~english Image minimum height + INT iWidthMax; ///< \~chinese 图像最大宽度 \~english The maximum width of the image + INT iWidthMin; ///< \~chinese 图像最小宽度 \~english The minimum width of the image + UINT uSkipModeMask; ///< \~chinese SKIP模式掩码,为0,表示不支持SKIP 。bit0为1,表示支持SKIP 2x2 ;bit1为1,表示支持SKIP 3x3.... \~english The SKIP mode mask, which is 0, indicates that SKIP is not supported. Bit0 is 1 to indicate that SKIP 2x2 is supported; bit1 is 1 to indicate that SKIP 3x3 is supported.... + UINT uBinSumModeMask; ///< \~chinese BIN(求和)模式掩码,为0,表示不支持BIN 。bit0为1,表示支持BIN 2x2 ;bit1为1,表示支持BIN 3x3.... \~english The BIN (sum) pattern mask, which is 0, indicates that BIN is not supported. Bit0 is 1, indicating that BIN 2x2 is supported; bit1 is 1, indicating that BIN 3x3 is supported.... + UINT uBinAverageModeMask; ///< \~chinese BIN(求均值)模式掩码,为0,表示不支持BIN 。bit0为1,表示支持BIN 2x2 ;bit1为1,表示支持BIN 3x3.... \~english The BIN (mean value) mode mask, which is 0, indicates that BIN is not supported. Bit0 is 1, indicating that BIN 2x2 is supported; bit1 is 1, indicating that BIN 3x3 is supported.... + UINT uResampleMask; ///< \~chinese 硬件重采样的掩码 \~english Hardware resampling mask +} tSdkResolutionRange; + +/// \~chinese 相机的分辨率描述 +/// \~english Camera resolution description +typedef struct +{ + INT iIndex; ///< \~chinese 索引号,[0,N]表示预设的分辨率(N 为预设分辨率的最大个数,一般不超过20),OXFF 表示自定义分辨率(ROI) \~english Index number, [0, N] indicates the preset resolution (N is the maximum number of preset resolutions, generally no more than 20), OXFF indicates custom resolution (ROI) + char acDescription[32]; ///< \~chinese 该分辨率的描述信息。仅预设分辨率时该信息有效。自定义分辨率可忽略该信息 \~english The description of the resolution. This information is valid only when the resolution is preset. Custom resolution ignores this information + UINT uBinSumMode; ///< \~chinese BIN(求和)的模式,范围不能超过tSdkResolutionRange.uBinSumModeMask \~english The BIN (sum) mode cannot exceed the tSdkResolutionRange.uBinSumModeMask + UINT uBinAverageMode; ///< \~chinese BIN(求均值)的模式,范围不能超过tSdkResolutionRange.uBinAverageModeMask \~english BIN (average) mode, the range cannot exceed tSdkResolutionRange.uBinAverageModeMask + UINT uSkipMode; ///< \~chinese 是否SKIP的尺寸,为0表示禁止SKIP模式,范围不能超过tSdkResolutionRange.uSkipModeMask \~english Whether the SKIP size is 0 indicates that the SKIP mode is disabled and the range cannot exceed the tSdkResolutionRange.uSkipModeMask + UINT uResampleMask; ///< \~chinese 硬件重采样的掩码 \~english Hardware resampling mask + INT iHOffsetFOV; ///< \~chinese 采集视场相对于Sensor最大视场左上角的水平偏移 \~english The horizontal offset of the acquisition field of view relative to the top left corner of the Sensor's largest field of view + INT iVOffsetFOV; ///< \~chinese 采集视场相对于Sensor最大视场左上角的垂直偏移 \~english The vertical offset of the acquisition field of view relative to the upper left corner of the Sensor's largest field of view + INT iWidthFOV; ///< \~chinese 采集视场的宽度 \~english The width of the field of view + INT iHeightFOV; ///< \~chinese 采集视场的高度 \~english The height of the field of view + INT iWidth; ///< \~chinese 相机最终输出的图像的宽度 \~english The width of the final output image of the camera + INT iHeight; ///< \~chinese 相机最终输出的图像的高度 \~english The height of the final output image of the camera + INT iWidthZoomHd; ///< \~chinese 硬件缩放的宽度,不需要进行此操作的分辨率,此变量设置为0. \~english The width of the hardware zoom, resolution that does not require this operation, this variable is set to 0. + INT iHeightZoomHd; ///< \~chinese 硬件缩放的高度,不需要进行此操作的分辨率,此变量设置为0. \~english The height of the hardware zoom, resolution that does not require this operation, this variable is set to 0. + INT iWidthZoomSw; ///< \~chinese 软件缩放的宽度,不需要进行此操作的分辨率,此变量设置为0. \~english The width of the software's zoom, which does not require the resolution of this operation, this variable is set to 0. + INT iHeightZoomSw; ///< \~chinese 软件缩放的高度,不需要进行此操作的分辨率,此变量设置为0. \~english The height of the software's zoom, which does not require the resolution of this operation, this variable is set to 0. +} tSdkImageResolution; + +/// \~chinese 相机白平衡色温模式描述信息 +/// \~english Camera white balance color temperature mode description information +typedef struct +{ + INT iIndex; ///< \~chinese 模式索引号 \~english Mode index number + char acDescription[32]; ///< \~chinese 描述信息 \~english Description +} tSdkColorTemperatureDes; + +/// \~chinese 相机帧率描述信息 +/// \~english Camera frame rate description information +typedef struct +{ + INT iIndex; ///< \~chinese 帧率索引号,一般0对应于低速模式,1对应于普通模式,2对应于高速模式 \~english Frame rate index number, generally 0 corresponds to low speed mode, 1 corresponds to normal mode, 2 corresponds to high speed mode + char acDescription[32]; ///< \~chinese 描述信息 \~english Description +} tSdkFrameSpeed; + +/// \~chinese 相机曝光功能范围定义 +/// \see tSdkCameraCapbility.sExposeDesc +/// \~english Camera exposure function scope definition +/// \see tSdkCameraCapbility.sExposeDesc +typedef struct +{ + UINT uiTargetMin; ///< \~chinese 自动曝光亮度目标最小值 \~english Auto exposure brightness target minimum + UINT uiTargetMax; ///< \~chinese 自动曝光亮度目标最大值 \~english Auto exposure brightness target maximum + UINT uiAnalogGainMin; ///< \~chinese 模拟增益的最小值,单位为fAnalogGainStep中定义 \~english The minimum value of the analog gain in fAnalog defined in GainStep + UINT uiAnalogGainMax; ///< \~chinese 模拟增益的最大值,单位为fAnalogGainStep中定义 \~english The maximum value of the analog gain in fAnalog defined in GainStep + float fAnalogGainStep; ///< \~chinese 模拟增益每增加1,对应的增加的放大倍数。例如,uiAnalogGainMin一般为16,fAnalogGainStep一般为0.125,那么最小放大倍数就是16*0.125 = 2倍 \~english Each increase in analog gain corresponds to an increased amplification factor. For example, uiAnalogGainMin is generally 16 and fAnalogGainStep is generally 0.125, so the minimum magnification is 16*0.125 = 2 times + UINT uiExposeTimeMin; ///< \~chinese 手动模式下,曝光时间的最小值,单位:行。根据CameraGetExposureLineTime可以获得一行对应的时间(微秒),从而得到整帧的曝光时间 \~english The minimum exposure time in manual mode, unit: line. According to CameraGetExposureLineTime can get a row of corresponding time (microseconds) to get the entire frame exposure time + UINT uiExposeTimeMax; ///< \~chinese 手动模式下,曝光时间的最大值,单位:行 \~english Maximum exposure time in manual mode, unit: line +} tSdkExpose; + +/// \~chinese 触发模式描述 +/// \~english Trigger mode description +typedef struct +{ + INT iIndex; ///< \~chinese 模式索引号 \~english Mode index number + char acDescription[32]; ///< \~chinese 该模式的描述信息 \~english Description information of this mode +} tSdkTrigger; + +/// \~chinese 传输分包大小描述(针对某些网络相机有效) +/// \~english Transmission packet size description (valid for some web cameras) +typedef struct +{ + INT iIndex; ///< \~chinese 分包大小索引号 \~english Packet size index number + char acDescription[32]; ///< \~chinese 对应的描述信息 \~english Corresponding description information + UINT iPackSize; ///< \~chinese 包大小 \~english Packet size +} tSdkPackLength; + +/// \~chinese 预设的LUT表描述 +/// \~english Preset LUT Table Description +typedef struct +{ + INT iIndex; ///< \~chinese 索引 \~english index + char acDescription[32]; ///< \~chinese 描述信息 \~english description +} tSdkPresetLut; + +/// \~chinese AE算法描述 +/// \~english AE algorithm description +typedef struct +{ + INT iIndex; ///< \~chinese 索引 \~english index + char acDescription[32]; ///< \~chinese 描述信息 \~english description +} tSdkAeAlgorithm; + +/// \~chinese RAW转RGB算法描述 +/// \~english RAW to RGB algorithm description +typedef struct +{ + INT iIndex; ///< \~chinese 索引 \~english index + char acDescription[32]; ///< \~chinese 描述信息 \~english description +} tSdkBayerDecodeAlgorithm; + +/// \~chinese 帧统计信息 +/// \~english Frame statistics +typedef struct +{ + INT iTotal; ///< \~chinese 当前采集的总帧数(包括错误帧) \~english The current total number of frames collected (including error frames) + INT iCapture; ///< \~chinese 当前采集的有效帧的数量 \~english The number of valid frames currently collected + INT iLost; ///< \~chinese 当前丢帧的数量 \~english Current number of dropped frames +} tSdkFrameStatistic; + +/// \~chinese 相机输出的图像数据格式 +/// \~english Camera output image data format +typedef struct +{ + INT iIndex; ///< \~chinese 格式种类编号 \~english Format type number + char acDescription[32]; ///< \~chinese 描述信息 \~english description + UINT iMediaType; ///< \~chinese 对应的图像格式编码,如CAMERA_MEDIA_TYPE_BAYGR8。 \~english Corresponding image format encoding, such as CAMERA_MEDIA_TYPE_BAYGR8. +} tSdkMediaType; + +/// \~chinese 伽马的设定范围 +/// \~english Gamma setting range +typedef struct +{ + INT iMin; ///< \~chinese 最小值 \~english min + INT iMax; ///< \~chinese 最大值 \~english max +} tGammaRange; + +/// \~chinese 对比度的设定范围 +/// \~english Contrast setting range +typedef struct +{ + INT iMin; ///< \~chinese 最小值 \~english min + INT iMax; ///< \~chinese 最大值 \~english max +} tContrastRange; + +/// \~chinese RGB三通道数字增益的设定范围 +/// \~english RGB three channel digital gain setting range +typedef struct +{ + INT iRGainMin; ///< \~chinese 红色增益的最小值 \~english Red gain minimum + INT iRGainMax; ///< \~chinese 红色增益的最大值 \~english Red gain maximum + INT iGGainMin; ///< \~chinese 绿色增益的最小值 \~english Green gain minimum + INT iGGainMax; ///< \~chinese 绿色增益的最大值 \~english Green gain maximum + INT iBGainMin; ///< \~chinese 蓝色增益的最小值 \~english Blue gain minimum + INT iBGainMax; ///< \~chinese 蓝色增益的最大值 \~english blue gain maximum +} tRgbGainRange; + +/// \~chinese 饱和度设定的范围 +/// \~english Saturation setting range +typedef struct +{ + INT iMin; ///< \~chinese 最小值 \~english min + INT iMax; ///< \~chinese 最大值 \~english max +} tSaturationRange; + +/// \~chinese 锐化的设定范围 +/// \~english Sharpening setting range +typedef struct +{ + INT iMin; ///< \~chinese 最小值 \~english min + INT iMax; ///< \~chinese 最大值 \~english max +} tSharpnessRange; + +/// \~chinese ISP模块的使能信息 +/// \~english ISP module enable information +typedef struct +{ + BOOL bMonoSensor; ///< \~chinese 表示该型号相机是否为黑白相机,如果是黑白相机,则颜色相关的功能都无法调节 \~english Indicates whether this model is a black-and-white camera. If it is a black-and-white camera, color-related functions cannot be adjusted. + BOOL bWbOnce; ///< \~chinese 表示该型号相机是否支持手动白平衡功能 \~english Indicates whether this model camera supports manual white balance function + BOOL bAutoWb; ///< \~chinese 表示该型号相机是否支持自动白平衡功能 \~english Indicates whether this model camera supports automatic white balance function + BOOL bAutoExposure; ///< \~chinese 表示该型号相机是否支持自动曝光功能 \~english Indicates whether this model camera supports auto exposure function + BOOL bManualExposure; ///< \~chinese 表示该型号相机是否支持手动曝光功能 \~english Indicates whether this model camera supports manual exposure function + BOOL bAntiFlick; ///< \~chinese 表示该型号相机是否支持抗频闪功能 \~english Indicates whether this model camera supports anti-strobe function + BOOL bDeviceIsp; ///< \~chinese 表示该型号相机是否支持硬件ISP功能 \~english Indicates whether this model camera supports hardware ISP function + BOOL bForceUseDeviceIsp;///< \~chinese bDeviceIsp和bForceUseDeviceIsp同时为TRUE时,表示强制只用硬件ISP,不可取消。 \~english When both bDeviceIsp and bForceUseDeviceIsp are TRUE, this means that only the hardware ISP is forced and cannot be cancelled. + BOOL bZoomHD; ///< \~chinese 相机硬件是否支持图像缩放输出(只能是缩小)。 \~english Whether the camera hardware supports image scaling output (can only be reduced). +} tSdkIspCapacity; + +/// \~chinese 定义整合的设备描述信息,这些信息可以用于动态构建UI +/// \note 调用@link #CameraGetCapability @endlink获取本结构 +/// \~english Define integrated device description information that can be used to dynamically build UI +/// \note call @link #CameraGetCapability @endlink to get this structure +typedef struct +{ + + tSdkTrigger *pTriggerDesc; ///< \~chinese 触发模式 \~english trigger mode + INT iTriggerDesc; ///< \~chinese 触发模式的个数,即pTriggerDesc数组的大小 \~english The number of trigger modes, that is, the size of the pTriggerDesc array + + tSdkImageResolution *pImageSizeDesc;///< \~chinese 预设分辨率 \~english Preset resolution + INT iImageSizeDesc; ///< \~chinese 预设分辨率的个数,即pImageSizeDesc数组的大小 \~english The number of preset resolutions, that is, the size of the pImageSizeDesc array + + tSdkColorTemperatureDes *pClrTempDesc;///< \~chinese 预设色温,用于白平衡 \~english Preset color temperature for white balance + INT iClrTempDesc; ///< \~chinese 预设色温个数 \~english The number of preset color temperatures + + tSdkMediaType *pMediaTypeDesc; ///< \~chinese 相机输出图像格式 \~english Camera output image format + INT iMediaTypdeDesc; ///< \~chinese 相机输出图像格式的种类个数,即pMediaTypeDesc数组的大小。 \~english The number of types of camera output image formats, that is, the size of the pMediaTypeDesc array. + + tSdkFrameSpeed *pFrameSpeedDesc; ///< \~chinese 可调节帧速类型,对应界面上普通 高速 和超级三种速度设置 \~english Adjustable frame rate type, normal high speed and super three speed settings on the corresponding interface + INT iFrameSpeedDesc; ///< \~chinese 可调节帧速类型的个数,即pFrameSpeedDesc数组的大小。 \~english The number of frame rate types that can be adjusted, that is, the size of the pFrameSpeedDesc array. + + tSdkPackLength *pPackLenDesc; ///< \~chinese 传输包长度,一般用于网络设备 \~english Transmission packet length, generally used for network equipment + INT iPackLenDesc; ///< \~chinese 可供选择的传输分包长度的个数,即pPackLenDesc数组的大小。 \~english The number of transmission packetization lengths available for selection, which is the size of the pPackLenDesc array. + + INT iOutputIoCounts; ///< \~chinese 可编程输出IO的个数 \~english Number of programmable output IOs + INT iInputIoCounts; ///< \~chinese 可编程输入IO的个数 \~english Number of programmable input IOs + + tSdkPresetLut *pPresetLutDesc; ///< \~chinese 相机预设的LUT表 \~english Camera preset LUT table + INT iPresetLut; ///< \~chinese 相机预设的LUT表的个数,即pPresetLutDesc数组的大小 \~english The number of LUT tables preset by the camera, that is, the size of the pPresetLutDesc array + + INT iUserDataMaxLen; ///< \~chinese 指示该相机中用于保存用户数据区的最大长度。为0表示无。 \~english Indicates the maximum length in the camera used to save the user data area. 0 means no. + BOOL bParamInDevice; ///< \~chinese 指示该设备是否支持从设备中读写参数组。1为支持,0不支持。 \~english Indicates whether the device supports reading and writing parameter groups from the device. 1 is supported, 0 is not supported. + + tSdkAeAlgorithm *pAeAlmSwDesc; ///< \~chinese 软件自动曝光算法描述 \~english Software auto exposure algorithm description + int iAeAlmSwDesc; ///< \~chinese 软件自动曝光算法个数 \~english Software automatic exposure algorithm number + + tSdkAeAlgorithm *pAeAlmHdDesc; ///< \~chinese 硬件自动曝光算法描述,为NULL表示不支持硬件自动曝光 \~english Hardware auto exposure algorithm description, NULL means hardware auto exposure is not supported + int iAeAlmHdDesc; ///< \~chinese 硬件自动曝光算法个数,为0表示不支持硬件自动曝光 \~english Number of hardware auto exposure algorithms, 0 means hardware auto exposure is not supported + + tSdkBayerDecodeAlgorithm *pBayerDecAlmSwDesc; ///< \~chinese 软件Bayer转换为RGB数据的算法描述 \~english Algorithm Description of Software Bayer Conversion to RGB Data + int iBayerDecAlmSwDesc; ///< \~chinese 软件Bayer转换为RGB数据的算法个数 \~english The number of algorithms that Bayer converts to RGB data + + tSdkBayerDecodeAlgorithm *pBayerDecAlmHdDesc; ///< \~chinese 硬件Bayer转换为RGB数据的算法描述,为NULL表示不支持 \~english Hardware Bayer converts to RGB data algorithm description, is not supported for NULL representation + int iBayerDecAlmHdDesc; ///< \~chinese 硬件Bayer转换为RGB数据的算法个数,为0表示不支持 \~english The number of algorithms that hardware Bayer converts to RGB data, 0 means not supported + + /* 图像参数的调节范围定义,用于动态构建UI*/ + tSdkExpose sExposeDesc; ///< \~chinese 曝光的范围值 \~english Exposure range value + tSdkResolutionRange sResolutionRange; ///< \~chinese 分辨率范围描述 \~english Resolution range description + tRgbGainRange sRgbGainRange; ///< \~chinese 图像数字增益范围描述 \~english Image digital gain range description + tSaturationRange sSaturationRange; ///< \~chinese 饱和度范围描述 \~english Saturation range description + tGammaRange sGammaRange; ///< \~chinese 伽马范围描述 \~english Gamma range description + tContrastRange sContrastRange; ///< \~chinese 对比度范围描述 \~english Contrast range description + tSharpnessRange sSharpnessRange; ///< \~chinese 锐化范围描述 \~english Sharpening range description + tSdkIspCapacity sIspCapacity; ///< \~chinese ISP能力描述 \~english ISP capability description + + +} tSdkCameraCapbility; + + +/// \~chinese 图像帧头信息 +/// \~english Image frame header information +typedef struct +{ + UINT uiMediaType; ///< \~chinese 图像格式 \~english Image Format + UINT uBytes; ///< \~chinese 图像数据字节数 \~english Total bytes + INT iWidth; ///< \~chinese 图像的宽度,调用图像处理函数后,该变量可能被动态修改,来指示处理后的图像尺寸 \~english The width of the image, after calling the image processing function, the variable may be dynamically modified to indicate the image size after processing + INT iHeight; ///< \~chinese 图像的高度,调用图像处理函数后,该变量可能被动态修改,来指示处理后的图像尺寸 \~english The height of the image, after calling the image processing function, the variable may be dynamically modified to indicate the image size after processing + INT iWidthZoomSw; ///< \~chinese 软件缩放的宽度,不需要进行软件裁剪的图像,此变量设置为0. \~english The width of the software zoom, which does not require software cropping. This variable is set to 0. + INT iHeightZoomSw; ///< \~chinese 软件缩放的高度,不需要进行软件裁剪的图像,此变量设置为0. \~english Software zoom height, no software cropped image is required. This variable is set to 0. + BOOL bIsTrigger; ///< \~chinese 指示是否为触发帧 \~english is trigger + UINT uiTimeStamp; ///< \~chinese 该帧的采集时间,单位0.1毫秒 \~english The frame acquisition time, in units of 0.1 milliseconds + UINT uiExpTime; ///< \~chinese 当前图像的曝光值,单位为微秒us \~english Exposure of the current image in microseconds us + float fAnalogGain; ///< \~chinese 当前图像的模拟增益倍数 \~english The current image's analog gain multiplier + INT iGamma; ///< \~chinese 该帧图像的伽马设定值,仅当LUT模式为动态参数生成时有效,其余模式下为-1 \~english The gamma setting value of the frame image is valid only when the LUT mode is a dynamic parameter generation, and is -1 in other modes. + INT iContrast; ///< \~chinese 该帧图像的对比度设定值,仅当LUT模式为动态参数生成时有效,其余模式下为-1 \~english The contrast setting value of the frame image is only valid when the LUT mode is generated by the dynamic parameter, and is -1 in other modes. + INT iSaturation; ///< \~chinese 该帧图像的饱和度设定值,对于黑白相机无意义,为0 \~english The saturation value of the frame image, which is meaningless for a black and white camera, is 0 + float fRgain; ///< \~chinese 该帧图像处理的红色数字增益倍数,对于黑白相机无意义,为1 \~english The red digital gain multiple of this frame image processing is meaningless for a black and white camera and is 1 + float fGgain; ///< \~chinese 该帧图像处理的绿色数字增益倍数,对于黑白相机无意义,为1 \~english The green digital gain multiplier for this frame image processing, meaning no significance for black and white cameras, is 1 + float fBgain; ///< \~chinese 该帧图像处理的蓝色数字增益倍数,对于黑白相机无意义,为1 \~english The blue digital gain multiplier for this frame image processing, meaning no significance for black and white cameras, is 1 +}tSdkFrameHead; + +/// \~chinese 图像帧描述 +/// \~english Image frame description +typedef struct sCameraFrame +{ + tSdkFrameHead head; ///< \~chinese 帧头 \~english Frame Head + BYTE * pBuffer; ///< \~chinese 数据区 \~english Image Data +}tSdkFrame; + +/// @ingroup API_GRAB_CB +/// \~chinese 图像捕获的回调函数定义 +/// \~english Callback function definition for image capture +typedef void (WINAPI* CAMERA_SNAP_PROC)(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext); + +/// @ingroup API_SETTINGS_PAGE +/// \~chinese 相机配置页面的消息回调函数定义 +/// \~english camera configuration page message callback function definition +typedef void (WINAPI* CAMERA_PAGE_MSG_PROC)(CameraHandle hCamera,UINT MSG,UINT uParam,PVOID pContext); + +/// @ingroup API_RECONNECT +/// \~chinese 相机连接状态回调 +/// \param [in] hCamera 相机句柄 +/// \param [in] MSG 消息,0: 相机连接断开 1: 相机连接恢复 +/// \param [in] uParam 附加信息 +/// \param [in] pContext 用户数据 +/// \return 无 +/// \note USB相机uParam取值: +/// \note 未定义 +/// \note 网口相机uParam取值: +/// \note 当MSG=0时:未定义 +/// \note 当MSG=1时: +/// \note 0:上次掉线原因,网络通讯失败 +/// \note 1:上次掉线原因,相机掉电 +/// \~english Camera connection status callback +/// \param [in] hCamera Camera handle +/// \param [in] MSG message, 0: Camera disconnected 1: Camera connection restored +/// \param [in] uParam Additional Information +/// \param [in] pContext user data +/// \return None +/// \note USB camera uParam value: +/// \note Undefined +/// \note network camera uParam value: +/// \note When MSG=0: Undefined +/// \note When MSG=1: +/// \note 0: The last dropped reason, network communication failed +/// \note 1: The last dropped reason, the camera lost power +typedef void (WINAPI* CAMERA_CONNECTION_STATUS_CALLBACK)(CameraHandle hCamera,UINT MSG,UINT uParam,PVOID pContext); + + +////////////////////////////////////////////////////////////////////////// +// Grabber 相关 + +/// \~chinese Grabber统计信息 +/// \~english Grabber statistics +typedef struct +{ + int Width; ///< \~chinese 帧宽度 \~english Frame image width + int Height; ///< \~chinese 帧高度 \~english Frame image height + int Disp; ///< \~chinese 显示帧数量 \~english Display frame number + int Capture; ///< \~chinese 采集的有效帧的数量 \~english The number of valid frames collected + int Lost; ///< \~chinese 丢帧的数量 \~english The number of dropped frames + int Error; ///< \~chinese 错帧的数量 \~english The number of error frames + float DispFps; ///< \~chinese 显示帧率 \~english Display frame rate + float CapFps; ///< \~chinese 捕获帧率 \~english Capture frame rate +}tSdkGrabberStat; + +/// @ingroup GRABBER_CB +/// \~chinese 图像捕获的回调函数定义 +/// \~english Callback function definition for image capture +typedef void (__stdcall *pfnCameraGrabberFrameCallback)( + void* Grabber, + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + void* Context); + +/// @ingroup GRABBER_CB +/// \~chinese 帧监听函数定义 +/// \param [in] Grabber +/// \param [in] Phase 图像处理阶段 +/// \param [in] pFrameBuffer 帧数据 +/// \param [in] pFrameHead 帧头 +/// \param [in] Context 用户数据 +/// \return 0:Grabber将会丢弃此帧并结束针对此帧的所有后续处理阶段 1:继续下一阶段处理 +/// \note 每当Grabber捕获到一帧图像时,会分3个阶段来依次调用FrameListener +/// \note 阶段0: RAW数据处理,pFrameBuffer=Raw数据 +/// \note 阶段1: 截图前处理,pFrameBuffer=RGB数据 +/// \note 阶段2: 显示前处理,pFrameBuffer=RGB数据 +/// \note 特别的,当相机掉线后此回调也会被调用,此时Phase=-1,pFrameBuffer=NULL,pFrameHead=NULL。 +/// \~english Frame listening function definition +/// \param [in] Grabber +/// \param [in] Phase image processing phase +/// \param [in] pFrameBuffer frame data +/// \param [in] pFrameHead Frame Header +/// \param [in] Context user data +/// \return 0: Grabber will discard this frame and end all subsequent processing stages for this frame 1: Continue to the next stage of processing +/// \note Whenever Grabber captures a frame of image, it will call FrameListener in turn in 3 stages. +/// \note Phase 0: RAW data processing, pFrameBuffer= Raw data +/// \note Phase 1: Screenshot pre-processing, pFrameBuffer=RGB data +/// \note Phase 2: Display preprocessing, pFrameBuffer=RGB data +/// \note In particular, this callback will be called when the camera is disconnected. At this time, Phase=-1, pFrameBuffer=NULL, and pFrameHead=NULL. +typedef int (__stdcall *pfnCameraGrabberFrameListener)( + void* Grabber, + int Phase, + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + void* Context); + +/// @ingroup GRABBER_SNAPSHOT +/// \~chinese 异步抓图的回调函数定义 +/// \warning Image需要调用 @link CameraImage_Destroy @endlink 释放 +/// \~english Asynchronous snapshot callback function definition +/// \warning Image needs to call @link CameraImage_Destroy @endlink to release +typedef void (__stdcall *pfnCameraGrabberSaveImageComplete)( + void* Grabber, + void* Image, // 需要调用CameraImage_Destroy释放 + CameraSdkStatus Status, + void* Context + ); + + +/// @ingroup MV_MACRO_TYPE +/// @{ +//----------------------------IMAGE FORMAT DEFINE------------------------------------ +//----------------------------图像格式定义------------------------------------------- +#define CAMERA_MEDIA_TYPE_MONO 0x01000000 +#define CAMERA_MEDIA_TYPE_RGB 0x02000000 +#define CAMERA_MEDIA_TYPE_COLOR 0x02000000 +#define CAMERA_MEDIA_TYPE_CUSTOM 0x80000000 +#define CAMERA_MEDIA_TYPE_COLOR_MASK 0xFF000000 +#define CAMERA_MEDIA_TYPE_OCCUPY1BIT 0x00010000 +#define CAMERA_MEDIA_TYPE_OCCUPY2BIT 0x00020000 +#define CAMERA_MEDIA_TYPE_OCCUPY4BIT 0x00040000 +#define CAMERA_MEDIA_TYPE_OCCUPY8BIT 0x00080000 +#define CAMERA_MEDIA_TYPE_OCCUPY10BIT 0x000A0000 +#define CAMERA_MEDIA_TYPE_OCCUPY12BIT 0x000C0000 +#define CAMERA_MEDIA_TYPE_OCCUPY16BIT 0x00100000 +#define CAMERA_MEDIA_TYPE_OCCUPY24BIT 0x00180000 +#define CAMERA_MEDIA_TYPE_OCCUPY32BIT 0x00200000 +#define CAMERA_MEDIA_TYPE_OCCUPY36BIT 0x00240000 +#define CAMERA_MEDIA_TYPE_OCCUPY48BIT 0x00300000 +#define CAMERA_MEDIA_TYPE_OCCUPY64BIT 0x00400000 + +#define CAMERA_MEDIA_TYPE_EFFECTIVE_PIXEL_SIZE_MASK 0x00FF0000 +#define CAMERA_MEDIA_TYPE_EFFECTIVE_PIXEL_SIZE_SHIFT 16 + +#define CAMERA_MEDIA_TYPE_PIXEL_SIZE(type) (((type) & CAMERA_MEDIA_TYPE_EFFECTIVE_PIXEL_SIZE_MASK) >> CAMERA_MEDIA_TYPE_EFFECTIVE_PIXEL_SIZE_SHIFT) + + +#define CAMERA_MEDIA_TYPE_ID_MASK 0x0000FFFF +#define CAMERA_MEDIA_TYPE_COUNT 0x46 + +/*mono*/ +#define CAMERA_MEDIA_TYPE_MONO1P (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY1BIT | 0x0037) +#define CAMERA_MEDIA_TYPE_MONO2P (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY2BIT | 0x0038) +#define CAMERA_MEDIA_TYPE_MONO4P (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY4BIT | 0x0039) +#define CAMERA_MEDIA_TYPE_MONO8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0001) +#define CAMERA_MEDIA_TYPE_MONO8S (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0002) +#define CAMERA_MEDIA_TYPE_MONO10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0003) +#define CAMERA_MEDIA_TYPE_MONO10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0004) +#define CAMERA_MEDIA_TYPE_MONO12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0005) +#define CAMERA_MEDIA_TYPE_MONO12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0006) +#define CAMERA_MEDIA_TYPE_MONO14 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0025) +#define CAMERA_MEDIA_TYPE_MONO16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0007) + +/*Bayer */ +#define CAMERA_MEDIA_TYPE_BAYGR8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0008) +#define CAMERA_MEDIA_TYPE_BAYRG8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0009) +#define CAMERA_MEDIA_TYPE_BAYGB8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x000A) +#define CAMERA_MEDIA_TYPE_BAYBG8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x000B) + +#define CAMERA_MEDIA_TYPE_BAYGR10_MIPI (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0026) +#define CAMERA_MEDIA_TYPE_BAYRG10_MIPI (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0027) +#define CAMERA_MEDIA_TYPE_BAYGB10_MIPI (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0028) +#define CAMERA_MEDIA_TYPE_BAYBG10_MIPI (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0029) + + +#define CAMERA_MEDIA_TYPE_BAYGR10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000C) +#define CAMERA_MEDIA_TYPE_BAYRG10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000D) +#define CAMERA_MEDIA_TYPE_BAYGB10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000E) +#define CAMERA_MEDIA_TYPE_BAYBG10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000F) + +#define CAMERA_MEDIA_TYPE_BAYGR12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0010) +#define CAMERA_MEDIA_TYPE_BAYRG12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0011) +#define CAMERA_MEDIA_TYPE_BAYGB12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0012) +#define CAMERA_MEDIA_TYPE_BAYBG12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0013) + + +#define CAMERA_MEDIA_TYPE_BAYGR10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0026) +#define CAMERA_MEDIA_TYPE_BAYRG10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0027) +#define CAMERA_MEDIA_TYPE_BAYGB10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0028) +#define CAMERA_MEDIA_TYPE_BAYBG10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0029) + +#define CAMERA_MEDIA_TYPE_BAYGR12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002A) +#define CAMERA_MEDIA_TYPE_BAYRG12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002B) +#define CAMERA_MEDIA_TYPE_BAYGB12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002C) +#define CAMERA_MEDIA_TYPE_BAYBG12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002D) + +#define CAMERA_MEDIA_TYPE_BAYGR16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x002E) +#define CAMERA_MEDIA_TYPE_BAYRG16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x002F) +#define CAMERA_MEDIA_TYPE_BAYGB16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0030) +#define CAMERA_MEDIA_TYPE_BAYBG16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0031) + +/*RGB */ +#define CAMERA_MEDIA_TYPE_RGB8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0014) +#define CAMERA_MEDIA_TYPE_BGR8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0015) +#define CAMERA_MEDIA_TYPE_RGBA8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x0016) +#define CAMERA_MEDIA_TYPE_BGRA8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x0017) +#define CAMERA_MEDIA_TYPE_RGB10 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0018) +#define CAMERA_MEDIA_TYPE_BGR10 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0019) +#define CAMERA_MEDIA_TYPE_RGB12 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x001A) +#define CAMERA_MEDIA_TYPE_BGR12 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x001B) +#define CAMERA_MEDIA_TYPE_RGB16 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0033) +#define CAMERA_MEDIA_TYPE_BGR16 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x004B) +#define CAMERA_MEDIA_TYPE_RGBA16 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY64BIT | 0x0064) +#define CAMERA_MEDIA_TYPE_BGRA16 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY64BIT | 0x0051) +#define CAMERA_MEDIA_TYPE_RGB10V1_PACKED (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x001C) +#define CAMERA_MEDIA_TYPE_RGB10P32 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x001D) +#define CAMERA_MEDIA_TYPE_RGB12V1_PACKED (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY36BIT | 0X0034) +#define CAMERA_MEDIA_TYPE_RGB565P (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0035) +#define CAMERA_MEDIA_TYPE_BGR565P (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0X0036) + +/*YUV and YCbCr*/ +#define CAMERA_MEDIA_TYPE_YUV411_8_UYYVYY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x001E) +#define CAMERA_MEDIA_TYPE_YUV422_8_UYVY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x001F) +#define CAMERA_MEDIA_TYPE_YUV422_8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0032) +#define CAMERA_MEDIA_TYPE_YUV8_UYV (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0020) +#define CAMERA_MEDIA_TYPE_YCBCR8_CBYCR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x003A) +//CAMERA_MEDIA_TYPE_YCBCR422_8 : YYYYCbCrCbCr +#define CAMERA_MEDIA_TYPE_YCBCR422_8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x003B) +#define CAMERA_MEDIA_TYPE_YCBCR422_8_CBYCRY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0043) +#define CAMERA_MEDIA_TYPE_YCBCR411_8_CBYYCRYY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x003C) +#define CAMERA_MEDIA_TYPE_YCBCR601_8_CBYCR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x003D) +#define CAMERA_MEDIA_TYPE_YCBCR601_422_8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x003E) +#define CAMERA_MEDIA_TYPE_YCBCR601_422_8_CBYCRY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0044) +#define CAMERA_MEDIA_TYPE_YCBCR601_411_8_CBYYCRYY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x003F) +#define CAMERA_MEDIA_TYPE_YCBCR709_8_CBYCR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0040) +#define CAMERA_MEDIA_TYPE_YCBCR709_422_8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0041) +#define CAMERA_MEDIA_TYPE_YCBCR709_422_8_CBYCRY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0045) +#define CAMERA_MEDIA_TYPE_YCBCR709_411_8_CBYYCRYY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0042) + +/*RGB Planar */ +#define CAMERA_MEDIA_TYPE_RGB8_PLANAR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0021) +#define CAMERA_MEDIA_TYPE_RGB10_PLANAR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0022) +#define CAMERA_MEDIA_TYPE_RGB12_PLANAR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0023) +#define CAMERA_MEDIA_TYPE_RGB16_PLANAR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0024) + +/*MindVision 12bit packed bayer*/ +#define CAMERA_MEDIA_TYPE_BAYGR12_PACKED_MV (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0060) +#define CAMERA_MEDIA_TYPE_BAYRG12_PACKED_MV (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0061) +#define CAMERA_MEDIA_TYPE_BAYGB12_PACKED_MV (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0062) +#define CAMERA_MEDIA_TYPE_BAYBG12_PACKED_MV (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0063) + +/*MindVision 12bit packed monochome*/ +#define CAMERA_MEDIA_TYPE_MONO12_PACKED_MV (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0064) +/// @} + +#endif diff --git a/others/include/camera/CameraGrabber.h b/others/include/camera/CameraGrabber.h new file mode 100644 index 0000000..6cac2f4 --- /dev/null +++ b/others/include/camera/CameraGrabber.h @@ -0,0 +1,333 @@ +#ifndef _MV_CAMERA_GRABBER_H_ +#define _MV_CAMERA_GRABBER_H_ + +#include "CameraDefine.h" +#include "CameraStatus.h" + + +/// @ingroup GRABBER_CREATE +/// \~chinese +/// \brief бûѡҪ򿪵 +/// \param [out] Grabber ´IJɼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ڲʹ @link CameraInit @endlink ˿ʹ @link CameraGrabber_GetCameraHandle @endlink ȡʹSDK API +/// \~english +/// \brief Pop-up camera list allows the user to select the camera to open +/// \param [out] Grabber returns newly created grabber +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note This function uses @link CameraInit @endlink internally to open the camera, so you can use @link CameraGrabber_GetCameraHandle @endlink to get the camera handle and use other SDK APIs to operate the camera. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_CreateFromDevicePage( + void** Grabber + ); + +/// @ingroup GRABBER_CREATE +/// \~chinese +/// \brief ʹбGrabber +/// \param [out] Grabber ´IJɼ +/// \param [in] Index +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ڲʹ @link CameraInit @endlink ˿ʹ @link CameraGrabber_GetCameraHandle @endlink ȡʹSDK API +/// \~english +/// \brief Creating a Grabber Using a Camera List Index +/// \param [out] Grabber returns newly created grabber +/// \param [in] Index Camera index +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note This function uses @link CameraInit @endlink internally to open the camera, so you can use @link CameraGrabber_GetCameraHandle @endlink to get the camera handle and use other SDK APIs to operate the camera. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_CreateByIndex( + void** Grabber, + int Index + ); + +/// @ingroup GRABBER_CREATE +/// \~chinese +/// \brief ʹƴGrabber +/// \param [out] Grabber ´IJɼ +/// \param [in] Name ơ@link #tSdkCameraDevInfo.acFriendlyName @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ڲʹ @link CameraInit @endlink ˿ʹ @link CameraGrabber_GetCameraHandle @endlink ȡʹSDK API +/// \~english +/// \brief Create a Grabber with a Camera Name +/// \param [out] Grabber returns newly created grabber +/// \param [in] Name Camera name.@link #tSdkCameraDevInfo.acFriendlyName @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note This function uses @link CameraInit @endlink internally to open the camera, so you can use @link CameraGrabber_GetCameraHandle @endlink to get the camera handle and use other SDK APIs to operate the camera. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_CreateByName( + void** Grabber, + char* Name + ); + +/// @ingroup GRABBER_CREATE +/// \~chinese +/// \brief 豸ϢGrabber +/// \param [out] Grabber ´IJɼ +/// \param [in] pDevInfo 豸Ϣ@link #CameraEnumerateDevice @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note ڲʹ @link CameraInit @endlink ˿ʹ @link CameraGrabber_GetCameraHandle @endlink ȡʹSDK API +/// \~english +/// \brief Create Grabber from device info +/// \param [out] Grabber returns newly created grabber +/// \param [in] pDevInfo device information. @link #CameraEnumerateDevice @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note This function uses @link CameraInit @endlink internally to open the camera, so you can use @link CameraGrabber_GetCameraHandle @endlink to get the camera handle and use other SDK APIs to operate the camera. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_Create( + void** Grabber, + tSdkCameraDevInfo* pDevInfo + ); + +/// @ingroup GRABBER_DESTROY +/// \~chinese +/// \brief Grabber +/// \param [in] Grabber ɼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Destroy Grabber +/// \param [in] Grabber +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_Destroy( + void* Grabber + ); + +/// @ingroup GRABBER_CTRL +/// \~chinese +/// \brief ԤƵʾ +/// \param [in] Grabber ɼ +/// \param [in] hWnd ʾڵĴھ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set the preview video display window +/// \param [in] Grabber +/// \param [in] hWnd window handle of the display window +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SetHWnd( + void* Grabber, + HWND hWnd + ); + +/// @ingroup GRABBER_CTRL +/// \~chinese +/// \brief Grabberȡͼʱʹõȼ +/// \param [in] Grabber ɼ +/// \param [in] Priority ȡͼȼ @link #emCameraGetImagePriority @endlink +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Sets the priority used by Grabber when fetching graphs +/// \param [in] Grabber +/// \param [in] Priority GetImageBuffer priority, For details see: @link #emCameraGetImagePriority @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SetPriority( + void* Grabber, + UINT Priority + ); + +/// @ingroup GRABBER_CTRL +/// \~chinese +/// \brief ʼɼ +/// \param [in] Grabber ɼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \note Grabberɼ״̬ɼصץͼȹܲ +/// \~english +/// \brief Start Grabber +/// \param [in] Grabber +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \note Grabber must enter the acquisition state, grab callbacks, snapshot and other functions in order to function properly +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_StartLive( + void* Grabber + ); + +/// @ingroup GRABBER_CTRL +/// \~chinese +/// \brief ֹͣɼ +/// \param [in] Grabber ɼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \warning ڲȴлصŷص,ڵȴʱɷwindowsϢ +/// \~english +/// \brief Stop Grabber +/// \param [in] Grabber +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \warning This function will wait for all callbacks to end before returning to the caller,And it will dispatch windows messages while waiting. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_StopLive( + void* Grabber + ); + +/// @ingroup GRABBER_SNAPSHOT +/// \~chinese +/// \brief ͬץͼ +/// \param [in] Grabber ɼ +/// \param [out] Image ץȡͼ \note Ҫ@link #CameraImage_Destroy @endlinkͷ +/// \param [in] TimeOut ʱʱ䣨룩 +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Synchronized snapshot +/// \param [in] Grabber +/// \param [out] Image Returns Captured Image \note Need to Call @link #CameraImage_Destroy @endlink Release +/// \param [in] TimeOut Timeout (milliseconds) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SaveImage( + void* Grabber, + void** Image, + DWORD TimeOut + ); + +/// @ingroup GRABBER_SNAPSHOT +/// \~chinese +/// \brief ύһ첽ץͼύɹץͼɻصûõɺ +/// \param [in] Grabber ɼ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraGrabber_SetSaveImageCompleteCallback +/// \~english +/// \brief Submit an asynchronous snapshot request, complete the user's completion function after the completion of the submission. +/// \param [in] Grabber +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraGrabber_SetSaveImageCompleteCallback +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SaveImageAsync( + void* Grabber + ); + +/// @ingroup GRABBER_SNAPSHOT +/// \~chinese +/// \brief ύһ첽ץͼύɹץͼɻصûõɺ +/// \param [in] Grabber ɼ +/// \param [in] UserData ûݣʹ @link CameraImage_GetUserData @endlink Imageȡֵ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraGrabber_SetSaveImageCompleteCallback +/// \~english +/// \brief Submit an asynchronous snapshot request, complete the user's completion function after the completion of the submission. +/// \param [in] Grabber +/// \param [in] UserData user data, which can be obtained from Image using @link CameraImage_GetUserData @endlink +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraGrabber_SetSaveImageCompleteCallback +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SaveImageAsyncEx( + void* Grabber, + void* UserData + ); + +/// @ingroup GRABBER_SNAPSHOT +/// \~chinese +/// \brief 첽ʽץͼɺ +/// \param [in] Grabber ɼ +/// \param [in] Callback 첽ץͼʱ +/// \param [in] Context CallbackʱΪCallback +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \see CameraGrabber_SaveImageAsync CameraGrabber_SaveImageAsyncEx +/// \~english +/// \brief Set the completion function of asynchronous mode snapshot +/// \param [in] Grabber +/// \param [in] Callback Callback is called when the asynchronous snapshot task completes +/// \param [in] Context Passed as a parameter when the Callback is invoked +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +/// \see CameraGrabber_SaveImageAsync CameraGrabber_SaveImageAsyncEx +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SetSaveImageCompleteCallback( + void* Grabber, + pfnCameraGrabberSaveImageComplete Callback, + void* Context + ); + +/// @ingroup GRABBER_CB +/// \~chinese +/// \brief ֡ +/// \param [in] Grabber ɼ +/// \param [in] Listener +/// \param [in] Context ListenerʱΪListener +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set frame listening function +/// \param [in] Grabber +/// \param [in] Listener listener function +/// \param [in] Context Passed as a parameter when the Listener is invoked +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SetFrameListener( + void* Grabber, + pfnCameraGrabberFrameListener Listener, + void* Context + ); + +/// @ingroup GRABBER_CB +/// \~chinese +/// \brief RAWݻص +/// \param [in] Grabber ɼ +/// \param [in] Callback Rawص +/// \param [in] Context CallbackʱΪCallback +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set RAW data callback function +/// \param [in] Grabber +/// \param [in] Callback Raw data callback function +/// \param [in] Context Passed as a parameter when the Callback is invoked +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SetRawCallback( + void* Grabber, + pfnCameraGrabberFrameCallback Callback, + void* Context + ); + +/// @ingroup GRABBER_CB +/// \~chinese +/// \brief RGBص +/// \param [in] Grabber ɼ +/// \param [in] Callback RGBص +/// \param [in] Context CallbackʱΪCallback +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set RGB callback function +/// \param [in] Grabber +/// \param [in] Callback RGB data callback function +/// \param [in] Context Passed as a parameter when the Callback is invoked +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_SetRGBCallback( + void* Grabber, + pfnCameraGrabberFrameCallback Callback, + void* Context + ); + +/// @ingroup GRABBER_CTRL +/// \~chinese +/// \brief ȡ +/// \param [in] Grabber ɼ +/// \param [out] hCamera ص +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get camera handle +/// \param [in] Grabber +/// \param [out] hCamera returned camera handle +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_GetCameraHandle( + void* Grabber, + CameraHandle *hCamera + ); + +/// @ingroup GRABBER_CTRL +/// \~chinese +/// \brief ȡ֡ͳϢ +/// \param [in] Grabber ɼ +/// \param [out] stat صͳϢ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get frame statistics +/// \param [in] Grabber +/// \param [out] stat returned statistics +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_GetStat( + void* Grabber, + tSdkGrabberStat *stat + ); + +/// @ingroup GRABBER_CTRL +/// \~chinese +/// \brief ȡDevInfo +/// \param [in] Grabber ɼ +/// \param [out] DevInfo صDevInfo +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get Camera DevInfo +/// \param [in] Grabber +/// \param [out] DevInfo Returns Camera DevInfo +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraGrabber_GetCameraDevInfo( + void* Grabber, + tSdkCameraDevInfo *DevInfo + ); + + + + +#endif // _MV_CAMERA_GRABBER_H_ diff --git a/others/include/camera/CameraImage.h b/others/include/camera/CameraImage.h new file mode 100644 index 0000000..536d38b --- /dev/null +++ b/others/include/camera/CameraImage.h @@ -0,0 +1,380 @@ +#ifndef _MV_CAMERA_IMAGE_H_ +#define _MV_CAMERA_IMAGE_H_ + +#include "CameraDefine.h" +#include "CameraStatus.h" + + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief һµImage +/// \param [out] Image ´ͼƬ +/// \param [in] pFrameBuffer ֡ +/// \param [in] pFrameHead ֡ͷ +/// \param [in] bCopy TRUE: Ƴһµ֡ FALSE: ƣֱʹpFrameBufferָĻ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Create a new Image +/// \param [out] Image Newly Created Image +/// \param [in] pFrameBuffer frame data +/// \param [in] pFrameHead Frame Header +/// \param [in] bCopy TRUE: Copy a new frame data FALSE: Do not copy, directly use the buffer pointed to by pFrameBuffer +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_Create( + void** Image, + BYTE *pFrameBuffer, + tSdkFrameHead* pFrameHead, + BOOL bCopy + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief һյImage +/// \param [out] Image ´ͼƬ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Create an empty Image +/// \param [out] Image Newly Created Image +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_CreateEmpty( + void** Image + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief Image +/// \param [in] Image +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Destroy Image +/// \param [in] Image +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_Destroy( + void* Image + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief Imageȡ֡ݺ֡ͷ +/// \param [in] Image +/// \param [out] DataBuffer ֡ +/// \param [out] Head ֡ͷ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get frame data and frame header from Image +/// \param [in] Image +/// \param [out] DataBuffer Frame Data +/// \param [out] Head header +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_GetData( + void* Image, + BYTE** DataBuffer, + tSdkFrameHead** Head + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief ȡImageûԶ +/// \param [in] Image +/// \param [out] UserData ûԶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Get User's Custom Data of Image +/// \param [in] Image +/// \param [out] UserData returns user-defined data +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_GetUserData( + void* Image, + void** UserData + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief ImageûԶ +/// \param [in] Image +/// \param [in] UserData ûԶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Set user-defined data for Image +/// \param [in] Image +/// \param [in] UserData User-defined data +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_SetUserData( + void* Image, + void* UserData + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief жһImageǷΪ +/// \param [in] Image +/// \param [out] IsEmpty Ϊշ:TRUE(1) 򷵻:FALSE(0) +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Determine if an Image is empty +/// \param [in] Image +/// \param [out] IsEmpty Empty Returns: TRUE(1) Otherwise returns: FALSE(0) +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_IsEmpty( + void* Image, + BOOL* IsEmpty + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief Imageָ +/// \param [in] Image +/// \param [in] hWnd ĿĴ +/// \param [in] Algorithm 㷨 0ٵԲ 1ٶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Draw Image to the specified window +/// \param [in] Image +/// \param [in] hWnd destination window +/// \param [in] Algorithm scaling algorithm 0:fast but slightly worse quality 1:slower but better quality +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_Draw( + void* Image, + HWND hWnd, + int Algorithm + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief Imageָ +/// \param [in] Image +/// \param [in] hWnd ĿĴ +/// \param [in] Algorithm 㷨 0ٵԲ 1ٶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Pull up drawing Image to the specified window +/// \param [in] Image +/// \param [in] hWnd destination window +/// \param [in] Algorithm scaling algorithm 0:fast but slightly worse quality 1:slower but better quality +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_DrawFit( + void* Image, + HWND hWnd, + int Algorithm + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief ImageָDC +/// \param [in] Image +/// \param [in] hDC ĿDC +/// \param [in] Algorithm 㷨 0ٵԲ 1ٶ +/// \param [in] xDst ĿεϽX +/// \param [in] yDst ĿεϽY +/// \param [in] cxDst ĿεĿ +/// \param [in] cyDst Ŀεĸ߶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Draw Image to specified DC +/// \param [in] Image +/// \param [in] hDC destination DC +/// \param [in] Algorithm scaling algorithm 0:fast but slightly worse quality 1:slower but better quality +/// \param [in] xDst The X coordinate of the upper left corner of the target rectangle +/// \param [in] yDst The Y coordinate of the upper left corner of the target rectangle +/// \param [in] cxDst Width of target rectangle +/// \param [in] cyDst Height of target rectangle +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_DrawToDC( + void* Image, + HDC hDC, + int Algorithm, + int xDst, + int yDst, + int cxDst, + int cyDst + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief ImageָDC +/// \param [in] Image +/// \param [in] hDC ĿDC +/// \param [in] Algorithm 㷨 0ٵԲ 1ٶ +/// \param [in] xDst ĿεϽX +/// \param [in] yDst ĿεϽY +/// \param [in] cxDst ĿεĿ +/// \param [in] cyDst Ŀεĸ߶ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Pull up drawing Image to specified DC +/// \param [in] Image +/// \param [in] hDC destination DC +/// \param [in] Algorithm scaling algorithm 0:fast but slightly worse quality 1:slower but better quality +/// \param [in] xDst The X coordinate of the upper left corner of the target rectangle +/// \param [in] yDst The Y coordinate of the upper left corner of the target rectangle +/// \param [in] cxDst Width of target rectangle +/// \param [in] cyDst Height of target rectangle +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_DrawToDCFit( + void* Image, + HDC hDC, + int Algorithm, + int xDst, + int yDst, + int cxDst, + int cyDst + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief Imageָڣţ +/// \param [in] Image +/// \param [in] hWnd ĿĴ +/// \param [in] xDst ĿεϽX +/// \param [in] yDst ĿεϽY +/// \param [in] cxDst ĿεĿ +/// \param [in] cyDst Ŀεĸ߶ +/// \param [in] xSrc ͼεϽX +/// \param [in] ySrc ͼεϽY +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Draw Image to specified window (without scaling) +/// \param [in] Image +/// \param [in] hWnd destination window +/// \param [in] xDst The X coordinate of the upper left corner of the target rectangle +/// \param [in] yDst The Y coordinate of the upper left corner of the target rectangle +/// \param [in] cxDst Width of target rectangle +/// \param [in] cyDst Height of target rectangle +/// \param [in] xSrc X coordinate of the upper left corner of the image rectangle +/// \param [in] ySrc Y coordinate of the upper left corner of the image rectangle +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_BitBlt( + void* Image, + HWND hWnd, + int xDst, + int yDst, + int cxDst, + int cyDst, + int xSrc, + int ySrc + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief ImageָDCţ +/// \param [in] Image +/// \param [in] hDC ĿDC +/// \param [in] xDst ĿεϽX +/// \param [in] yDst ĿεϽY +/// \param [in] cxDst ĿεĿ +/// \param [in] cyDst Ŀεĸ߶ +/// \param [in] xSrc ͼεϽX +/// \param [in] ySrc ͼεϽY +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Draw Image to specified DC (without scaling) +/// \param [in] Image +/// \param [in] hDC destination DC +/// \param [in] xDst The X coordinate of the upper left corner of the target rectangle +/// \param [in] yDst The Y coordinate of the upper left corner of the target rectangle +/// \param [in] cxDst Width of target rectangle +/// \param [in] cyDst Height of target rectangle +/// \param [in] xSrc X coordinate of the upper left corner of the image rectangle +/// \param [in] ySrc Y coordinate of the upper left corner of the image rectangle +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_BitBltToDC( + void* Image, + HDC hDC, + int xDst, + int yDst, + int cxDst, + int cyDst, + int xSrc, + int ySrc + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief bmpʽImage +/// \param [in] Image +/// \param [in] FileName ļ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Save Image as bmp +/// \param [in] Image +/// \param [in] FileName file name +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_SaveAsBmp( + void* Image, + char const* FileName + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief jpgʽImage +/// \param [in] Image +/// \param [in] FileName ļ +/// \param [in] Quality (1-100)100ΪѵļҲ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Save Image as jpg +/// \param [in] Image +/// \param [in] FileName file name +/// \param [in] Quality save quality (1-100), 100 is the best quality but the file is also the largest +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_SaveAsJpeg( + void* Image, + char const* FileName, + BYTE Quality + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief pngʽImage +/// \param [in] Image +/// \param [in] FileName ļ +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Save Image as png +/// \param [in] Image +/// \param [in] FileName file name +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_SaveAsPng( + void* Image, + char const* FileName + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief rawʽImage +/// \param [in] Image +/// \param [in] FileName ļ +/// \param [in] Format 0: 8Bit Raw 1: 16Bit Raw +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Save Image as raw +/// \param [in] Image +/// \param [in] FileName file name +/// \param [in] Format 0: 8Bit Raw 1: 16Bit Raw +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_SaveAsRaw( + void* Image, + char const* FileName, + int Format + ); + +/// @ingroup MV_IMAGE +/// \~chinese +/// \brief ImageһIPicture +/// \param [in] Image +/// \param [out] NewPic ´IPicture +/// \return ɹ CAMERA_STATUS_SUCCESS(0)򷵻ط0ֵĴ, ο CameraStatus.h дĶ塣 +/// \~english +/// \brief Create an IPicture from an Image +/// \param [in] Image +/// \param [out] NewPic Newly created IPicture +/// \return Returns CAMERA_STATUS_SUCCESS(0) successfully. Otherwise, it returns a non-zero error code. Please refer to the definition of the error code in CameraStatus.h. +MVSDK_API CameraSdkStatus __stdcall CameraImage_IPicture( + void* Image, + IPicture** NewPic + ); + + + + +#endif // _MV_CAMERA_IMAGE_H_ diff --git a/others/include/camera/CameraStatus.h b/others/include/camera/CameraStatus.h new file mode 100644 index 0000000..4ea675f --- /dev/null +++ b/others/include/camera/CameraStatus.h @@ -0,0 +1,114 @@ +#ifndef __CAMERA_STATUS_DEF__ +#define __CAMERA_STATUS_DEF__ + +/// @ingroup MV_TYPEDEF +/// \~chinese SDK +/// \~english SDK error code +typedef int CameraSdkStatus; + + +/*õĺ*/ +#define SDK_SUCCESS(_FUC_) (_FUC_ == CAMERA_STATUS_SUCCESS) + +#define SDK_UNSUCCESS(_FUC_) (_FUC_ != CAMERA_STATUS_SUCCESS) + +#define SDK_UNSUCCESS_RETURN(_FUC_,RET) if((RET = _FUC_) != CAMERA_STATUS_SUCCESS)\ + {\ + return RET;\ + } + +#define SDK_UNSUCCESS_BREAK(_FUC_) if(_FUC_ != CAMERA_STATUS_SUCCESS)\ + {\ + break;\ + } + + +/// @ingroup MV_MACRO_TYPE +/// @{ +/* ô */ + +#define CAMERA_STATUS_SUCCESS 0 ///< \~chinese ɹ \~english Successful +#define CAMERA_STATUS_FAILED -1 ///< \~chinese ʧ \~english operation failed +#define CAMERA_STATUS_INTERNAL_ERROR -2 ///< \~chinese ڲ \~english internal error +#define CAMERA_STATUS_UNKNOW -3 ///< \~chinese δ֪ \~english unknown error +#define CAMERA_STATUS_NOT_SUPPORTED -4 ///< \~chinese ָ֧ù \~english Does not support this feature +#define CAMERA_STATUS_NOT_INITIALIZED -5 ///< \~chinese ʼδ \~english Incomplete initialization +#define CAMERA_STATUS_PARAMETER_INVALID -6 ///< \~chinese Ч \~english Invalid argument +#define CAMERA_STATUS_PARAMETER_OUT_OF_BOUND -7 ///< \~chinese Խ \~english Out of bounds of parameters +#define CAMERA_STATUS_UNENABLED -8 ///< \~chinese δʹ \~english Not enabled +#define CAMERA_STATUS_USER_CANCEL -9 ///< \~chinese ûֶȡˣroiȡ \~english The user manually canceled, such as roi panel click cancel, return +#define CAMERA_STATUS_PATH_NOT_FOUND -10 ///< \~chinese עûҵӦ· \~english The corresponding path was not found in the registry +#define CAMERA_STATUS_SIZE_DISMATCH -11 ///< \~chinese ͼݳȺͶijߴ粻ƥ \~english The length of the obtained image data does not match the defined size +#define CAMERA_STATUS_TIME_OUT -12 ///< \~chinese ʱ \~english Timeout error +#define CAMERA_STATUS_IO_ERROR -13 ///< \~chinese ӲIO \~english Hardware IO error +#define CAMERA_STATUS_COMM_ERROR -14 ///< \~chinese ͨѶ \~english Communication error +#define CAMERA_STATUS_BUS_ERROR -15 ///< \~chinese ߴ \~english Bus error +#define CAMERA_STATUS_NO_DEVICE_FOUND -16 ///< \~chinese ûз豸 \~english No device found +#define CAMERA_STATUS_NO_LOGIC_DEVICE_FOUND -17 ///< \~chinese δҵ߼豸 \~english Logical device not found +#define CAMERA_STATUS_DEVICE_IS_OPENED -18 ///< \~chinese 豸Ѿ \~english The device is already open +#define CAMERA_STATUS_DEVICE_IS_CLOSED -19 ///< \~chinese 豸Ѿر \~english Device is off +#define CAMERA_STATUS_DEVICE_VEDIO_CLOSED -20 ///< \~chinese ûд豸Ƶ¼صĺʱƵûд򿪣طظô \~english Without opening the device video, when the video-related function is called, if the camera video is not open, the error is returned back. +#define CAMERA_STATUS_NO_MEMORY -21 ///< \~chinese û㹻ϵͳڴ \~english Not enough system memory +#define CAMERA_STATUS_FILE_CREATE_FAILED -22 ///< \~chinese ļʧ \~english Failed to create file +#define CAMERA_STATUS_FILE_INVALID -23 ///< \~chinese ļʽЧ \~english Invalid file format +#define CAMERA_STATUS_WRITE_PROTECTED -24 ///< \~chinese дд \~english Write protection, not write +#define CAMERA_STATUS_GRAB_FAILED -25 ///< \~chinese ݲɼʧ \~english Data collection failed +#define CAMERA_STATUS_LOST_DATA -26 ///< \~chinese ݶʧ \~english Loss of data, incomplete +#define CAMERA_STATUS_EOF_ERROR -27 ///< \~chinese δյ֡ \~english No frame terminator received +#define CAMERA_STATUS_BUSY -28 ///< \~chinese æ(һβڽ)˴βܽ \~english Busy (last operation is still in progress), this operation cannot be performed +#define CAMERA_STATUS_WAIT -29 ///< \~chinese Ҫȴ(в)ٴγ \~english Need to wait (condition of operation is not established), can try again +#define CAMERA_STATUS_IN_PROCESS -30 ///< \~chinese ڽУѾ \~english Ongoing, has been operated +#define CAMERA_STATUS_IIC_ERROR -31 ///< \~chinese IIC \~english IIC transmission error +#define CAMERA_STATUS_SPI_ERROR -32 ///< \~chinese SPI \~english SPI transmission error +#define CAMERA_STATUS_USB_CONTROL_ERROR -33 ///< \~chinese USBƴ \~english USB control transmission error +#define CAMERA_STATUS_USB_BULK_ERROR -34 ///< \~chinese USB BULK \~english USB BULK transmission error +#define CAMERA_STATUS_SOCKET_INIT_ERROR -35 ///< \~chinese 紫׼ʼʧ \~english Network Transport Suite Initialization Failed +#define CAMERA_STATUS_GIGE_FILTER_INIT_ERROR -36 ///< \~chinese ں˹ʼʧܣǷȷװ°װ \~english The webcam kernel filter driver failed to initialize. Please check if the driver is installed correctly or reinstall it. +#define CAMERA_STATUS_NET_SEND_ERROR -37 ///< \~chinese ݷʹ \~english Network data sending error +#define CAMERA_STATUS_DEVICE_LOST -38 ///< \~chinese ʧȥӣⳬʱ \~english Lost connection with webcam, heartbeat timeout +#define CAMERA_STATUS_DATA_RECV_LESS -39 ///< \~chinese յֽ \~english Received fewer bytes than requested +#define CAMERA_STATUS_FUNCTION_LOAD_FAILED -40 ///< \~chinese ļмسʧ \~english Failed to load program from file +#define CAMERA_STATUS_CRITICAL_FILE_LOST -41 ///< \~chinese ļʧ \~english The file necessary to run the program is missing. +#define CAMERA_STATUS_SENSOR_ID_DISMATCH -42 ///< \~chinese ̼ͳƥ䣬ԭ˴Ĺ̼ \~english The firmware and program do not match because the wrong firmware was downloaded. +#define CAMERA_STATUS_OUT_OF_RANGE -43 ///< \~chinese ЧΧ \~english The parameter is out of valid range. +#define CAMERA_STATUS_REGISTRY_ERROR -44 ///< \~chinese װע°װ򣬻аװĿ¼Setup/Installer.exe \~english Setup registration error. Please reinstall the program, or run the installation directory Setup/Installer.exe +#define CAMERA_STATUS_ACCESS_DENY -45 ///< \~chinese ֹʡָѾռʱʸ᷵ظ״̬(һܱͬʱ) \~english No Access. When the specified camera has been occupied by another program, it will return to this state if you request to access the camera. (A camera cannot be accessed simultaneously by multiple programs) +#define CAMERA_STATUS_CAMERA_NEED_RESET -46 ///< \~chinese ʾҪλʹãʱϵϵͳ󣬱ʹá \~english It means that the camera needs to be reset before it can be used normally. At this time, please make the camera power off and restart, or restart the operating system, then it can be used normally. +#define CAMERA_STATUS_ISP_MOUDLE_NOT_INITIALIZED -47 ///< \~chinese ISPģδʼ \~english ISP module is not initialized +#define CAMERA_STATUS_ISP_DATA_CRC_ERROR -48 ///< \~chinese У \~english Data check error +#define CAMERA_STATUS_MV_TEST_FAILED -49 ///< \~chinese ݲʧ \~english Data test failed +#define CAMERA_STATUS_INTERNAL_ERR1 -50 ///< \~chinese ڲ1 \~english Internal error 1 +#define CAMERA_STATUS_U3V_NO_CONTROL_EP -51 ///< \~chinese U3Vƶ˵δҵ \~english U3V control endpoint not found +#define CAMERA_STATUS_U3V_CONTROL_ERROR -52 ///< \~chinese U3VͨѶ \~english U3V control communication error +#define CAMERA_STATUS_INVALID_FRIENDLY_NAME -53 ///< \~chinese Ч豸ﲻַܰ(\/:*?"<>|") \~english Invalid device name, the name cannot contain the following characters (\/:*?"<>|") + + + +//AIAƶı׼ͬ +/*#define CAMERA_AIA_SUCCESS 0x0000 */ +#define CAMERA_AIA_PACKET_RESEND 0x0100 ///< \~chinese ֡Ҫش \~english The frame needs to be retransmitted +#define CAMERA_AIA_NOT_IMPLEMENTED 0x8001 ///< \~chinese 豸ֵ֧ \~english Device does not support commands +#define CAMERA_AIA_INVALID_PARAMETER 0x8002 ///< \~chinese Ƿ \~english Illegal command parameters +#define CAMERA_AIA_INVALID_ADDRESS 0x8003 ///< \~chinese ɷʵĵַ \~english Inaccessible address +#define CAMERA_AIA_WRITE_PROTECT 0x8004 ///< \~chinese ʵĶ󲻿д \~english The accessed object cannot be written +#define CAMERA_AIA_BAD_ALIGNMENT 0x8005 ///< \~chinese ʵĵַûаҪ \~english Visited address is not aligned as required +#define CAMERA_AIA_ACCESS_DENIED 0x8006 ///< \~chinese ûзȨ \~english No access +#define CAMERA_AIA_BUSY 0x8007 ///< \~chinese ڴ \~english Command is processing +#define CAMERA_AIA_DEPRECATED 0x8008 ///< \~chinese 0x8008-0x0800B 0x800F ָѾ \~english 0x8008-0x0800B 0x800F This instruction has been deprecated +#define CAMERA_AIA_PACKET_UNAVAILABLE 0x800C ///< \~chinese Ч \~english Invalid package +#define CAMERA_AIA_DATA_OVERRUN 0x800D ///< \~chinese ͨյݱҪĶ \~english Data overflow, usually more data than needed +#define CAMERA_AIA_INVALID_HEADER 0x800E ///< \~chinese ݰͷijЩЭ鲻ƥ \~english Some areas in the packet header do not match the protocol +#define CAMERA_AIA_PACKET_NOT_YET_AVAILABLE 0x8010 ///< \~chinese ͼְݻδ׼ãڴģʽӦóʳʱ \~english Image packet data is not ready yet. It is mostly used in trigger mode. Application access timeout +#define CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY 0x8011 ///< \~chinese ҪʵķְѾڡشʱѾڻ \~english Subcontracts that require access no longer exist. Mostly used for data retransmission is not in the buffer +#define CAMERA_AIA_PACKET_REMOVED_FROM_MEMORY 0x8012 ///< \~chinese CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY \~english CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY +#define CAMERA_AIA_NO_REF_TIME 0x0813 ///< \~chinese ûвοʱԴʱִͬʱ \~english There is no reference clock source. When used for time synchronization commands +#define CAMERA_AIA_PACKET_TEMPORARILY_UNAVAILABLE 0x0814 ///< \~chinese ŵ⣬ǰְʱãԺз \~english Due to channel bandwidth issues, the current subcontracting is temporarily unavailable and needs to be accessed later +#define CAMERA_AIA_OVERFLOW 0x0815 ///< \~chinese 豸ͨǶ \~english Data overflow on the device, usually the queue is full +#define CAMERA_AIA_ACTION_LATE 0x0816 ///< \~chinese ִѾЧָʱ \~english Command execution has exceeded valid specified time +#define CAMERA_AIA_ERROR 0x8FFF ///< \~chinese \~english error + +/// @} end of MV_MACRO_TYPE + + + +#endif diff --git a/others/include/camera/camera_api.h b/others/include/camera/camera_api.h new file mode 100644 index 0000000..625b5c5 --- /dev/null +++ b/others/include/camera/camera_api.h @@ -0,0 +1,2823 @@ +#ifndef _MVCAMAPI_H_ +#define _MVCAMAPI_H_ + +#define MVSDK_API + +#ifdef __cplusplus +extern "C" { +#endif + + +#include "camera_status.h" +#include "camera_define.h" + + + +/******************************************************/ +// 函数名 : CameraSdkInit +// 功能描述 : 相机SDK初始化,在调用任何SDK其他接口前,必须 +// 先调用该接口进行初始化。该函数在整个进程运行 +// 期间只需要调用一次。 +// 参数 : iLanguageSel 用于选择SDK内部提示信息和界面的语种, +// 0:表示英文,1:表示中文。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSdkInit( + int iLanguageSel +); + +/******************************************************/ +// 函数名 : CameraEnumerateDevice +// 功能描述 : 枚举设备,并建立设备列表。在调用CameraInit +// 之前,必须调用该函数来获得设备的信息。 +// 参数 : pCameraList 设备列表数组指针。 +// piNums 设备的个数指针,调用时传入pCameraList +// 数组的元素个数,函数返回时,保存实际找到的设备个数。 +// 注意,piNums指向的值必须初始化,且不超过pCameraList数组元素个数, +// 否则有可能造成内存溢出。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraEnumerateDevice( + tSdkCameraDevInfo* pCameraList, + INT* piNums +); + +/******************************************************/ +// 函数名 : CameraIdleStateDevice +// 功能描述 : 当前系统有未使用的相机信息。 +// 参数 : pCameraList 设备列表数组指针。 +// piNums 设备的个数指针,调用时传入pCameraList +// 数组的元素个数,函数返回时,保存实际找到的设备个数。 +// 注意,piNums指向的值必须初始化,且不超过pCameraList数组元素个数, +// 否则有可能造成内存溢出。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraIdleStateDevice( + tSdkCameraDevInfo* pCameraList, + INT* piNums +); + + +/******************************************************/ +// 函数名 : CameraEnumerateDeviceEx +// 功能描述 : 枚举设备,并建立设备列表。在调用CameraInitEx +// 之前,必须调用该函数枚举设备。 +// 参数 : +// 返回值 : 返回设备个数,0表示无。 +/******************************************************/ +MVSDK_API INT CameraEnumerateDeviceEx( +); + + +/******************************************************/ +// 函数名 : CameraIsOpened +// 功能描述 : 检测设备是否已经被其他应用程序打开。在调用CameraInit +// 之前,可以使用该函数进行检测,如果已经被打开,调用 +// CameraInit会返回设备已经被打开的错误码。 +// 参数 : pCameraList 设备的枚举信息结构体指针,由CameraEnumerateDevice获得。 +// pOpened 设备的状态指针,返回设备是否被打开的状态,TRUE为打开,FALSE为空闲。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraIsOpened( + tSdkCameraDevInfo* pCameraList, + BOOL* pOpened +); + + +/******************************************************/ +// 函数名 : CameraInit +// 功能描述 : 相机初始化。初始化成功后,才能调用任何其他 +// 相机相关的操作接口。 +// 参数 : pCameraInfo 该相机的设备描述信息,由CameraEnumerateDevice +// 函数获得。 +// iParamLoadMode 相机初始化时使用的参数加载方式。-1表示使用上次退出时的参数加载方式。 +// emTeam 初始化时使用的参数组。-1表示加载上次退出时的参数组。 +// pCameraHandle 相机的句柄指针,初始化成功后,该指针 +// 返回该相机的有效句柄,在调用其他相机 +// 相关的操作接口时,都需要传入该句柄,主要 +// 用于多相机之间的区分。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraInit( + tSdkCameraDevInfo* pCameraInfo, + int emParamLoadMode, + int emTeam, + CameraHandle* pCameraHandle +); + +/******************************************************/ +// 函数名 : CameraInitEx +// 功能描述 : 相机初始化。初始化成功后,才能调用任何其他 +// 相机相关的操作接口。 +// 参数 : iDeviceIndex 相机的索引号,CameraEnumerateDeviceEx返回相机个数。 +// iParamLoadMode 相机初始化时使用的参数加载方式。-1表示使用上次退出时的参数加载方式。 +// emTeam 初始化时使用的参数组。-1表示加载上次退出时的参数组。 +// pCameraHandle 相机的句柄指针,初始化成功后,该指针 +// 返回该相机的有效句柄,在调用其他相机 +// 相关的操作接口时,都需要传入该句柄,主要 +// 用于多相机之间的区分。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraInitEx( + int iDeviceIndex, + int iParamLoadMode, + int emTeam, + CameraHandle* pCameraHandle +); + + +/******************************************************/ +// 函数名 : CameraSetCallbackFunction +// 功能描述 : 设置图像捕获的回调函数。当捕获到新的图像数据帧时, +// pCallBack所指向的回调函数就会被调用。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pCallBack 回调函数指针。 +// pContext 回调函数的附加参数,在回调函数被调用时 +// 该附加参数会被传入,可以为NULL。多用于 +// 多个相机时携带附加信息。 +// pCallbackOld 用于保存当前的回调函数。可以为NULL。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetCallbackFunction( + CameraHandle hCamera, + CAMERA_SNAP_PROC pCallBack, + PVOID pContext, + CAMERA_SNAP_PROC* pCallbackOld +); + +/******************************************************/ +// 函数名 : CameraUnInit +// 功能描述 : 相机反初始化。释放资源。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraUnInit( + CameraHandle hCamera +); + +/******************************************************/ +// 函数名 : CameraGetInformation +// 功能描述 : 获得相机的描述信息 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbuffer 指向相机描述信息指针的指针。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetInformation( + CameraHandle hCamera, + char** pbuffer +); + +/******************************************************/ +// 函数名 : CameraImageProcess +// 功能描述 : 将获得的相机原始输出图像数据进行处理,叠加饱和度、 +// 颜色增益和校正、降噪等处理效果,最后得到RGB888 +// 格式的图像数据。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbyIn 输入图像数据的缓冲区地址,不能为NULL。 +// pbyOut 处理后图像输出的缓冲区地址,不能为NULL。 +// pFrInfo 输入图像的帧头信息,处理完成后,帧头信息 +// 中的图像格式uiMediaType会随之改变。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraImageProcess( + CameraHandle hCamera, + BYTE* pbyIn, + BYTE* pbyOut, + tSdkFrameHead* pFrInfo +); + +/******************************************************/ +// 函数名 : CameraDisplayInit +// 功能描述 : 初始化SDK内部的显示模块。在调用CameraDisplayRGB24 +// 前必须先调用该函数初始化。如果您在二次开发中, +// 使用自己的方式进行图像显示(不调用CameraDisplayRGB24), +// 则不需要调用本函数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// hWndDisplay 显示窗口的句柄,一般为窗口的m_hWnd成员。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraDisplayInit( + CameraHandle hCamera, + HWND hWndDisplay +); + +/******************************************************/ +// 函数名 : CameraDisplayRGB24 +// 功能描述 : 显示图像。必须调用过CameraDisplayInit进行 +// 初始化才能调用本函数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbyRGB24 图像的数据缓冲区,RGB888格式。 +// pFrInfo 图像的帧头信息。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraDisplayRGB24( + CameraHandle hCamera, + BYTE* pbyRGB24, + tSdkFrameHead* pFrInfo +); + +/******************************************************/ +// 函数名 : CameraSetDisplayMode +// 功能描述 : 设置显示的模式。必须调用过CameraDisplayInit +// 进行初始化才能调用本函数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iMode 显示模式,DISPLAYMODE_SCALE或者 +// DISPLAYMODE_REAL,具体参见CameraDefine.h +// 中emSdkDisplayMode的定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetDisplayMode( + CameraHandle hCamera, + INT iMode +); + +/******************************************************/ +// 函数名 : CameraSetDisplayOffset +// 功能描述 : 设置显示的起始偏移值。仅当显示模式为DISPLAYMODE_REAL +// 时有效。例如显示控件的大小为320X240,而图像的 +// 的尺寸为640X480,那么当iOffsetX = 160,iOffsetY = 120时 +// 显示的区域就是图像的居中320X240的位置。必须调用过 +// CameraDisplayInit进行初始化才能调用本函数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iOffsetX 偏移的X坐标。 +// iOffsetY 偏移的Y坐标。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetDisplayOffset( + CameraHandle hCamera, + int iOffsetX, + int iOffsetY +); + +/******************************************************/ +// 函数名 : CameraSetDisplaySize +// 功能描述 : 设置显示控件的尺寸。必须调用过 +// CameraDisplayInit进行初始化才能调用本函数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iWidth 宽度 +// iHeight 高度 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetDisplaySize( + CameraHandle hCamera, + INT iWidth, + INT iHeight +); + +/******************************************************/ +// 函数名 : CameraGetImageBuffer +// 功能描述 : 获得一帧图像数据。为了提高效率,SDK在图像抓取时采用了零拷贝机制, +// CameraGetImageBuffer实际获得是内核中的一个缓冲区地址, +// 该函数成功调用后,必须调用CameraReleaseImageBuffer释放由 +// CameraGetImageBuffer得到的缓冲区,以便让内核继续使用 +// 该缓冲区。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pFrameInfo 图像的帧头信息指针。 +// pbyBuffer 指向图像的数据的缓冲区指针。由于 +// 采用了零拷贝机制来提高效率,因此 +// 这里使用了一个指向指针的指针。 +// UINT wTimes 抓取图像的超时时间。单位毫秒。在 +// wTimes时间内还未获得图像,则该函数 +// 会返回超时信息。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetImageBuffer( + CameraHandle hCamera, + tSdkFrameHead* pFrameInfo, + BYTE** pbyBuffer, + UINT wTimes +); + +/******************************************************/ +// 函数名 : CameraGetImageBufferEx +// 功能描述 : 获得一帧图像数据。该接口获得的图像是经过处理后的RGB格式。该函数调用后, +// 不需要调用 CameraReleaseImageBuffer 释放,也不要调用free之类的函数释放 +// 来释放该函数返回的图像数据缓冲区。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piWidth 整形指针,返回图像的宽度 +// piHeight 整形指针,返回图像的高度 +// UINT wTimes 抓取图像的超时时间。单位毫秒。在 +// wTimes时间内还未获得图像,则该函数 +// 会返回超时信息。 +// 返回值 : 成功时,返回RGB数据缓冲区的首地址; +// 否则返回0。 +/******************************************************/ +MVSDK_API unsigned char* CameraGetImageBufferEx( + CameraHandle hCamera, + INT* piWidth, + INT* piHeight, + UINT wTimes +); + + +/******************************************************/ +// 函数名 : CameraSnapToBuffer +// 功能描述 : 抓拍一张图像到缓冲区中。相机会进入抓拍模式,并且 +// 自动切换到抓拍模式的分辨率进行图像捕获。然后将 +// 捕获到的数据保存到缓冲区中。 +// 该函数成功调用后,必须调用CameraReleaseImageBuffer +// 释放由CameraSnapToBuffer得到的缓冲区。具体请参考 +// CameraGetImageBuffer函数的功能描述部分。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pFrameInfo 指针,返回图像的帧头信息。 +// pbyBuffer 指向指针的指针,用来返回图像缓冲区的地址。 +// uWaitTimeMs 超时时间,单位毫秒。在该时间内,如果仍然没有 +// 成功捕获的数据,则返回超时信息。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSnapToBuffer( + CameraHandle hCamera, + tSdkFrameHead* pFrameInfo, + BYTE** pbyBuffer, + UINT uWaitTimeMs +); + +/******************************************************/ +// 函数名 : CameraReleaseImageBuffer +// 功能描述 : 释放由CameraGetImageBuffer获得的缓冲区。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbyBuffer 由CameraGetImageBuffer获得的缓冲区地址。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraReleaseImageBuffer( + CameraHandle hCamera, + BYTE* pbyBuffer +); + +/******************************************************/ +// 函数名 : CameraPlay +// 功能描述 : 让SDK进入工作模式,开始接收来自相机发送的图像 +// 数据。如果当前相机是触发模式,则需要接收到 +// 触发帧以后才会更新图像。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraPlay( + CameraHandle hCamera +); + +/******************************************************/ +// 函数名 : CameraPause +// 功能描述 : 让SDK进入暂停模式,不接收来自相机的图像数据, +// 同时也会发送命令让相机暂停输出,释放传输带宽。 +// 暂停模式下,可以对相机的参数进行配置,并立即生效。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraPause( + CameraHandle hCamera +); + +/******************************************************/ +// 函数名 : CameraStop +// 功能描述 : 让SDK进入停止状态,一般是反初始化时调用该函数, +// 该函数被调用,不能再对相机的参数进行配置。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraStop( + CameraHandle hCamera +); + +/******************************************************/ +// 函数名 : CameraInitRecord +// 功能描述 : 初始化一次录像。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iFormat 录像的格式,当前只支持不压缩和MSCV两种方式。 +// 0:不压缩;1:MSCV方式压缩。 +// pcSavePath 录像文件保存的路径。 +// b2GLimit 如果为TRUE,则文件大于2G时自动分割。 +// dwQuality 录像的质量因子,越大,则质量越好。范围1到100. +// iFrameRate 录像的帧率。建议设定的比实际采集帧率大, +// 这样就不会漏帧。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraInitRecord( + CameraHandle hCamera, + int iFormat, + char* pcSavePath, + BOOL b2GLimit, + DWORD dwQuality, + int iFrameRate +); + +/******************************************************/ +// 函数名 : CameraStopRecord +// 功能描述 : 结束本次录像。当CameraInitRecord后,可以通过该函数 +// 来结束一次录像,并完成文件保存操作。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraStopRecord( + CameraHandle hCamera +); + +/******************************************************/ +// 函数名 : CameraPushFrame +// 功能描述 : 将一帧数据存入录像流中。必须调用CameraInitRecord +// 才能调用该函数。CameraStopRecord调用后,不能再调用 +// 该函数。由于我们的帧头信息中携带了图像采集的时间戳 +// 信息,因此录像可以精准的时间同步,而不受帧率不稳定 +// 的影响。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbyImageBuffer 图像的数据缓冲区,必须是RGB格式。 +// pFrInfo 图像的帧头信息。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraPushFrame( + CameraHandle hCamera, + BYTE* pbyImageBuffer, + tSdkFrameHead* pFrInfo +); + +/******************************************************/ +// 函数名 : CameraSaveImage +// 功能描述 : 将图像缓冲区的数据保存成图片文件。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// lpszFileName 图片保存文件完整路径。 +// pbyImageBuffer 图像的数据缓冲区。 +// pFrInfo 图像的帧头信息。 +// byFileType 图像保存的格式。取值范围参见CameraDefine.h +// 中emSdkFileType的类型定义。目前支持 +// BMP、JPG、PNG、RAW四种格式。其中RAW表示 +// 相机输出的原始数据,保存RAW格式文件要求 +// pbyImageBuffer和pFrInfo是由CameraGetImageBuffer +// 获得的数据,而且未经CameraImageProcess转换 +// 成BMP格式;反之,如果要保存成BMP、JPG或者 +// PNG格式,则pbyImageBuffer和pFrInfo是由 +// CameraImageProcess处理后的RGB格式数据。 +// 具体用法可以参考Advanced的例程。 +// byQuality 图像保存的质量因子,仅当保存为JPG格式 +// 时该参数有效,范围1到100。其余格式 +// 可以写成0。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSaveImage( + CameraHandle hCamera, + char* lpszFileName, + BYTE* pbyImageBuffer, + tSdkFrameHead* pFrInfo, + BYTE byFileType, + BYTE byQuality +); + +/******************************************************/ +// 函数名 : CameraGetImageResolution +// 功能描述 : 获得当前预览的分辨率。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// psCurVideoSize 结构体指针,用于返回当前的分辨率。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetImageResolution( + CameraHandle hCamera, + tSdkImageResolution* psCurVideoSize +); + +/******************************************************/ +// 函数名 : CameraSetImageResolution +// 功能描述 : 设置预览的分辨率。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pImageResolution 结构体指针,用于返回当前的分辨率。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetImageResolution( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution +); + +/******************************************************/ +// 函数名 : CameraGetMediaType +// 功能描述 : 获得相机当前输出原始数据的格式索引号。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piMediaType 指针,用于返回当前格式类型的索引号。 +// 由CameraGetCapability获得相机的属性, +// 在tSdkCameraCapbility结构体中的pMediaTypeDesc +// 成员中,以数组的形式保存了相机支持的格式, +// piMediaType所指向的索引号,就是该数组的索引号。 +// pMediaTypeDesc[*piMediaType].iMediaType则表示当前格式的 +// 编码。该编码请参见CameraDefine.h中[图像格式定义]部分。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetMediaType( + CameraHandle hCamera, + INT* piMediaType +); + +/******************************************************/ +// 函数名 : CameraSetMediaType +// 功能描述 : 设置相机的输出原始数据格式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iMediaType 由CameraGetCapability获得相机的属性, +// 在tSdkCameraCapbility结构体中的pMediaTypeDesc +// 成员中,以数组的形式保存了相机支持的格式, +// iMediaType就是该数组的索引号。 +// pMediaTypeDesc[iMediaType].iMediaType则表示当前格式的 +// 编码。该编码请参见CameraDefine.h中[图像格式定义]部分。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetMediaType( + CameraHandle hCamera, + INT iMediaType +); + +/******************************************************/ +// 函数名 : CameraSetAeState +// 功能描述 : 设置相机曝光的模式。自动或者手动。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bAeState TRUE,使能自动曝光;FALSE,停止自动曝光。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetAeState( + CameraHandle hCamera, + BOOL bAeState +); + +/******************************************************/ +// 函数名 : CameraGetAeState +// 功能描述 : 获得相机当前的曝光模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pAeState 指针,用于返回自动曝光的使能状态。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetAeState( + CameraHandle hCamera, + BOOL* pAeState +); + +/******************************************************/ +// 函数名 : CameraSetSharpness +// 功能描述 : 设置图像的处理的锐化参数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iSharpness 锐化参数。范围由CameraGetCapability +// 获得,一般是[0,100],0表示关闭锐化处理。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetSharpness( + CameraHandle hCamera, + int iSharpness +); + +/******************************************************/ +// 函数名 : CameraGetSharpness +// 功能描述 : 获取当前锐化设定值。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piSharpness 指针,返回当前设定的锐化的设定值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetSharpness( + CameraHandle hCamera, + int* piSharpness +); + +/******************************************************/ +// 函数名 : CameraSetLutMode +// 功能描述 : 设置相机的查表变换模式LUT模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// emLutMode LUTMODE_PARAM_GEN 表示由伽马和对比度参数动态生成LUT表。 +// LUTMODE_PRESET 表示使用预设的LUT表。 +// LUTMODE_USER_DEF 表示使用用户自定的LUT表。 +// LUTMODE_PARAM_GEN的定义参考CameraDefine.h中emSdkLutMode类型。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetLutMode( + CameraHandle hCamera, + int emLutMode +); + +/******************************************************/ +// 函数名 : CameraGetLutMode +// 功能描述 : 获得相机的查表变换模式LUT模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pemLutMode 指针,返回当前LUT模式。意义与CameraSetLutMode +// 中emLutMode参数相同。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetLutMode( + CameraHandle hCamera, + int* pemLutMode +); + +/******************************************************/ +// 函数名 : CameraSelectLutPreset +// 功能描述 : 选择预设LUT模式下的LUT表。必须先使用CameraSetLutMode +// 将LUT模式设置为预设模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iSel 表的索引号。表的个数由CameraGetCapability +// 获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSelectLutPreset( + CameraHandle hCamera, + int iSel +); + +/******************************************************/ +// 函数名 : CameraGetLutPresetSel +// 功能描述 : 获得预设LUT模式下的LUT表索引号。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piSel 指针,返回表的索引号。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetLutPresetSel( + CameraHandle hCamera, + int* piSel +); + +/******************************************************/ +// 函数名 : CameraSetCustomLut +// 功能描述 : 设置自定义的LUT表。必须先使用CameraSetLutMode +// 将LUT模式设置为自定义模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iChannel 指定要设定的LUT颜色通道,当为LUT_CHANNEL_ALL时, +// 三个通道的LUT将被同时替换。 +// 参考CameraDefine.h中emSdkLutChannel定义。 +// pLut 指针,指向LUT表的地址。LUT表为无符号短整形数组,数组大小为 +// 4096,分别代码颜色通道从0到4096(12bit颜色精度)对应的映射值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetCustomLut( + CameraHandle hCamera, + int iChannel, + USHORT* pLut +); + +/******************************************************/ +// 函数名 : CameraGetCustomLut +// 功能描述 : 获得当前使用的自定义LUT表。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iChannel 指定要获得的LUT颜色通道。当为LUT_CHANNEL_ALL时, +// 返回红色通道的LUT表。 +// 参考CameraDefine.h中emSdkLutChannel定义。 +// pLut 指针,指向LUT表的地址。LUT表为无符号短整形数组,数组大小为 +// 4096,分别代码颜色通道从0到4096(12bit颜色精度)对应的映射值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetCustomLut( + CameraHandle hCamera, + int iChannel, + USHORT* pLut +); + +/******************************************************/ +// 函数名 : CameraGetCurrentLut +// 功能描述 : 获得相机当前的LUT表,在任何LUT模式下都可以调用, +// 用来直观的观察LUT曲线的变化。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iChannel 指定要获得的LUT颜色通道。当为LUT_CHANNEL_ALL时, +// 返回红色通道的LUT表。 +// 参考CameraDefine.h中emSdkLutChannel定义。 +// pLut 指针,指向LUT表的地址。LUT表为无符号短整形数组,数组大小为 +// 4096,分别代码颜色通道从0到4096(12bit颜色精度)对应的映射值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetCurrentLut( + CameraHandle hCamera, + int iChannel, + USHORT* pLut +); + +/******************************************************/ +// 函数名 : CameraSetWbMode +// 功能描述 : 设置相机白平衡模式。分为手动和自动两种方式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bAuto TRUE,则表示使能自动模式。 +// FALSE,则表示使用手动模式,通过调用 +// CameraSetOnceWB来进行一次白平衡。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetWbMode( + CameraHandle hCamera, + BOOL bAuto +); + +/******************************************************/ +// 函数名 : CameraGetWbMode +// 功能描述 : 获得当前的白平衡模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbAuto 指针,返回TRUE表示自动模式,FALSE +// 为手动模式。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetWbMode( + CameraHandle hCamera, + BOOL* pbAuto +); + +/******************************************************/ +// 函数名 : CameraSetPresetClrTemp +// 功能描述 : 选择指定预设色温模式 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iSel 预设色温的模式索引号,从0开始 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetPresetClrTemp( + CameraHandle hCamera, + int iSel +); + +/******************************************************/ +// 函数名 : CameraGetPresetClrTemp +// 功能描述 : 获得当前选择的预设色温模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piSel 指针,返回选择的预设色温索引号 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetPresetClrTemp( + CameraHandle hCamera, + int* piSel +); + +/******************************************************/ +// 函数名 : CameraSetUserClrTempGain +// 功能描述 : 设置自定义色温模式下的数字增益 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iRgain 红色增益,范围0到400,表示0到4倍 +// iGgain 绿色增益,范围0到400,表示0到4倍 +// iBgain 蓝色增益,范围0到400,表示0到4倍 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetUserClrTempGain( + CameraHandle hCamera, + int iRgain, + int iGgain, + int iBgain +); + + +/******************************************************/ +// 函数名 : CameraGetUserClrTempGain +// 功能描述 : 获得自定义色温模式下的数字增益 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piRgain 指针,返回红色增益,范围0到400,表示0到4倍 +// piGgain 指针,返回绿色增益,范围0到400,表示0到4倍 +// piBgain 指针,返回蓝色增益,范围0到400,表示0到4倍 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetUserClrTempGain( + CameraHandle hCamera, + int* piRgain, + int* piGgain, + int* piBgain +); + +/******************************************************/ +// 函数名 : CameraSetUserClrTempMatrix +// 功能描述 : 设置自定义色温模式下的颜色矩阵 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pMatrix 指向一个float[3][3]数组的首地址 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetUserClrTempMatrix( + CameraHandle hCamera, + float* pMatrix +); + + +/******************************************************/ +// 函数名 : CameraGetUserClrTempMatrix +// 功能描述 : 获得自定义色温模式下的颜色矩阵 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pMatrix 指向一个float[3][3]数组的首地址 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetUserClrTempMatrix( + CameraHandle hCamera, + float* pMatrix +); + +/******************************************************/ +// 函数名 : CameraSetClrTempMode +// 功能描述 : 设置白平衡时使用的色温模式, +// 支持的模式有三种,分别是自动,预设和自定义。 +// 自动模式下,会自动选择合适的色温模式 +// 预设模式下,会使用用户指定的色温模式 +// 自定义模式下,使用用户自定义的色温数字增益和矩阵 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iMode 模式,只能是emSdkClrTmpMode中定义的一种 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetClrTempMode( + CameraHandle hCamera, + int iMode +); + +/******************************************************/ +// 函数名 : CameraGetClrTempMode +// 功能描述 : 获得白平衡时使用的色温模式。参考CameraSetClrTempMode +// 中功能描述部分。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pimode 指针,返回模式选择,参考emSdkClrTmpMode类型定义 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetClrTempMode( + CameraHandle hCamera, + int* pimode +); + + + +/******************************************************/ +// 函数名 : CameraSetOnceWB +// 功能描述 : 在手动白平衡模式下,调用该函数会进行一次白平衡。 +// 生效的时间为接收到下一帧图像数据时。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetOnceWB( + CameraHandle hCamera +); + +/******************************************************/ +// 函数名 : CameraSetOnceBB +// 功能描述 : 执行一次黑平衡操作。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetOnceBB( + CameraHandle hCamera +); + + +/******************************************************/ +// 函数名 : CameraSetAeTarget +// 功能描述 : 设定自动曝光的亮度目标值。设定范围由CameraGetCapability +// 函数获得。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iAeTarget 亮度目标值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetAeTarget( + CameraHandle hCamera, + int iAeTarget +); + +/******************************************************/ +// 函数名 : CameraGetAeTarget +// 功能描述 : 获得自动曝光的亮度目标值。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// *piAeTarget 指针,返回目标值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetAeTarget( + CameraHandle hCamera, + int* piAeTarget +); + +/******************************************************/ +// 函数名 : CameraSetExposureTime +// 功能描述 : 设置曝光时间。单位为微秒。对于CMOS传感器,其曝光 +// 的单位是按照行来计算的,因此,曝光时间并不能在微秒 +// 级别连续可调。而是会按照整行来取舍。在调用 +// 本函数设定曝光时间后,建议再调用CameraGetExposureTime +// 来获得实际设定的值。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// fExposureTime 曝光时间,单位微秒。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ + +MVSDK_API CameraSdkStatus CameraSetExposureTime( + CameraHandle hCamera, + double fExposureTime +); + +/******************************************************/ +// 函数名 : CameraGetExposureLineTime +// 功能描述 : 获得一行的曝光时间。对于CMOS传感器,其曝光 +// 的单位是按照行来计算的,因此,曝光时间并不能在微秒 +// 级别连续可调。而是会按照整行来取舍。这个函数的 +// 作用就是返回CMOS相机曝光一行对应的时间。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pfLineTime 指针,返回一行的曝光时间,单位为微秒。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ + +MVSDK_API CameraSdkStatus CameraGetExposureLineTime( + CameraHandle hCamera, + double* pfLineTime +); + +/******************************************************/ +// 函数名 : CameraGetExposureTime +// 功能描述 : 获得相机的曝光时间。请参见CameraSetExposureTime +// 的功能描述。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pfExposureTime 指针,返回当前的曝光时间,单位微秒。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetExposureTime( + CameraHandle hCamera, + double* pfExposureTime +); + +/******************************************************/ +// 函数名 : CameraSetAnalogGain +// 功能描述 : 设置相机的图像模拟增益值。该值乘以CameraGetCapability获得 +// 的相机属性结构体中sExposeDesc.fAnalogGainStep,就 +// 得到实际的图像信号放大倍数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iAnalogGain 设定的模拟增益值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetAnalogGain( + CameraHandle hCamera, + INT iAnalogGain +); + +/******************************************************/ +// 函数名 : CameraGetAnalogGain +// 功能描述 : 获得图像信号的模拟增益值。参见CameraSetAnalogGain +// 详细说明。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piAnalogGain 指针,返回当前的模拟增益值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetAnalogGain( + CameraHandle hCamera, + INT* piAnalogGain +); + +/******************************************************/ +// 函数名 : CameraSetGain +// 功能描述 : 设置图像的数字增益。设定范围由CameraGetCapability +// 获得的相机属性结构体中sRgbGainRange成员表述。 +// 实际的放大倍数是设定值/100。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iRGain 红色通道的增益值。 +// iGGain 绿色通道的增益值。 +// iBGain 蓝色通道的增益值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetGain( + CameraHandle hCamera, + int iRGain, + int iGGain, + int iBGain +); + + +/******************************************************/ +// 函数名 : CameraGetGain +// 功能描述 : 获得图像处理的数字增益。具体请参见CameraSetGain +// 的功能描述部分。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piRGain 指针,返回红色通道的数字增益值。 +// piGGain 指针,返回绿色通道的数字增益值。 +// piBGain 指针,返回蓝色通道的数字增益值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetGain( + CameraHandle hCamera, + int* piRGain, + int* piGGain, + int* piBGain +); + + +/******************************************************/ +// 函数名 : CameraSetGamma +// 功能描述 : 设定LUT动态生成模式下的Gamma值。设定的值会 +// 马上保存在SDK内部,但是只有当相机处于动态 +// 参数生成的LUT模式时,才会生效。请参考CameraSetLutMode +// 的函数说明部分。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iGamma 要设定的Gamma值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetGamma( + CameraHandle hCamera, + int iGamma +); + +/******************************************************/ +// 函数名 : CameraGetGamma +// 功能描述 : 获得LUT动态生成模式下的Gamma值。请参考CameraSetGamma +// 函数的功能描述。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piGamma 指针,返回当前的Gamma值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetGamma( + CameraHandle hCamera, + int* piGamma +); + +/******************************************************/ +// 函数名 : CameraSetContrast +// 功能描述 : 设定LUT动态生成模式下的对比度值。设定的值会 +// 马上保存在SDK内部,但是只有当相机处于动态 +// 参数生成的LUT模式时,才会生效。请参考CameraSetLutMode +// 的函数说明部分。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iContrast 设定的对比度值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetContrast( + CameraHandle hCamera, + int iContrast +); + +/******************************************************/ +// 函数名 : CameraGetContrast +// 功能描述 : 获得LUT动态生成模式下的对比度值。请参考 +// CameraSetContrast函数的功能描述。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piContrast 指针,返回当前的对比度值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetContrast( + CameraHandle hCamera, + int* piContrast +); + +/******************************************************/ +// 函数名 : CameraSetSaturation +// 功能描述 : 设定图像处理的饱和度。对黑白相机无效。 +// 设定范围由CameraGetCapability获得。100表示 +// 表示原始色度,不增强。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iSaturation 设定的饱和度值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetSaturation( + CameraHandle hCamera, + int iSaturation +); + +/******************************************************/ +// 函数名 : CameraGetSaturation +// 功能描述 : 获得图像处理的饱和度。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piSaturation 指针,返回当前图像处理的饱和度值。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetSaturation( + CameraHandle hCamera, + int* piSaturation +); + +/******************************************************/ +// 函数名 : CameraSetMonochrome +// 功能描述 : 设置彩色转为黑白功能的使能。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bEnable TRUE,表示将彩色图像转为黑白。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetMonochrome( + CameraHandle hCamera, + BOOL bEnable +); + +/******************************************************/ +// 函数名 : CameraGetMonochrome +// 功能描述 : 获得彩色转换黑白功能的使能状况。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbEnable 指针。返回TRUE表示开启了彩色图像 +// 转换为黑白图像的功能。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetMonochrome( + CameraHandle hCamera, + BOOL* pbEnable +); + +/******************************************************/ +// 函数名 : CameraSetInverse +// 功能描述 : 设置彩图像颜色翻转功能的使能。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bEnable TRUE,表示开启图像颜色翻转功能, +// 可以获得类似胶卷底片的效果。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetInverse( + CameraHandle hCamera, + BOOL bEnable +); + +/******************************************************/ +// 函数名 : CameraGetInverse +// 功能描述 : 获得图像颜色反转功能的使能状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbEnable 指针,返回该功能使能状态。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetInverse( + CameraHandle hCamera, + BOOL* pbEnable +); + +/******************************************************/ +// 函数名 : CameraSetAntiFlick +// 功能描述 : 设置自动曝光时抗频闪功能的使能状态。对于手动 +// 曝光模式下无效。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bEnable TRUE,开启抗频闪功能;FALSE,关闭该功能。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetAntiFlick( + CameraHandle hCamera, + BOOL bEnable +); + +/******************************************************/ +// 函数名 : CameraGetAntiFlick +// 功能描述 : 获得自动曝光时抗频闪功能的使能状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbEnable 指针,返回该功能的使能状态。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetAntiFlick( + CameraHandle hCamera, + BOOL* pbEnable +); + +/******************************************************/ +// 函数名 : CameraGetLightFrequency +// 功能描述 : 获得自动曝光时,消频闪的频率选择。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piFrequencySel 指针,返回选择的索引号。0:50HZ 1:60HZ +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetLightFrequency( + CameraHandle hCamera, + int* piFrequencySel +); + +/******************************************************/ +// 函数名 : CameraSetLightFrequency +// 功能描述 : 设置自动曝光时消频闪的频率。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iFrequencySel 0:50HZ , 1:60HZ +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetLightFrequency( + CameraHandle hCamera, + int iFrequencySel +); + +/******************************************************/ +// 函数名 : CameraSetFrameSpeed +// 功能描述 : 设定相机输出图像的帧率。相机可供选择的帧率模式由 +// CameraGetCapability获得的信息结构体中iFrameSpeedDesc +// 表示最大帧率选择模式个数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iFrameSpeed 选择的帧率模式索引号,范围从0到 +// CameraGetCapability获得的信息结构体中iFrameSpeedDesc - 1 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetFrameSpeed( + CameraHandle hCamera, + int iFrameSpeed +); + +/******************************************************/ +// 函数名 : CameraGetFrameSpeed +// 功能描述 : 获得相机输出图像的帧率选择索引号。具体用法参考 +// CameraSetFrameSpeed函数的功能描述部分。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piFrameSpeed 指针,返回选择的帧率模式索引号。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetFrameSpeed( + CameraHandle hCamera, + int* piFrameSpeed +); + + +/******************************************************/ +// 函数名 : CameraSetParameterMode +// 功能描述 : 设定参数存取的目标对象。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iMode 参数存取的对象。参考CameraDefine.h +// 中emSdkParameterMode的类型定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetParameterMode( + CameraHandle hCamera, + int iMode +); + +/******************************************************/ +// 函数名 : CameraGetParameterMode +// 功能描述 : +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// int* piTarget +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetParameterMode( + CameraHandle hCamera, + int* piTarget +); + +/******************************************************/ +// 函数名 : CameraSetParameterMask +// 功能描述 : 设置参数存取的掩码。参数加载和保存时会根据该 +// 掩码来决定各个模块参数的是否加载或者保存。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// uMask 掩码。参考CameraDefine.h中PROP_SHEET_INDEX +// 类型定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetParameterMask( + CameraHandle hCamera, + UINT uMask +); + +/******************************************************/ +// 函数名 : CameraSaveParameter +// 功能描述 : 保存当前相机参数到指定的参数组中。相机提供了A,B,C,D +// A,B,C,D四组空间来进行参数的保存。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iTeam PARAMETER_TEAM_A 保存到A组中, +// PARAMETER_TEAM_B 保存到B组中, +// PARAMETER_TEAM_C 保存到C组中, +// PARAMETER_TEAM_D 保存到D组中 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSaveParameter( + CameraHandle hCamera, + int iTeam +); + + +/******************************************************/ +// 函数名 : CameraSaveParameterToFile +// 功能描述 : 保存当前相机参数到指定的文件中。该文件可以复制到 +// 别的电脑上供其他相机加载,也可以做参数备份用。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// sFileName 参数文件的完整路径。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSaveParameterToFile( + CameraHandle hCamera, + char* sFileName +); + + +/******************************************************/ +// 函数名 : CameraReadParameterFromFile +// 功能描述 : 从PC上指定的参数文件中加载参数。我公司相机参数 +// 保存在PC上为.config后缀的文件,位于安装下的 +// Camera\Configs文件夹中。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// *sFileName 参数文件的完整路径。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraReadParameterFromFile( + CameraHandle hCamera, + char* sFileName +); + +/******************************************************/ +// 函数名 : CameraLoadParameter +// 功能描述 : 加载指定组的参数到相机中。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iTeam PARAMETER_TEAM_A 加载A组参数, +// PARAMETER_TEAM_B 加载B组参数, +// PARAMETER_TEAM_C 加载C组参数, +// PARAMETER_TEAM_D 加载D组参数, +// PARAMETER_TEAM_DEFAULT 加载默认参数。 +// 类型定义参考CameraDefine.h中emSdkParameterTeam类型 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraLoadParameter( + CameraHandle hCamera, + int iTeam +); + +/******************************************************/ +// 函数名 : CameraGetCurrentParameterGroup +// 功能描述 : 获得当前选择的参数组。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piTeam 指针,返回当前选择的参数组。返回值 +// 参考CameraLoadParameter中iTeam参数。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetCurrentParameterGroup( + CameraHandle hCamera, + int* piTeam +); + +/******************************************************/ +// 函数名 : CameraSetTransPackLen +// 功能描述 : 设置相机传输图像数据的分包大小。 +// 目前的SDK版本中,该接口仅对GIGE接口相机有效, +// 用来控制网络传输的分包大小。对于支持巨帧的网卡, +// 我们建议选择8K的分包大小,可以有效的降低传输 +// 所占用的CPU处理时间。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iPackSel 分包长度选择的索引号。分包长度可由 +// 获得相机属性结构体中pPackLenDesc成员表述, +// iPackLenDesc成员则表示最大可选的分包模式个数。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetTransPackLen( + CameraHandle hCamera, + INT iPackSel +); + +/******************************************************/ +// 函数名 : CameraGetTransPackLen +// 功能描述 : 获得相机当前传输分包大小的选择索引号。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piPackSel 指针,返回当前选择的分包大小索引号。 +// 参见CameraSetTransPackLen中iPackSel的 +// 说明。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetTransPackLen( + CameraHandle hCamera, + INT* piPackSel +); + +/******************************************************/ +// 函数名 : CameraIsAeWinVisible +// 功能描述 : 获得自动曝光参考窗口的显示状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbIsVisible 指针,返回TRUE,则表示当前窗口会 +// 被叠加在图像内容上。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraIsAeWinVisible( + CameraHandle hCamera, + BOOL* pbIsVisible +); + +/******************************************************/ +// 函数名 : CameraSetAeWinVisible +// 功能描述 : 设置自动曝光参考窗口的显示状态。当设置窗口状态 +// 为显示,调用CameraImageOverlay后,能够将窗口位置 +// 以矩形的方式叠加在图像上。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bIsVisible TRUE,设置为显示;FALSE,不显示。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetAeWinVisible( + CameraHandle hCamera, + BOOL bIsVisible +); + +/******************************************************/ +// 函数名 : CameraGetAeWindow +// 功能描述 : 获得自动曝光参考窗口的位置。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piHOff 指针,返回窗口位置左上角横坐标值。 +// piVOff 指针,返回窗口位置左上角纵坐标值。 +// piWidth 指针,返回窗口的宽度。 +// piHeight 指针,返回窗口的高度。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetAeWindow( + CameraHandle hCamera, + INT* piHOff, + INT* piVOff, + INT* piWidth, + INT* piHeight +); + +/******************************************************/ +// 函数名 : CameraSetAeWindow +// 功能描述 : 设置自动曝光的参考窗口。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iHOff 窗口左上角的横坐标 +// iVOff 窗口左上角的纵坐标 +// iWidth 窗口的宽度 +// iHeight 窗口的高度 +// 如果iHOff、iVOff、iWidth、iHeight全部为0,则 +// 窗口设置为每个分辨率下的居中1/2大小。可以随着 +// 分辨率的变化而跟随变化;如果iHOff、iVOff、iWidth、iHeight +// 所决定的窗口位置范围超出了当前分辨率范围内, +// 则自动使用居中1/2大小窗口。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetAeWindow( + CameraHandle hCamera, + int iHOff, + int iVOff, + int iWidth, + int iHeight +); + +/******************************************************/ +// 函数名 : CameraSetMirror +// 功能描述 : 设置图像镜像操作。镜像操作分为水平和垂直两个方向。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iDir 表示镜像的方向。0,表示水平方向;1,表示垂直方向。 +// bEnable TRUE,使能镜像;FALSE,禁止镜像 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetMirror( + CameraHandle hCamera, + int iDir, + BOOL bEnable +); + +/******************************************************/ +// 函数名 : CameraGetMirror +// 功能描述 : 获得图像的镜像状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iDir 表示要获得的镜像方向。 +// 0,表示水平方向;1,表示垂直方向。 +// pbEnable 指针,返回TRUE,则表示iDir所指的方向 +// 镜像被使能。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetMirror( + CameraHandle hCamera, + int iDir, + BOOL* pbEnable +); + +/******************************************************/ +// 函数名 : CameraGetWbWindow +// 功能描述 : 获得白平衡参考窗口的位置。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// PiHOff 指针,返回参考窗口的左上角横坐标 。 +// PiVOff 指针,返回参考窗口的左上角纵坐标 。 +// PiWidth 指针,返回参考窗口的宽度。 +// PiHeight 指针,返回参考窗口的高度。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetWbWindow( + CameraHandle hCamera, + INT* PiHOff, + INT* PiVOff, + INT* PiWidth, + INT* PiHeight +); + +/******************************************************/ +// 函数名 : CameraSetWbWindow +// 功能描述 : 设置白平衡参考窗口的位置。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iHOff 参考窗口的左上角横坐标。 +// iVOff 参考窗口的左上角纵坐标。 +// iWidth 参考窗口的宽度。 +// iHeight 参考窗口的高度。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetWbWindow( + CameraHandle hCamera, + INT iHOff, + INT iVOff, + INT iWidth, + INT iHeight +); + +/******************************************************/ +// 函数名 : CameraIsWbWinVisible +// 功能描述 : 获得白平衡窗口的显示状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbShow 指针,返回TRUE,则表示窗口是可见的。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraIsWbWinVisible( + CameraHandle hCamera, + BOOL* pbShow +); + +/******************************************************/ +// 函数名 : CameraSetWbWinVisible +// 功能描述 : 设置白平衡窗口的显示状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bShow TRUE,则表示设置为可见。在调用 +// CameraImageOverlay后,图像内容上将以矩形 +// 的方式叠加白平衡参考窗口的位置。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetWbWinVisible( + CameraHandle hCamera, + BOOL bShow +); + +/******************************************************/ +// 函数名 : CameraImageOverlay +// 功能描述 : 将输入的图像数据上叠加十字线、白平衡参考窗口、 +// 自动曝光参考窗口等图形。只有设置为可见状态的 +// 十字线和参考窗口才能被叠加上。 +// 注意,该函数的输入图像必须是RGB格式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pRgbBuffer 图像数据缓冲区。 +// pFrInfo 图像的帧头信息。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraImageOverlay( + CameraHandle hCamera, + BYTE* pRgbBuffer, + tSdkFrameHead* pFrInfo +); + +/******************************************************/ +// 函数名 : CameraSetCrossLine +// 功能描述 : 设置指定十字线的参数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iLine 表示要设置第几条十字线的状态。范围为[0,8],共9条。 +// x 十字线中心位置的横坐标值。 +// y 十字线中心位置的纵坐标值。 +// uColor 十字线的颜色,格式为(R|(G<<8)|(B<<16)) +// bVisible 十字线的显示状态。TRUE,表示显示。 +// 只有设置为显示状态的十字线,在调用 +// CameraImageOverlay后才会被叠加到图像上。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetCrossLine( + CameraHandle hCamera, + int iLine, + INT x, + INT y, + UINT uColor, + BOOL bVisible +); + +/******************************************************/ +// 函数名 : CameraGetCrossLine +// 功能描述 : 获得指定十字线的状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iLine 表示要获取的第几条十字线的状态。范围为[0,8],共9条。 +// px 指针,返回该十字线中心位置的横坐标。 +// py 指针,返回该十字线中心位置的横坐标。 +// pcolor 指针,返回该十字线的颜色,格式为(R|(G<<8)|(B<<16))。 +// pbVisible 指针,返回TRUE,则表示该十字线可见。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetCrossLine( + CameraHandle hCamera, + INT iLine, + INT* px, + INT* py, + UINT* pcolor, + BOOL* pbVisible +); + +/******************************************************/ +// 函数名 : CameraGetCapability +// 功能描述 : 获得相机的特性描述结构体。该结构体中包含了相机 +// 可设置的各种参数的范围信息。决定了相关函数的参数 +// 返回,也可用于动态创建相机的配置界面。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pCameraInfo 指针,返回该相机特性描述的结构体。 +// tSdkCameraCapbility在CameraDefine.h中定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetCapability( + CameraHandle hCamera, + tSdkCameraCapbility* pCameraInfo +); + +/******************************************************/ +// 函数名 : CameraGetCapabilityEx +// 功能描述 : 获得相机的特性描述结构体。该结构体中包含了相机 +// 可设置的各种参数的范围信息。决定了相关函数的参数 +// 返回,也可用于动态创建相机的配置界面。 +// 参数 : sDeviceModel 相机的型号,由扫描列表中获取 +// pCameraInfo 指针,返回该相机特性描述的结构体。 +// tSdkCameraCapbility在CameraDefine.h中定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetCapabilityEx( + char* sDeviceModel, + tSdkCameraCapbility* pCameraInfo, + PVOID hCameraHandle +); + + +/******************************************************/ +// 函数名 : CameraWriteSN +// 功能描述 : 设置相机的序列号。我公司相机序列号分为3级。 +// 0级的是我公司自定义的相机序列号,出厂时已经 +// 设定好,1级和2级留给二次开发使用。每级序列 +// 号长度都是32个字节。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbySN 序列号的缓冲区。 +// iLevel 要设定的序列号级别,只能是1或者2。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraWriteSN( + CameraHandle hCamera, + BYTE* pbySN, + INT iLevel +); + +/******************************************************/ +// 函数名 : CameraReadSN +// 功能描述 : 读取相机指定级别的序列号。序列号的定义请参考 +// CameraWriteSN函数的功能描述部分。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pbySN 序列号的缓冲区。 +// iLevel 要读取的序列号级别。只能是1和2。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraReadSN( + CameraHandle hCamera, + BYTE* pbySN, + INT iLevel +); +/******************************************************/ +// 函数名 : CameraSetTriggerDelayTime +// 功能描述 : 设置硬件触发模式下的触发延时时间,单位微秒。 +// 当硬触发信号来临后,经过指定的延时,再开始采集 +// 图像。仅部分型号的相机支持该功能。具体请查看 +// 产品说明书。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// uDelayTimeUs 硬触发延时。单位微秒。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetTriggerDelayTime( + CameraHandle hCamera, + UINT uDelayTimeUs +); + +/******************************************************/ +// 函数名 : CameraGetTriggerDelayTime +// 功能描述 : 获得当前设定的硬触发延时时间。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// puDelayTimeUs 指针,返回延时时间,单位微秒。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetTriggerDelayTime( + CameraHandle hCamera, + UINT* puDelayTimeUs +); + +/******************************************************/ +// 函数名 : CameraSetTriggerCount +// 功能描述 : 设置触发模式下的触发帧数。对软件触发和硬件触发 +// 模式都有效。默认为1帧,即一次触发信号采集一帧图像。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iCount 一次触发采集的帧数。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetTriggerCount( + CameraHandle hCamera, + INT iCount +); + +/******************************************************/ +// 函数名 : CameraGetTriggerCount +// 功能描述 : 获得一次触发的帧数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// INT* piCount +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetTriggerCount( + CameraHandle hCamera, + INT* piCount +); + +/******************************************************/ +// 函数名 : CameraSoftTrigger +// 功能描述 : 执行一次软触发。执行后,会触发由CameraSetTriggerCount +// 指定的帧数。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSoftTrigger( + CameraHandle hCamera +); + +/******************************************************/ +// 函数名 : CameraSetTriggerMode +// 功能描述 : 设置相机的触发模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iModeSel 模式选择索引号。可设定的模式由 +// CameraGetCapability函数获取。请参考 +// CameraDefine.h中tSdkCameraCapbility的定义。 +// 一般情况,0表示连续采集模式;1表示 +// 软件触发模式;2表示硬件触发模式。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetTriggerMode( + CameraHandle hCamera, + int iModeSel +); + +/******************************************************/ +// 函数名 : CameraGetTriggerMode +// 功能描述 : 获得相机的触发模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piModeSel 指针,返回当前选择的相机触发模式的索引号。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetTriggerMode( + CameraHandle hCamera, + INT* piModeSel +); + +/******************************************************/ +// 函数名 : CameraSetStrobeMode +// 功能描述 : 设置IO引脚端子上的STROBE信号。该信号可以做闪光灯控制,也可以做外部机械快门控制。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iMode 当为STROBE_SYNC_WITH_TRIG_AUTO 和触发信号同步,触发后,相机进行曝光时,自动生成STROBE信号。 +// 此时,有效极性可设置(CameraSetStrobePolarity)。 +// 当为STROBE_SYNC_WITH_TRIG_MANUAL时,和触发信号同步,触发后,STROBE延时指定的时间后(CameraSetStrobeDelayTime), +// 再持续指定时间的脉冲(CameraSetStrobePulseWidth), +// 有效极性可设置(CameraSetStrobePolarity)。 +// 当为STROBE_ALWAYS_HIGH时,STROBE信号恒为高,忽略其他设置 +// 当为STROBE_ALWAYS_LOW时,STROBE信号恒为低,忽略其他设置 +// +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetStrobeMode( + CameraHandle hCamera, + INT iMode +); + +/******************************************************/ +// 函数名 : CameraGetStrobeMode +// 功能描述 : 或者当前STROBE信号设置的模式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piMode 指针,返回STROBE_SYNC_WITH_TRIG_AUTO,STROBE_SYNC_WITH_TRIG_MANUAL、STROBE_ALWAYS_HIGH或者STROBE_ALWAYS_LOW。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetStrobeMode( + CameraHandle hCamera, + INT* piMode +); + +/******************************************************/ +// 函数名 : CameraSetStrobeDelayTime +// 功能描述 : 当STROBE信号处于STROBE_SYNC_WITH_TRIG时,通过该函数设置其相对触发信号延时时间。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// uDelayTimeUs 相对触发信号的延时时间,单位为us。可以为0,但不能为负数。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetStrobeDelayTime( + CameraHandle hCamera, + UINT uDelayTimeUs +); + +/******************************************************/ +// 函数名 : CameraGetStrobeDelayTime +// 功能描述 : 当STROBE信号处于STROBE_SYNC_WITH_TRIG时,通过该函数获得其相对触发信号延时时间。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// upDelayTimeUs 指针,返回延时时间,单位us。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetStrobeDelayTime( + CameraHandle hCamera, + UINT* upDelayTimeUs +); + +/******************************************************/ +// 函数名 : CameraSetStrobePulseWidth +// 功能描述 : 当STROBE信号处于STROBE_SYNC_WITH_TRIG时,通过该函数设置其脉冲宽度。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// uTimeUs 脉冲的宽度,单位为时间us。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetStrobePulseWidth( + CameraHandle hCamera, + UINT uTimeUs +); + +/******************************************************/ +// 函数名 : CameraGetStrobePulseWidth +// 功能描述 : 当STROBE信号处于STROBE_SYNC_WITH_TRIG时,通过该函数获得其脉冲宽度。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// upTimeUs 指针,返回脉冲宽度。单位为时间us。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetStrobePulseWidth( + CameraHandle hCamera, + UINT* upTimeUs +); + +/******************************************************/ +// 函数名 : CameraSetStrobePolarity +// 功能描述 : 当STROBE信号处于STROBE_SYNC_WITH_TRIG时,通过该函数设置其有效电平的极性。默认为高有效,当触发信号到来时,STROBE信号被拉高。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iPolarity STROBE信号的极性,0为低电平有效,1为高电平有效。默认为高电平有效。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetStrobePolarity( + CameraHandle hCamera, + INT uPolarity +); + +/******************************************************/ +// 函数名 : CameraGetStrobePolarity +// 功能描述 : 获得相机当前STROBE信号的有效极性。默认为高电平有效。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// ipPolarity 指针,返回STROBE信号当前的有效极性。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetStrobePolarity( + CameraHandle hCamera, + INT* upPolarity +); + +/******************************************************/ +// 函数名 : CameraSetExtTrigSignalType +// 功能描述 : 设置相机外触发信号的种类。上边沿、下边沿、或者高、低电平方式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iType 外触发信号种类,返回值参考CameraDefine.h中 +// emExtTrigSignal类型定义。 + +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetExtTrigSignalType( + CameraHandle hCamera, + INT iType +); + +/******************************************************/ +// 函数名 : CameraGetExtTrigSignalType +// 功能描述 : 获得相机当前外触发信号的种类。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// ipType 指针,返回外触发信号种类,返回值参考CameraDefine.h中 +// emExtTrigSignal类型定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetExtTrigSignalType( + CameraHandle hCamera, + INT* ipType +); + +/******************************************************/ +// 函数名 : CameraSetExtTrigShutterType +// 功能描述 : 设置外触发模式下,相机快门的方式,默认为标准快门方式。 +// 部分滚动快门的CMOS相机支持GRR方式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iType 外触发快门方式。参考CameraDefine.h中emExtTrigShutterMode类型。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetExtTrigShutterType( + CameraHandle hCamera, + INT iType +); + +/******************************************************/ +// 函数名 : CameraSetExtTrigShutterType +// 功能描述 : 获得外触发模式下,相机快门的方式,默认为标准快门方式。 +// 部分滚动快门的CMOS相机支持GRR方式。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// ipType 指针,返回当前设定的外触发快门方式。返回值参考 +// CameraDefine.h中emExtTrigShutterMode类型。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetExtTrigShutterType( + CameraHandle hCamera, + INT* ipType +); + +/******************************************************/ +// 函数名 : CameraSetExtTrigDelayTime +// 功能描述 : 设置外触发信号延时时间,默认为0,单位为微秒。 +// 当设置的值uDelayTimeUs不为0时,相机接收到外触发信号后,将延时uDelayTimeUs个微秒后再进行图像捕获。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// uDelayTimeUs 延时时间,单位为微秒,默认为0. +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetExtTrigDelayTime( + CameraHandle hCamera, + UINT uDelayTimeUs +); + +/******************************************************/ +// 函数名 : CameraGetExtTrigDelayTime +// 功能描述 : 获得设置的外触发信号延时时间,默认为0,单位为微秒。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// UINT* upDelayTimeUs +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetExtTrigDelayTime( + CameraHandle hCamera, + UINT* upDelayTimeUs +); + +/******************************************************/ +// 函数名 : CameraSetExtTrigJitterTime +// 功能描述 : 设置相机外触发信号的消抖时间。默认为0,单位为微秒。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// UINT uTimeUs +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetExtTrigJitterTime( + CameraHandle hCamera, + UINT uTimeUs +); + +/******************************************************/ +// 函数名 : CameraGetExtTrigJitterTime +// 功能描述 : 获得设置的相机外触发消抖时间,默认为0.单位为微妙 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// UINT* upTimeUs +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetExtTrigJitterTime( + CameraHandle hCamera, + UINT* upTimeUs +); + +/******************************************************/ +// 函数名 : CameraGetExtTrigCapability +// 功能描述 : 获得相机外触发的属性掩码 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// puCapabilityMask 指针,返回该相机外触发特性掩码,掩码参考CameraDefine.h中 +// EXT_TRIG_MASK_ 开头的宏定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetExtTrigCapability( + CameraHandle hCamera, + UINT* puCapabilityMask +); + + +/******************************************************/ +// 函数名 : CameraGetResolutionForSnap +// 功能描述 : 获得抓拍模式下的分辨率选择索引号。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pImageResolution 指针,返回抓拍模式的分辨率。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetResolutionForSnap( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution +); + +/******************************************************/ +// 函数名 : CameraSetResolutionForSnap +// 功能描述 : 设置抓拍模式下相机输出图像的分辨率。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pImageResolution 如果pImageResolution->iWidth +// 和 pImageResolution->iHeight都为0, +// 则表示设定为跟随当前预览分辨率。抓 +// 怕到的图像的分辨率会和当前设定的 +// 预览分辨率一样。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetResolutionForSnap( + CameraHandle hCamera, + tSdkImageResolution* pImageResolution +); + +/******************************************************/ +// 函数名 : CameraCustomizeResolution +// 功能描述 : 打开分辨率自定义面板,并通过可视化的方式 +// 来配置一个自定义分辨率。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pImageCustom 指针,返回自定义的分辨率。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraCustomizeResolution( + CameraHandle hCamera, + tSdkImageResolution* pImageCustom +); + +/******************************************************/ +// 函数名 : CameraCustomizeReferWin +// 功能描述 : 打开参考窗口自定义面板。并通过可视化的方式来 +// 获得一个自定义窗口的位置。一般是用自定义白平衡 +// 和自动曝光的参考窗口。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iWinType 要生成的参考窗口的用途。0,自动曝光参考窗口; +// 1,白平衡参考窗口。 +// hParent 调用该函数的窗口的句柄。可以为NULL。 +// piHOff 指针,返回自定义窗口的左上角横坐标。 +// piVOff 指针,返回自定义窗口的左上角纵坐标。 +// piWidth 指针,返回自定义窗口的宽度。 +// piHeight 指针,返回自定义窗口的高度。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraCustomizeReferWin( + CameraHandle hCamera, + INT iWinType, + HWND hParent, + INT* piHOff, + INT* piVOff, + INT* piWidth, + INT* piHeight +); + +/******************************************************/ +// 函数名 : CameraShowSettingPage +// 功能描述 : 设置相机属性配置窗口显示状态。必须先调用CameraCreateSettingPage +// 成功创建相机属性配置窗口后,才能调用本函数进行 +// 显示。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bShow TRUE,显示;FALSE,隐藏。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraShowSettingPage( + CameraHandle hCamera, + BOOL bShow +); + +/******************************************************/ +// 函数名 : CameraCreateSettingPage +// 功能描述 : 创建该相机的属性配置窗口。调用该函数,SDK内部会 +// 帮您创建好相机的配置窗口,省去了您重新开发相机 +// 配置界面的时间。强烈建议使用您使用该函数让 +// SDK为您创建好配置窗口。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// hParent 应用程序主窗口的句柄。可以为NULL。 +// pWinText 字符串指针,窗口显示的标题栏。 +// pCallbackFunc 窗口消息的回调函数,当相应的事件发生时, +// pCallbackFunc所指向的函数会被调用, +// 例如切换了参数之类的操作时,pCallbackFunc +// 被回调时,在入口参数处指明了消息类型。 +// 这样可以方便您自己开发的界面和我们生成的UI +// 之间进行同步。该参数可以为NULL。 +// pCallbackCtx 回调函数的附加参数。可以为NULL。pCallbackCtx +// 会在pCallbackFunc被回调时,做为参数之一传入。 +// 您可以使用该参数来做一些灵活的判断。 +// uReserved 预留。必须设置为0。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraCreateSettingPage( + CameraHandle hCamera, + HWND hParent, + char* pWinText, + CAMERA_PAGE_MSG_PROC pCallbackFunc, + PVOID pCallbackCtx, + UINT uReserved +); + +/******************************************************/ +// 函数名 : CameraCreateSettingPageEx +// 功能描述 : 创建该相机的属性配置窗口。调用该函数,SDK内部会 +// 帮您创建好相机的配置窗口,省去了您重新开发相机 +// 配置界面的时间。强烈建议使用您使用该函数让 +// SDK为您创建好配置窗口。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraCreateSettingPageEx( + CameraHandle hCamera +); + + +/******************************************************/ +// 函数名 : CameraSetActiveSettingSubPage +// 功能描述 : 设置相机配置窗口的激活页面。相机配置窗口有多个 +// 子页面构成,该函数可以设定当前哪一个子页面 +// 为激活状态,显示在最前端。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// index 子页面的索引号。参考CameraDefine.h中 +// PROP_SHEET_INDEX的定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetActiveSettingSubPage( + CameraHandle hCamera, + INT index +); + +/******************************************************/ +// 函数名 : CameraSpecialControl +// 功能描述 : 相机一些特殊配置所调用的接口,二次开发时一般不需要 +// 调用。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// dwCtrlCode 控制码。 +// dwParam 控制子码,不同的dwCtrlCode时,意义不同。 +// lpData 附加参数。不同的dwCtrlCode时,意义不同。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSpecialControl( + CameraHandle hCamera, + DWORD dwCtrlCode, + DWORD dwParam, + LPVOID lpData +); + +/******************************************************/ +// 函数名 : CameraGetFrameStatistic +// 功能描述 : 获得相机接收帧率的统计信息,包括错误帧和丢帧的情况。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// psFrameStatistic 指针,返回统计信息。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetFrameStatistic( + CameraHandle hCamera, + tSdkFrameStatistic* psFrameStatistic +); + +/******************************************************/ +// 函数名 : CameraSetNoiseFilter +// 功能描述 : 设置图像降噪模块的使能状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// bEnable TRUE,使能;FALSE,禁止。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetNoiseFilter( + CameraHandle hCamera, + BOOL bEnable +); + +/******************************************************/ +// 函数名 : CameraGetNoiseFilterState +// 功能描述 : 获得图像降噪模块的使能状态。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// *pEnable 指针,返回状态。TRUE,为使能。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetNoiseFilterState( + CameraHandle hCamera, + BOOL* pEnable +); + +/******************************************************/ +// 函数名 : CameraRstTimeStamp +// 功能描述 : 复位图像采集的时间戳,从0开始。 +// 参数 : CameraHandle hCamera +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraRstTimeStamp( + CameraHandle hCamera +); + +/******************************************************/ +// 函数名 : CameraSaveUserData +// 功能描述 : 将用户自定义的数据保存到相机的非易性存储器中。 +// 每个型号的相机可能支持的用户数据区最大长度不一样。 +// 可以从设备的特性描述中获取该长度信息。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// uStartAddr 起始地址,从0开始。 +// pbData 数据缓冲区指针 +// ilen 写入数据的长度,ilen + uStartAddr必须 +// 小于用户区最大长度 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSaveUserData( + CameraHandle hCamera, + UINT uStartAddr, + BYTE *pbData, + int ilen +); + +/******************************************************/ +// 函数名 : CameraLoadUserData +// 功能描述 : 从相机的非易性存储器中读取用户自定义的数据。 +// 每个型号的相机可能支持的用户数据区最大长度不一样。 +// 可以从设备的特性描述中获取该长度信息。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// uStartAddr 起始地址,从0开始。 +// pbData 数据缓冲区指针,返回读到的数据。 +// ilen 读取数据的长度,ilen + uStartAddr必须 +// 小于用户区最大长度 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraLoadUserData( + CameraHandle hCamera, + UINT uStartAddr, + BYTE *pbData, + int ilen +); + +/******************************************************/ +// 函数名 : CameraGetFriendlyName +// 功能描述 : 读取用户自定义的设备昵称。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pName 指针,返回指向0结尾的字符串, +// 设备昵称不超过32个字节,因此该指针 +// 指向的缓冲区必须大于等于32个字节空间。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetFriendlyName( + CameraHandle hCamera, + char* pName +); + +/******************************************************/ +// 函数名 : CameraSetFriendlyName +// 功能描述 : 设置用户自定义的设备昵称。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pName 指针,指向0结尾的字符串, +// 设备昵称不超过32个字节,因此该指针 +// 指向字符串必须小于等于32个字节空间。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetFriendlyName( + CameraHandle hCamera, + char* pName +); + +/******************************************************/ +// 函数名 : CameraSdkGetVersionString +// 功能描述 : +// 参数 : pVersionString 指针,返回SDK版本字符串。 +// 该指针指向的缓冲区大小必须大于 +// 32个字节 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSdkGetVersionString( + char* pVersionString +); + +/******************************************************/ +// 函数名 : CameraCheckFwUpdate +// 功能描述 : 检测固件版本,是否需要升级。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pNeedUpdate 指针,返回固件检测状态,TRUE表示需要更新 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraCheckFwUpdate( + CameraHandle hCamera, + BOOL* pNeedUpdate +); + +/******************************************************/ +// 函数名 : CameraGetFirmwareVision +// 功能描述 : 获得固件版本的字符串 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pVersion 必须指向一个大于32字节的缓冲区, +// 返回固件的版本字符串。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetFirmwareVision( + CameraHandle hCamera, + char* pVersion +); + +/******************************************************/ +// 函数名 : CameraGetEnumInfo +// 功能描述 : 获得指定设备的枚举信息 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pCameraInfo 指针,返回设备的枚举信息。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetEnumInfo( + CameraHandle hCamera, + tSdkCameraDevInfo* pCameraInfo +); + +/******************************************************/ +// 函数名 : CameraGetInerfaceVersion +// 功能描述 : 获得指定设备接口的版本 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// pVersion 指向一个大于32字节的缓冲区,返回接口版本字符串。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetInerfaceVersion( + CameraHandle hCamera, + char* pVersion +); + +/******************************************************/ +// 函数名 : CameraSetIOState +// 功能描述 : 设置指定IO的电平状态,IO为输出型IO,相机 +// 预留可编程输出IO的个数由tSdkCameraCapbility中 +// iOutputIoCounts决定。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iOutputIOIndex IO的索引号,从0开始。 +// uState 要设定的状态,1为高,0为低 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetIOState( + CameraHandle hCamera, + INT iOutputIOIndex, + UINT uState +); + +/******************************************************/ +// 函数名 : CameraGetIOState +// 功能描述 : 设置指定IO的电平状态,IO为输入型IO,相机 +// 预留可编程输出IO的个数由tSdkCameraCapbility中 +// iInputIoCounts决定。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iInputIOIndex IO的索引号,从0开始。 +// puState 指针,返回IO状态,1为高,0为低 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetIOState( + CameraHandle hCamera, + INT iInputIOIndex, + UINT* puState +); + +/******************************************************/ +// 函数名 : CameraSetAeAlgorithm +// 功能描述 : 设置自动曝光时选择的算法,不同的算法适用于 +// 不同的场景。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iIspProcessor 选择执行该算法的对象,参考CameraDefine.h +// emSdkIspProcessor的定义 +// iAeAlgorithmSel 要选择的算法编号。从0开始,最大值由tSdkCameraCapbility +// 中iAeAlmSwDesc和iAeAlmHdDesc决定。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetAeAlgorithm( + CameraHandle hCamera, + INT iIspProcessor, + INT iAeAlgorithmSel +); + +/******************************************************/ +// 函数名 : CameraGetAeAlgorithm +// 功能描述 : 获得当前自动曝光所选择的算法 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iIspProcessor 选择执行该算法的对象,参考CameraDefine.h +// emSdkIspProcessor的定义 +// piAeAlgorithmSel 返回当前选择的算法编号。从0开始,最大值由tSdkCameraCapbility +// 中iAeAlmSwDesc和iAeAlmHdDesc决定。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetAeAlgorithm( + CameraHandle hCamera, + INT iIspProcessor, + INT* piAlgorithmSel +); + +/******************************************************/ +// 函数名 : CameraSetBayerDecAlgorithm +// 功能描述 : 设置Bayer数据转彩色的算法。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iIspProcessor 选择执行该算法的对象,参考CameraDefine.h +// emSdkIspProcessor的定义 +// iAlgorithmSel 要选择的算法编号。从0开始,最大值由tSdkCameraCapbility +// 中iBayerDecAlmSwDesc和iBayerDecAlmHdDesc决定。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetBayerDecAlgorithm( + CameraHandle hCamera, + INT iIspProcessor, + INT iAlgorithmSel +); + +/******************************************************/ +// 函数名 : CameraGetBayerDecAlgorithm +// 功能描述 : 获得Bayer数据转彩色所选择的算法。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iIspProcessor 选择执行该算法的对象,参考CameraDefine.h +// emSdkIspProcessor的定义 +// piAlgorithmSel 返回当前选择的算法编号。从0开始,最大值由tSdkCameraCapbility +// 中iBayerDecAlmSwDesc和iBayerDecAlmHdDesc决定。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetBayerDecAlgorithm( + CameraHandle hCamera, + INT iIspProcessor, + INT* piAlgorithmSel +); + +/******************************************************/ +// 函数名 : CameraSetIspProcessor +// 功能描述 : 设置图像处理单元的算法执行对象,由PC端或者相机端 +// 来执行算法,当由相机端执行时,会降低PC端的CPU占用率。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iIspProcessor 参考CameraDefine.h中 +// emSdkIspProcessor的定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetIspProcessor( + CameraHandle hCamera, + INT iIspProcessor +); + +/******************************************************/ +// 函数名 : CameraGetIspProcessor +// 功能描述 : 获得图像处理单元的算法执行对象。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piIspProcessor 返回选择的对象,返回值参考CameraDefine.h中 +// emSdkIspProcessor的定义。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetIspProcessor( + CameraHandle hCamera, + INT* piIspProcessor +); + +/******************************************************/ +// 函数名 : CameraSetBlackLevel +// 功能描述 : 设置图像的黑电平基准,默认值为0 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iBlackLevel 要设定的电平值。范围为0到255。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetBlackLevel( + CameraHandle hCamera, + INT iBlackLevel +); + +/******************************************************/ +// 函数名 : CameraGetBlackLevel +// 功能描述 : 获得图像的黑电平基准,默认值为0 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piBlackLevel 返回当前的黑电平值。范围为0到255。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetBlackLevel( + CameraHandle hCamera, + INT* piBlackLevel +); + +/******************************************************/ +// 函数名 : CameraSetWhiteLevel +// 功能描述 : 设置图像的白电平基准,默认值为255 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// iWhiteLevel 要设定的电平值。范围为0到255。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetWhiteLevel( + CameraHandle hCamera, + INT iWhiteLevel +); + +/******************************************************/ +// 函数名 : CameraGetWhiteLevel +// 功能描述 : 获得图像的白电平基准,默认值为255 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// piWhiteLevel 返回当前的白电平值。范围为0到255。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetWhiteLevel( + CameraHandle hCamera, + INT* piWhiteLevel +); + +/******************************************************/ +// 函数名 : CameraSetIspOutFormat +// 功能描述 : 设置CameraGetImageBuffer函数的图像处理的输出格式,支持 +// CAMERA_MEDIA_TYPE_MONO8和CAMERA_MEDIA_TYPE_RGB8 +// (在CameraDefine.h中定义)三种,分别对应8位灰度图像和24位彩色图像。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// uFormat 要设定格式。CAMERA_MEDIA_TYPE_MONO8或者CAMERA_MEDIA_TYPE_RGB8 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraSetIspOutFormat( + CameraHandle hCamera, + UINT uFormat +); + +/******************************************************/ +// 函数名 : CameraGetIspOutFormat +// 功能描述 : 获得图像处理的输出格式,目前只支持 +// CAMERA_MEDIA_TYPE_MONO8和CAMERA_MEDIA_TYPE_RGB8 +// (在CameraDefine.h中定义)两种,其他的参数会返回错误。 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// puFormat 返回当前设定的格式。CAMERA_MEDIA_TYPE_MONO8或者CAMERA_MEDIA_TYPE_RGB8 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraGetIspOutFormat( + CameraHandle hCamera, + UINT* puFormat +); + +/******************************************************/ +// 函数名 : CameraGetErrorString +// 功能描述 : 获得错误码对应的描述字符串 +// 参数 : iStatusCode 错误码。(定义于CameraStatus.h中) +// 返回值 : 成功时,返回错误码对应的字符串首地址; +// 否则返回NULL。 +/******************************************************/ +MVSDK_API char* CameraGetErrorString( + CameraSdkStatus iStatusCode +); + + +/******************************************************/ +// 函数名 : CameraReConnect +// 功能描述 : 重新连接设备,用于USB设备意外掉线后重连 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0); +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraReConnect( + CameraHandle hCamera +); + + +/******************************************************/ +// 函数名 : CameraConnectTest +// 功能描述 : 测试相机的连接状态,用于检测相机是否掉线 +// 参数 : hCamera 相机的句柄,由CameraInit函数获得。 +// 返回值 : 成功时,返回CAMERA_STATUS_SUCCESS (0),表示相机连接状态正常; +// 否则返回非0值的错误码,请参考CameraStatus.h +// 中错误码的定义。 +/******************************************************/ +MVSDK_API CameraSdkStatus CameraConnectTest( + CameraHandle hCamera +); + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/others/include/camera/camera_define.h b/others/include/camera/camera_define.h new file mode 100644 index 0000000..1f56316 --- /dev/null +++ b/others/include/camera/camera_define.h @@ -0,0 +1,665 @@ +#pragma once +#ifndef _CAMERA_DEFINE_H_ +#define _CAMERA_DEFINE_H_ + +#include "camera_status.h" + +#define MAX_CROSS_LINE 9 + +//相机的句柄类型定义 +typedef int CameraHandle; +typedef int INT; +typedef long LONG; +typedef unsigned int UINT; +typedef unsigned long long UINT64; +typedef int BOOL; +typedef unsigned char BYTE; +typedef unsigned int DWORD; +typedef void* PVOID; +typedef void* HWND; +typedef char* LPCTSTR; +typedef unsigned short USHORT; +typedef short SHORT; +typedef unsigned char* LPBYTE; +typedef char CHAR; +typedef short WORD; +typedef INT HANDLE; +typedef void VOID; +typedef unsigned long ULONG; +typedef void** LPVOID; +typedef unsigned char UCHAR; +typedef void* HMODULE; + + + +#define TRUE 1 +#define FALSE 0 +//图像查表变换的方式 +typedef enum +{ + LUTMODE_PARAM_GEN=0,//通过调节参数动态生成LUT表 + LUTMODE_PRESET, //使用预设的LUT表 + LUTMODE_USER_DEF //使用用户自定义的LUT表 +}emSdkLutMode; + +//相机的视频流控制 +typedef enum +{ + RUNMODE_PLAY=0, //正常预览,捕获到图像就显示。(如果相机处于触发模式,则会等待触发帧的到来) + RUNMODE_PAUSE, //暂停,会暂停相机的图像输出,同时也不会去捕获图像 + RUNMODE_STOP //停止相机工作。反初始化后,相机就处于停止模式 +}emSdkRunMode; + +//SDK内部显示接口的显示方式 +typedef enum +{ + DISPLAYMODE_SCALE=0, //缩放显示模式,缩放到显示控件的尺寸 + DISPLAYMODE_REAL //1:1显示模式,当图像尺寸大于显示控件的尺寸时,只显示局部 +}emSdkDisplayMode; + +//录像状态 +typedef enum +{ + RECORD_STOP = 0, //停止 + RECORD_START, //录像中 + RECORD_PAUSE //暂停 +}emSdkRecordMode; + +//图像的镜像操作 +typedef enum +{ + MIRROR_DIRECTION_HORIZONTAL = 0,//水平镜像 + MIRROR_DIRECTION_VERTICAL //垂直镜像 +}emSdkMirrorDirection; + +//相机视频的帧率 +typedef enum +{ + FRAME_SPEED_LOW = 0, //低速模式 + FRAME_SPEED_NORMAL, //普通模式 + FRAME_SPEED_HIGH, //高速模式(需要较高的传输带宽,多设备共享传输带宽时会对帧率的稳定性有影响) + FRAME_SPEED_SUPER //超高速模式(需要较高的传输带宽,多设备共享传输带宽时会对帧率的稳定性有影响) +}emSdkFrameSpeed; + +//保存文件的格式类型 +typedef enum +{ + FILE_JPG = 1,//JPG + FILE_BMP = 2,//BMP + FILE_RAW = 4,//相机输出的bayer格式文件,对于不支持bayer格式输出相机,无法保存为该格式 + FILE_PNG = 8 //PNG +}emSdkFileType; + +//相机中的图像传感器的工作模式 +typedef enum +{ + CONTINUATION = 0,//连续采集模式 + SOFT_TRIGGER, //软件触发模式,由软件发送指令后,传感器开始采集指定帧数的图像,采集完成后,停止输出 + EXTERNAL_TRIGGER //硬件触发模式,当接收到外部信号,传感器开始采集指定帧数的图像,采集完成后,停止输出 +} emSdkSnapMode; + +//自动曝光时抗频闪的频闪 +typedef enum +{ + LIGHT_FREQUENCY_50HZ = 0,//50HZ,一般的灯光都是50HZ + LIGHT_FREQUENCY_60HZ //60HZ,主要是指显示器的 +}emSdkLightFrequency; + +//相机的配置参数,分为A,B,C,D 4组进行保存。 +typedef enum +{ + PARAMETER_TEAM_DEFAULT = 0xff, + PARAMETER_TEAM_A = 0, + PARAMETER_TEAM_B = 1, + PARAMETER_TEAM_C = 2, + PARAMETER_TEAM_D = 3 +}emSdkParameterTeam; + + +/*emSdkParameterMode 相机参数加载模式,参数加载分为从文件和从设备加载两种方式 + +PARAM_MODE_BY_MODEL:所有同型号的相机共用ABCD四组参数文件。修改 + 一台相机的参数文件,会影响到整个同型号的 + 相机参数加载。 + +PARAM_MODE_BY_NAME:所有设备名相同的相机,共用ABCD四组参数文件。 + 默认情况下,当电脑上只接了某型号一台相机时, + 设备名都是一样的,而您希望某一台相机能够加载 + 不同的参数文件,则可以通过修改其设备名的方式 + 来让其加载指定的参数文件。 + +PARAM_MODE_BY_SN:相机按照自己的唯一序列号来加载ABCD四组参数文件, + 序列号在出厂时已经固化在相机内,每台相机的序列号 + 都不相同,通过这种方式,每台相机的参数文件都是独立的。 + +您可以根据自己的使用环境,灵活使用以上几种方式加载参数。例如,以 +MV-U300为例,您希望多台该型号的相机在您的 电脑上都共用4组参数,那么就 +使用PARAM_MODE_BY_MODEL方式;如果您希望其中某一台或者某几台MV-U300能 +使用自己参数文件而其余的MV-U300又要使用相同的参数文件,那么使用 +PARAM_MODE_BY_NAME方式;如果您希望每台MV-U300都使用不同的参数文件,那么 +使用PARAM_MODE_BY_SN方式。 +参数文件存在安装目录的 \Camera\Configs 目录下,以config为后缀名的文件。 +*/ +typedef enum +{ + PARAM_MODE_BY_MODEL = 0, //根据相机型号名从文件中加载参数,例如MV-U300 + PARAM_MODE_BY_NAME, //根据设备昵称(tSdkCameraDevInfo.acFriendlyName)从文件中加载参数,例如MV-U300,该昵称可自定义 + PARAM_MODE_BY_SN, //根据设备的唯一序列号从文件中加载参数,序列号在出厂时已经写入设备,每台相机拥有不同的序列号。 + PARAM_MODE_IN_DEVICE //从设备的固态存储器中加载参数。不是所有的型号都支持从相机中读写参数组,由tSdkCameraCapbility.bParamInDevice决定 +}emSdkParameterMode; + + +//SDK生成的相机配置页面掩码值 +typedef enum +{ + PROP_SHEET_INDEX_EXPOSURE = 0, + PROP_SHEET_INDEX_ISP_COLOR, + PROP_SHEET_INDEX_ISP_LUT, + PROP_SHEET_INDEX_ISP_SHAPE, + PROP_SHEET_INDEX_VIDEO_FORMAT, + PROP_SHEET_INDEX_RESOLUTION, + PROP_SHEET_INDEX_IO_CTRL, + PROP_SHEET_INDEX_TRIGGER_SET, + PROP_SHEET_INDEX_OVERLAY, + PROP_SHEET_INDEX_DEVICE_INFO +}emSdkPropSheetMask; + +//SDK生成的相机配置页面的回调消息类型 +typedef enum +{ + SHEET_MSG_LOAD_PARAM_DEFAULT = 0, //参数被恢复成默认后,触发该消息 + SHEET_MSG_LOAD_PARAM_GROUP, //加载指定参数组,触发该消息 + SHEET_MSG_LOAD_PARAM_FROMFILE, //从指定文件加载参数后,触发该消息 + SHEET_MSG_SAVE_PARAM_GROUP //当前参数组被保存时,触发该消息 +}emSdkPropSheetMsg; + +//可视化选择参考窗口的类型 +typedef enum +{ + REF_WIN_AUTO_EXPOSURE = 0, + REF_WIN_WHITE_BALANCE, +}emSdkRefWinType; + +//可视化选择参考窗口的类型 +typedef enum +{ + RES_MODE_PREVIEW = 0, + RES_MODE_SNAPSHOT, +}emSdkResolutionMode; + +//白平衡时色温模式 +typedef enum +{ + CT_MODE_AUTO = 0, //自动识别色温 + CT_MODE_PRESET, //使用指定的预设色温 + CT_MODE_USER_DEF //自定义色温(增益和矩阵) +}emSdkClrTmpMode; + +//LUT的颜色通道 +typedef enum +{ + LUT_CHANNEL_ALL = 0,//R,B,G三通道同时调节 + LUT_CHANNEL_RED, //红色通道 + LUT_CHANNEL_GREEN, //绿色通道 + LUT_CHANNEL_BLUE, //蓝色通道 +}emSdkLutChannel; + +//ISP处理单元 +typedef enum +{ + ISP_PROCESSSOR_PC = 0,//使用PC的软件ISP模块 + ISP_PROCESSSOR_DEVICE //使用相机自带的硬件ISP模块 +}emSdkIspProcessor; + +//闪光灯信号控制方式 +typedef enum +{ + STROBE_SYNC_WITH_TRIG_AUTO = 0, //和触发信号同步,触发后,相机进行曝光时,自动生成STROBE信号。此时,有效极性可设置(CameraSetStrobePolarity)。 + STROBE_SYNC_WITH_TRIG_MANUAL, //和触发信号同步,触发后,STROBE延时指定的时间后(CameraSetStrobeDelayTime),再持续指定时间的脉冲(CameraSetStrobePulseWidth),有效极性可设置(CameraSetStrobePolarity)。 + STROBE_ALWAYS_HIGH, //始终为高,忽略STROBE信号的其他设置 + STROBE_ALWAYS_LOW //始终为低,忽略STROBE信号的其他设置 +}emStrobeControl; + +//硬件外触发的信号种类 +typedef enum +{ + EXT_TRIG_LEADING_EDGE = 0, //上升沿触发,默认为该方式 + EXT_TRIG_TRAILING_EDGE, //下降沿触发 + EXT_TRIG_HIGH_LEVEL, //高电平触发,电平宽度决定曝光时间,仅部分型号的相机支持电平触发方式。 + EXT_TRIG_LOW_LEVEL //低电平触发, +}emExtTrigSignal; + +//硬件外触发时的快门方式 +typedef enum +{ + EXT_TRIG_EXP_STANDARD = 0, //标准方式,默认为该方式。 + EXT_TRIG_EXP_GRR, //全局复位方式,部分滚动快门的CMOS型号的相机支持该方式,配合外部机械快门,可以达到全局快门的效果,适合拍高速运动的物体 +}emExtTrigShutterMode; + + +//相机的设备信息 +typedef struct +{ + char acProductSeries[32]; // 产品系列 + char acProductName[32]; // 产品名称 + char acFriendlyName[32]; // 产品昵称,用户可自定义改昵称,保存在相机内,用于区分多个相机同时使用,可以用CameraSetFriendlyName接口改变该昵称,设备重启后生效。 + char acLinkName[32]; // 内核符号连接名,内部使用 + char acDriverVersion[32]; // 驱动版本 + char acSensorType[32]; // sensor类型 + char acPortType[32]; // 接口类型 + char acSn[32]; // 产品唯一序列号 + UINT uInstance; // 该型号相机在该电脑上的实例索引号,用于区分同型号多相机 +} tSdkCameraDevInfo; + +//tSdkResolutionRange结构体中SKIP、 BIN、RESAMPLE模式的掩码值 +#define MASK_2X2_HD (1<<0) //硬件SKIP、BIN、重采样 2X2 +#define MASK_3X3_HD (1<<1) +#define MASK_4X4_HD (1<<2) +#define MASK_5X5_HD (1<<3) +#define MASK_6X6_HD (1<<4) +#define MASK_7X7_HD (1<<5) +#define MASK_8X8_HD (1<<6) +#define MASK_9X9_HD (1<<7) +#define MASK_10X10_HD (1<<8) +#define MASK_11X11_HD (1<<9) +#define MASK_12X12_HD (1<<10) +#define MASK_13X13_HD (1<<11) +#define MASK_14X14_HD (1<<12) +#define MASK_15X15_HD (1<<13) +#define MASK_16X16_HD (1<<14) +#define MASK_17X17_HD (1<<15) +#define MASK_2X2_SW (1<<16) //硬件SKIP、BIN、重采样 2X2 +#define MASK_3X3_SW (1<<17) +#define MASK_4X4_SW (1<<18) +#define MASK_5X5_SW (1<<19) +#define MASK_6X6_SW (1<<20) +#define MASK_7X7_SW (1<<21) +#define MASK_8X8_SW (1<<22) +#define MASK_9X9_SW (1<<23) +#define MASK_10X10_SW (1<<24) +#define MASK_11X11_SW (1<<25) +#define MASK_12X12_SW (1<<26) +#define MASK_13X13_SW (1<<27) +#define MASK_14X14_SW (1<<28) +#define MASK_15X15_SW (1<<29) +#define MASK_16X16_SW (1<<30) +#define MASK_17X17_SW (1<<31) + +//相机的分辨率设定范围,用于构件UI +typedef struct +{ + INT iHeightMax; //图像最大高度 + INT iHeightMin; //图像最小高度 + INT iWidthMax; //图像最大宽度 + INT iWidthMin; //图像最小宽度 + UINT uSkipModeMask; //SKIP模式掩码,为0,表示不支持SKIP 。bit0为1,表示支持SKIP 2x2 ;bit1为1,表示支持SKIP 3x3.... + UINT uBinSumModeMask; //BIN(求和)模式掩码,为0,表示不支持BIN 。bit0为1,表示支持BIN 2x2 ;bit1为1,表示支持BIN 3x3.... + UINT uBinAverageModeMask; //BIN(求均值)模式掩码,为0,表示不支持BIN 。bit0为1,表示支持BIN 2x2 ;bit1为1,表示支持BIN 3x3.... + UINT uResampleMask; //硬件重采样的掩码 +} tSdkResolutionRange; + + +//相机的分辨率描述 +typedef struct +{ + INT iIndex; // 索引号,[0,N]表示预设的分辨率(N 为预设分辨率的最大个数,一般不超过20),OXFF 表示自定义分辨率(ROI) + char acDescription[32]; // 该分辨率的描述信息。仅预设分辨率时该信息有效。自定义分辨率可忽略该信息 + UINT uBinSumMode; // BIN(求和)的模式,范围不能超过tSdkResolutionRange中uBinSumModeMask + UINT uBinAverageMode; // BIN(求均值)的模式,范围不能超过tSdkResolutionRange中uBinAverageModeMask + UINT uSkipMode; // 是否SKIP的尺寸,为0表示禁止SKIP模式,范围不能超过tSdkResolutionRange中uSkipModeMask + UINT uResampleMask; // 硬件重采样的掩码 + INT iHOffsetFOV; // 采集视场相对于Sensor最大视场左上角的垂直偏移 + INT iVOffsetFOV; // 采集视场相对于Sensor最大视场左上角的水平偏移 + INT iWidthFOV; // 采集视场的宽度 + INT iHeightFOV; // 采集视场的高度 + INT iWidth; // 相机最终输出的图像的宽度 + INT iHeight; // 相机最终输出的图像的高度 + INT iWidthZoomHd; // 硬件缩放的宽度,不需要进行此操作的分辨率,此变量设置为0. + INT iHeightZoomHd; // 硬件缩放的高度,不需要进行此操作的分辨率,此变量设置为0. + INT iWidthZoomSw; // 软件缩放的宽度,不需要进行此操作的分辨率,此变量设置为0. + INT iHeightZoomSw; // 软件缩放的高度,不需要进行此操作的分辨率,此变量设置为0. +} tSdkImageResolution; + +//相机白平衡色温模式描述信息 +typedef struct +{ + INT iIndex; // 模式索引号 + char acDescription[32]; // 描述信息 +} tSdkColorTemperatureDes; + +//相机帧率描述信息 +typedef struct +{ + INT iIndex; // 帧率索引号,一般0对应于低速模式,1对应于普通模式,2对应于高速模式 + char acDescription[32]; // 描述信息 +} tSdkFrameSpeed; + +//相机曝光功能范围定义 +typedef struct +{ + UINT uiTargetMin; //自动曝光亮度目标最小值 + UINT uiTargetMax; //自动曝光亮度目标最大值 + UINT uiAnalogGainMin; //模拟增益的最小值,单位为fAnalogGainStep中定义 + UINT uiAnalogGainMax; //模拟增益的最大值,单位为fAnalogGainStep中定义 + float fAnalogGainStep; //模拟增益每增加1,对应的增加的放大倍数。例如,uiAnalogGainMin一般为16,fAnalogGainStep一般为0.125,那么最小放大倍数就是16*0.125 = 2倍 + UINT uiExposeTimeMin; //手动模式下,曝光时间的最小值,单位:行。根据CameraGetExposureLineTime可以获得一行对应的时间(微秒),从而得到整帧的曝光时间 + UINT uiExposeTimeMax; //手动模式下,曝光时间的最大值,单位:行 +} tSdkExpose; + +//触发模式描述 +typedef struct +{ + INT iIndex; //模式索引号 + char acDescription[32]; //该模式的描述信息 +} tSdkTrigger; + +//传输分包大小描述(主要是针对网络相机有效) +typedef struct +{ + INT iIndex; //分包大小索引号 + char acDescription[32]; //对应的描述信息 + UINT iPackSize; +} tSdkPackLength; + +//预设的LUT表描述 +typedef struct +{ + INT iIndex; //编号 + char acDescription[32]; //描述信息 +} tSdkPresetLut; + +//AE算法描述 +typedef struct +{ + INT iIndex; //编号 + char acDescription[32]; //描述信息 +} tSdkAeAlgorithm; + +//RAW转RGB算法描述 +typedef struct +{ + INT iIndex; //编号 + char acDescription[32]; //描述信息 +} tSdkBayerDecodeAlgorithm; + + +//帧率统计信息 +typedef struct +{ + INT iTotal; //当前采集的总帧数(包括错误帧) + INT iCapture; //当前采集的有效帧的数量 + INT iLost; //当前丢帧的数量 +} tSdkFrameStatistic; + +//相机输出的图像数据格式 +typedef struct +{ + INT iIndex; //格式种类编号 + char acDescription[32]; //描述信息 + UINT iMediaType; //对应的图像格式编码,如CAMERA_MEDIA_TYPE_BAYGR8,在本文件中有定义。 +} tSdkMediaType; + +//伽马的设定范围 +typedef struct +{ + INT iMin; //最小值 + INT iMax; //最大值 +} tGammaRange; + +//对比度的设定范围 +typedef struct +{ + INT iMin; //最小值 + INT iMax; //最大值 +} tContrastRange; + +//RGB三通道数字增益的设定范围 +typedef struct +{ + INT iRGainMin; //红色增益的最小值 + INT iRGainMax; //红色增益的最大值 + INT iGGainMin; //绿色增益的最小值 + INT iGGainMax; //绿色增益的最大值 + INT iBGainMin; //蓝色增益的最小值 + INT iBGainMax; //蓝色增益的最大值 +} tRgbGainRange; + +//饱和度设定的范围 +typedef struct +{ + INT iMin; //最小值 + INT iMax; //最大值 +} tSaturationRange; + +//锐化的设定范围 +typedef struct +{ + INT iMin; //最小值 + INT iMax; //最大值 +} tSharpnessRange; + +//ISP模块的使能信息 +typedef struct +{ + BOOL bMonoSensor; //表示该型号相机是否为黑白相机,如果是黑白相机,则颜色相关的功能都无法调节 + BOOL bWbOnce; //表示该型号相机是否支持手动白平衡功能 + BOOL bAutoWb; //表示该型号相机是否支持自动白平衡功能 + BOOL bAutoExposure; //表示该型号相机是否支持自动曝光功能 + BOOL bManualExposure; //表示该型号相机是否支持手动曝光功能 + BOOL bAntiFlick; //表示该型号相机是否支持抗频闪功能 + BOOL bDeviceIsp; //表示该型号相机是否支持硬件ISP功能 + BOOL bForceUseDeviceIsp;//bDeviceIsp和bForceUseDeviceIsp同时为TRUE时,表示强制只用硬件ISP,不可取消。 + BOOL bZoomHD; //相机硬件是否支持图像缩放输出(只能是缩小)。 +} tSdkIspCapacity; + +/* 定义整合的设备描述信息,这些信息可以用于动态构建UI */ +typedef struct +{ + + tSdkTrigger *pTriggerDesc; // 触发模式 + INT iTriggerDesc; // 触发模式的个数,即pTriggerDesc数组的大小 + + tSdkImageResolution *pImageSizeDesc;// 预设分辨率选择 + INT iImageSizeDesc; // 预设分辨率的个数,即pImageSizeDesc数组的大小 + + tSdkColorTemperatureDes *pClrTempDesc;// 预设色温模式,用于白平衡 + INT iClrTempDesc; + + tSdkMediaType *pMediaTypeDesc; // 相机输出图像格式 + INT iMediaTypdeDesc; // 相机输出图像格式的种类个数,即pMediaTypeDesc数组的大小。 + + tSdkFrameSpeed *pFrameSpeedDesc; // 可调节帧速类型,对应界面上普通 高速 和超级三种速度设置 + INT iFrameSpeedDesc; // 可调节帧速类型的个数,即pFrameSpeedDesc数组的大小。 + + tSdkPackLength *pPackLenDesc; // 传输包长度,一般用于网络设备 + INT iPackLenDesc; // 可供选择的传输分包长度的个数,即pPackLenDesc数组的大小。 + + INT iOutputIoCounts; // 可编程输出IO的个数 + INT iInputIoCounts; // 可编程输入IO的个数 + + tSdkPresetLut *pPresetLutDesc; // 相机预设的LUT表 + INT iPresetLut; // 相机预设的LUT表的个数,即pPresetLutDesc数组的大小 + + INT iUserDataMaxLen; // 指示该相机中用于保存用户数据区的最大长度。为0表示无。 + BOOL bParamInDevice; // 指示该设备是否支持从设备中读写参数组。1为支持,0不支持。 + + tSdkAeAlgorithm *pAeAlmSwDesc; // 软件自动曝光算法描述 + int iAeAlmSwDesc; // 软件自动曝光算法个数 + + tSdkAeAlgorithm *pAeAlmHdDesc; // 硬件自动曝光算法描述,为NULL表示不支持硬件自动曝光 + int iAeAlmHdDesc; // 硬件自动曝光算法个数,为0表示不支持硬件自动曝光 + + tSdkBayerDecodeAlgorithm *pBayerDecAlmSwDesc; // 软件Bayer转换为RGB数据的算法描述 + int iBayerDecAlmSwDesc; // 软件Bayer转换为RGB数据的算法个数 + + tSdkBayerDecodeAlgorithm *pBayerDecAlmHdDesc; // 硬件Bayer转换为RGB数据的算法描述,为NULL表示不支持 + int iBayerDecAlmHdDesc; // 硬件Bayer转换为RGB数据的算法个数,为0表示不支持 + + /* 图像参数的调节范围定义,用于动态构建UI*/ + tSdkExpose sExposeDesc; // 曝光的范围值 + tSdkResolutionRange sResolutionRange; // 分辨率范围描述 + tRgbGainRange sRgbGainRange; // 图像数字增益范围描述 + tSaturationRange sSaturationRange; // 饱和度范围描述 + tGammaRange sGammaRange; // 伽马范围描述 + tContrastRange sContrastRange; // 对比度范围描述 + tSharpnessRange sSharpnessRange; // 锐化范围描述 + tSdkIspCapacity sIspCapacity; // ISP能力描述 + + +} tSdkCameraCapbility; + + +//图像帧头信息 +typedef struct +{ + UINT uiMediaType; // 图像格式,Image Format + UINT uBytes; // 图像数据字节数,Total bytes + INT iWidth; // 图像的宽度,调用图像处理函数后,该变量可能被动态修改,来指示处理后的图像尺寸 + INT iHeight; // 图像的高度,调用图像处理函数后,该变量可能被动态修改,来指示处理后的图像尺寸 + INT iWidthZoomSw; // 软件缩放的宽度,不需要进行软件裁剪的图像,此变量设置为0. + INT iHeightZoomSw; // 软件缩放的高度,不需要进行软件裁剪的图像,此变量设置为0. + BOOL bIsTrigger; // 指示是否为触发帧 is trigger + UINT uiTimeStamp; // 该帧的采集时间,单位0.1毫秒 + UINT uiExpTime; // 当前图像的曝光值,单位为微秒us + float fAnalogGain; // 当前图像的模拟增益倍数 + INT iGamma; // 该帧图像的伽马设定值,仅当LUT模式为动态参数生成时有效,其余模式下为-1 + INT iContrast; // 该帧图像的对比度设定值,仅当LUT模式为动态参数生成时有效,其余模式下为-1 + INT iSaturation; // 该帧图像的饱和度设定值,对于黑白相机无意义,为0 + float fRgain; // 该帧图像处理的红色数字增益倍数,对于黑白相机无意义,为1 + float fGgain; // 该帧图像处理的绿色数字增益倍数,对于黑白相机无意义,为1 + float fBgain; // 该帧图像处理的蓝色数字增益倍数,对于黑白相机无意义,为1 +}tSdkFrameHead; + +//图像帧描述 +typedef struct sCameraFrame +{ + tSdkFrameHead head; //帧头 + BYTE * pBuffer; //数据区 +}tSdkFrame; + +//图像捕获的回调函数定义 +typedef void (*CAMERA_SNAP_PROC)(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext); + +//SDK生成的相机配置页面的消息回调函数定义 +typedef void (*CAMERA_PAGE_MSG_PROC)(CameraHandle hCamera,UINT MSG,UINT uParam,PVOID pContext); + + +//----------------------------IMAGE FORMAT DEFINE------------------------------------ +//----------------------------图像格式定义------------------------------------------- +#define CAMERA_MEDIA_TYPE_MONO 0x01000000 +#define CAMERA_MEDIA_TYPE_RGB 0x02000000 +#define CAMERA_MEDIA_TYPE_COLOR 0x02000000 +#define CAMERA_MEDIA_TYPE_CUSTOM 0x80000000 +#define CAMERA_MEDIA_TYPE_COLOR_MASK 0xFF000000 +#define CAMERA_MEDIA_TYPE_OCCUPY1BIT 0x00010000 +#define CAMERA_MEDIA_TYPE_OCCUPY2BIT 0x00020000 +#define CAMERA_MEDIA_TYPE_OCCUPY4BIT 0x00040000 +#define CAMERA_MEDIA_TYPE_OCCUPY8BIT 0x00080000 +#define CAMERA_MEDIA_TYPE_OCCUPY10BIT 0x000A0000 +#define CAMERA_MEDIA_TYPE_OCCUPY12BIT 0x000C0000 +#define CAMERA_MEDIA_TYPE_OCCUPY16BIT 0x00100000 +#define CAMERA_MEDIA_TYPE_OCCUPY24BIT 0x00180000 +#define CAMERA_MEDIA_TYPE_OCCUPY32BIT 0x00200000 +#define CAMERA_MEDIA_TYPE_OCCUPY36BIT 0x00240000 +#define CAMERA_MEDIA_TYPE_OCCUPY48BIT 0x00300000 +#define CAMERA_MEDIA_TYPE_EFFECTIVE_PIXEL_SIZE_MASK 0x00FF0000 +#define CAMERA_MEDIA_TYPE_EFFECTIVE_PIXEL_SIZE_SHIFT 16 + + +#define CAMERA_MEDIA_TYPE_ID_MASK 0x0000FFFF +#define CAMERA_MEDIA_TYPE_COUNT 0x46 + +/*mono*/ +#define CAMERA_MEDIA_TYPE_MONO1P (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY1BIT | 0x0037) +#define CAMERA_MEDIA_TYPE_MONO2P (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY2BIT | 0x0038) +#define CAMERA_MEDIA_TYPE_MONO4P (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY4BIT | 0x0039) +#define CAMERA_MEDIA_TYPE_MONO8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0001) +#define CAMERA_MEDIA_TYPE_MONO8S (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0002) +#define CAMERA_MEDIA_TYPE_MONO10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0003) +#define CAMERA_MEDIA_TYPE_MONO10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0004) +#define CAMERA_MEDIA_TYPE_MONO12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0005) +#define CAMERA_MEDIA_TYPE_MONO12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0006) +#define CAMERA_MEDIA_TYPE_MONO14 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0025) +#define CAMERA_MEDIA_TYPE_MONO16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0007) + +/*Bayer */ +#define CAMERA_MEDIA_TYPE_BAYGR8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0008) +#define CAMERA_MEDIA_TYPE_BAYRG8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0009) +#define CAMERA_MEDIA_TYPE_BAYGB8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x000A) +#define CAMERA_MEDIA_TYPE_BAYBG8 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x000B) + +#define CAMERA_MEDIA_TYPE_BAYGR10_MIPI (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0026) +#define CAMERA_MEDIA_TYPE_BAYRG10_MIPI (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0027) +#define CAMERA_MEDIA_TYPE_BAYGB10_MIPI (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0028) +#define CAMERA_MEDIA_TYPE_BAYBG10_MIPI (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0029) + + +#define CAMERA_MEDIA_TYPE_BAYGR10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000C) +#define CAMERA_MEDIA_TYPE_BAYRG10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000D) +#define CAMERA_MEDIA_TYPE_BAYGB10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000E) +#define CAMERA_MEDIA_TYPE_BAYBG10 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000F) + +#define CAMERA_MEDIA_TYPE_BAYGR12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0010) +#define CAMERA_MEDIA_TYPE_BAYRG12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0011) +#define CAMERA_MEDIA_TYPE_BAYGB12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0012) +#define CAMERA_MEDIA_TYPE_BAYBG12 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0013) + + +#define CAMERA_MEDIA_TYPE_BAYGR10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0026) +#define CAMERA_MEDIA_TYPE_BAYRG10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0027) +#define CAMERA_MEDIA_TYPE_BAYGB10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0028) +#define CAMERA_MEDIA_TYPE_BAYBG10_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0029) + +#define CAMERA_MEDIA_TYPE_BAYGR12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002A) +#define CAMERA_MEDIA_TYPE_BAYRG12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002B) +#define CAMERA_MEDIA_TYPE_BAYGB12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002C) +#define CAMERA_MEDIA_TYPE_BAYBG12_PACKED (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002D) + +#define CAMERA_MEDIA_TYPE_BAYGR16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x002E) +#define CAMERA_MEDIA_TYPE_BAYRG16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x002F) +#define CAMERA_MEDIA_TYPE_BAYGB16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0030) +#define CAMERA_MEDIA_TYPE_BAYBG16 (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0031) + +/*RGB */ +#define CAMERA_MEDIA_TYPE_RGB8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0014) +#define CAMERA_MEDIA_TYPE_BGR8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0015) +#define CAMERA_MEDIA_TYPE_RGBA8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x0016) +#define CAMERA_MEDIA_TYPE_BGRA8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x0017) +#define CAMERA_MEDIA_TYPE_RGB10 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0018) +#define CAMERA_MEDIA_TYPE_BGR10 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0019) +#define CAMERA_MEDIA_TYPE_RGB12 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x001A) +#define CAMERA_MEDIA_TYPE_BGR12 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x001B) +#define CAMERA_MEDIA_TYPE_RGB16 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0033) +#define CAMERA_MEDIA_TYPE_RGB10V1_PACKED (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x001C) +#define CAMERA_MEDIA_TYPE_RGB10P32 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x001D) +#define CAMERA_MEDIA_TYPE_RGB12V1_PACKED (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY36BIT | 0X0034) +#define CAMERA_MEDIA_TYPE_RGB565P (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0035) +#define CAMERA_MEDIA_TYPE_BGR565P (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0X0036) + +/*YUV and YCbCr*/ +#define CAMERA_MEDIA_TYPE_YUV411_8_UYYVYY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x001E) +#define CAMERA_MEDIA_TYPE_YUV422_8_UYVY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x001F) +#define CAMERA_MEDIA_TYPE_YUV422_8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0032) +#define CAMERA_MEDIA_TYPE_YUV8_UYV (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0020) +#define CAMERA_MEDIA_TYPE_YCBCR8_CBYCR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x003A) +//CAMERA_MEDIA_TYPE_YCBCR422_8 : YYYYCbCrCbCr +#define CAMERA_MEDIA_TYPE_YCBCR422_8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x003B) +#define CAMERA_MEDIA_TYPE_YCBCR422_8_CBYCRY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0043) +#define CAMERA_MEDIA_TYPE_YCBCR411_8_CBYYCRYY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x003C) +#define CAMERA_MEDIA_TYPE_YCBCR601_8_CBYCR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x003D) +#define CAMERA_MEDIA_TYPE_YCBCR601_422_8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x003E) +#define CAMERA_MEDIA_TYPE_YCBCR601_422_8_CBYCRY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0044) +#define CAMERA_MEDIA_TYPE_YCBCR601_411_8_CBYYCRYY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x003F) +#define CAMERA_MEDIA_TYPE_YCBCR709_8_CBYCR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0040) +#define CAMERA_MEDIA_TYPE_YCBCR709_422_8 (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0041) +#define CAMERA_MEDIA_TYPE_YCBCR709_422_8_CBYCRY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0045) +#define CAMERA_MEDIA_TYPE_YCBCR709_411_8_CBYYCRYY (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0042) + +/*RGB Planar */ +#define CAMERA_MEDIA_TYPE_RGB8_PLANAR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0021) +#define CAMERA_MEDIA_TYPE_RGB10_PLANAR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0022) +#define CAMERA_MEDIA_TYPE_RGB12_PLANAR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0023) +#define CAMERA_MEDIA_TYPE_RGB16_PLANAR (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0024) + + +#endif \ No newline at end of file diff --git a/others/include/camera/camera_status.h b/others/include/camera/camera_status.h new file mode 100644 index 0000000..402d546 --- /dev/null +++ b/others/include/camera/camera_status.h @@ -0,0 +1,102 @@ +#ifndef __CAMERA_STATUS_DEF__ +#define __CAMERA_STATUS_DEF__ + +typedef int CameraSdkStatus; + + +/*常用的宏*/ +#define SDK_SUCCESS(_FUC_) (_FUC_ == CAMERA_STATUS_SUCCESS) + +#define SDK_UNSUCCESS(_FUC_) (_FUC_ != CAMERA_STATUS_SUCCESS) + +#define SDK_UNSUCCESS_RETURN(_FUC_,RET) if((RET = _FUC_) != CAMERA_STATUS_SUCCESS)\ + {\ + return RET;\ + } + +#define SDK_UNSUCCESS_BREAK(_FUC_) if(_FUC_ != CAMERA_STATUS_SUCCESS)\ + {\ + break;\ + } + + +/* 常用错误 */ + +#define CAMERA_STATUS_SUCCESS 0 // 操作成功 +#define CAMERA_STATUS_FAILED -1 // 操作失败 +#define CAMERA_STATUS_INTERNAL_ERROR -2 // 内部错误 +#define CAMERA_STATUS_UNKNOW -3 // 未知错误 +#define CAMERA_STATUS_NOT_SUPPORTED -4 // 不支持该功能 +#define CAMERA_STATUS_NOT_INITIALIZED -5 // 初始化未完成 +#define CAMERA_STATUS_PARAMETER_INVALID -6 // 参数无效 +#define CAMERA_STATUS_PARAMETER_OUT_OF_BOUND -7 // 参数越界 +#define CAMERA_STATUS_UNENABLED -8 // 未使能 +#define CAMERA_STATUS_USER_CANCEL -9 // 用户手动取消了,比如roi面板点击取消,返回 +#define CAMERA_STATUS_PATH_NOT_FOUND -10 // 注册表中没有找到对应的路径 +#define CAMERA_STATUS_SIZE_DISMATCH -11 // 获得图像数据长度和定义的尺寸不匹配 +#define CAMERA_STATUS_TIME_OUT -12 // 超时错误 +#define CAMERA_STATUS_IO_ERROR -13 // 硬件IO错误 +#define CAMERA_STATUS_COMM_ERROR -14 // 通讯错误 +#define CAMERA_STATUS_BUS_ERROR -15 // 总线错误 +#define CAMERA_STATUS_NO_DEVICE_FOUND -16 // 没有发现设备 +#define CAMERA_STATUS_NO_LOGIC_DEVICE_FOUND -17 // 未找到逻辑设备 +#define CAMERA_STATUS_DEVICE_IS_OPENED -18 // 设备已经打开 +#define CAMERA_STATUS_DEVICE_IS_CLOSED -19 // 设备已经关闭 +#define CAMERA_STATUS_DEVICE_VEDIO_CLOSED -20 // 没有打开设备视频,调用录像相关的函数时,如果相机视频没有打开,则回返回该错误。 +#define CAMERA_STATUS_NO_MEMORY -21 // 没有足够系统内存 +#define CAMERA_STATUS_FILE_CREATE_FAILED -22 // 创建文件失败 +#define CAMERA_STATUS_FILE_INVALID -23 // 文件格式无效 +#define CAMERA_STATUS_WRITE_PROTECTED -24 // 写保护,不可写 +#define CAMERA_STATUS_GRAB_FAILED -25 // 数据采集失败 +#define CAMERA_STATUS_LOST_DATA -26 // 数据丢失,不完整 +#define CAMERA_STATUS_EOF_ERROR -27 // 未接收到帧结束符 +#define CAMERA_STATUS_BUSY -28 // 正忙(上一次操作还在进行中),此次操作不能进行 +#define CAMERA_STATUS_WAIT -29 // 需要等待(进行操作的条件不成立),可以再次尝试 +#define CAMERA_STATUS_IN_PROCESS -30 // 正在进行,已经被操作过 +#define CAMERA_STATUS_IIC_ERROR -31 // IIC传输错误 +#define CAMERA_STATUS_SPI_ERROR -32 // SPI传输错误 +#define CAMERA_STATUS_USB_CONTROL_ERROR -33 // USB控制传输错误 +#define CAMERA_STATUS_USB_BULK_ERROR -34 // USB BULK传输错误 +#define CAMERA_STATUS_SOCKET_INIT_ERROR -35 // 网络传输套件初始化失败 +#define CAMERA_STATUS_GIGE_FILTER_INIT_ERROR -36 // 网络相机内核过滤驱动初始化失败,请检查是否正确安装了驱动,或者重新安装。 +#define CAMERA_STATUS_NET_SEND_ERROR -37 // 网络数据发送错误 +#define CAMERA_STATUS_DEVICE_LOST -38 // 与网络相机失去连接,心跳检测超时 +#define CAMERA_STATUS_DATA_RECV_LESS -39 // 接收到的字节数比请求的少 +#define CAMERA_STATUS_FUNCTION_LOAD_FAILED -40 // 从文件中加载程序失败 +#define CAMERA_STATUS_CRITICAL_FILE_LOST -41 // 程序运行所必须的文件丢失。 +#define CAMERA_STATUS_SENSOR_ID_DISMATCH -42 // 固件和程序不匹配,原因是下载了错误的固件。 +#define CAMERA_STATUS_OUT_OF_RANGE -43 // 参数超出有效范围。 +#define CAMERA_STATUS_REGISTRY_ERROR -44 // 安装程序注册错误。请重新安装程序,或者运行安装目录Setup/Installer.exe +#define CAMERA_STATUS_ACCESS_DENY -45 // 禁止访问。指定相机已经被其他程序占用时,再申请访问该相机,会返回该状态。(一个相机不能被多个程序同时访问) +#define CAMERA_STATUS_CAMERA_NEED_RESET -46 // 表示相机需要复位后才能正常使用,此时请让相机断电重启,或者重启操作系统后,便可正常使用。 + + + +//和AIA制定的标准相同 +/*#define CAMERA_AIA_SUCCESS 0x0000 */ +#define CAMERA_AIA_PACKET_RESEND 0x0100 //该帧需要重传 +#define CAMERA_AIA_NOT_IMPLEMENTED 0x8001 //设备不支持的命令 +#define CAMERA_AIA_INVALID_PARAMETER 0x8002 //命令参数非法 +#define CAMERA_AIA_INVALID_ADDRESS 0x8003 //不可访问的地址 +#define CAMERA_AIA_WRITE_PROTECT 0x8004 //访问的对象不可写 +#define CAMERA_AIA_BAD_ALIGNMENT 0x8005 //访问的地址没有按照要求对齐 +#define CAMERA_AIA_ACCESS_DENIED 0x8006 //没有访问权限 +#define CAMERA_AIA_BUSY 0x8007 //命令正在处理中 +#define CAMERA_AIA_DEPRECATED 0x8008 //0x8008-0x0800B 0x800F 该指令已经废弃 +#define CAMERA_AIA_PACKET_UNAVAILABLE 0x800C //包无效 +#define CAMERA_AIA_DATA_OVERRUN 0x800D //数据溢出,通常是收到的数据比需要的多 +#define CAMERA_AIA_INVALID_HEADER 0x800E //数据包头部中某些区域与协议不匹配 +#define CAMERA_AIA_PACKET_NOT_YET_AVAILABLE 0x8010 //图像分包数据还未准备好,多用于触发模式,应用程序访问超时 +#define CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY 0x8011 //需要访问的分包已经不存在。多用于重传时数据已经不在缓冲区中 +#define CAMERA_AIA_PACKET_REMOVED_FROM_MEMORY 0x8012 //CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY +#define CAMERA_AIA_NO_REF_TIME 0x0813 //没有参考时钟源。多用于时间同步的命令执行时 +#define CAMERA_AIA_PACKET_TEMPORARILY_UNAVAILABLE 0x0814 //由于信道带宽问题,当前分包暂时不可用,需稍后进行访问 +#define CAMERA_AIA_OVERFLOW 0x0815 //设备端数据溢出,通常是队列已满 +#define CAMERA_AIA_ACTION_LATE 0x0816 //命令执行已经超过有效的指定时间 +#define CAMERA_AIA_ERROR 0x8FFF //错误 + + + + + +#endif \ No newline at end of file diff --git a/others/include/camera/camera_wrapper.h b/others/include/camera/camera_wrapper.h new file mode 100644 index 0000000..93826ee --- /dev/null +++ b/others/include/camera/camera_wrapper.h @@ -0,0 +1,58 @@ +// +// Created by zhikun on 18-11-7. +// + +#ifndef _CAMERA_WRAPPER_H_ +#define _CAMERA_WRAPPER_H_ + +#include +#include +#include + +#ifdef Windows + #include "camera/CameraApi.h" +#elif defined(Linux) || defined(Darwin) + #include +#endif + +class CameraWrapper: public WrapperHead { + friend void cameraCallback(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext); +private: + const std::string name; + //int mode; + + //bool init_done; + + unsigned char* rgb_buffer; + int camera_cnts; + int camera_status; + tSdkCameraDevInfo camera_enum_list[2]; + int h_camera; + char camera_name[32]; + + tSdkCameraCapbility tCapability; + tSdkFrameHead frame_info; + BYTE *pby_buffer; + cv::Mat image_header; + int channel; + + RoundQueue src_queue; +public: + int gain; + int exposure; + + int mode; + bool init_done; + + CameraWrapper(int exposure, int gain, int camera_mode=1, const std::string &n="NULL"); + ~CameraWrapper() final; + + bool init() final; + bool read(cv::Mat& src) final; + bool readRaw(cv::Mat& src); + bool readProcessed(cv::Mat& src); + bool readCallback(cv::Mat& src); +}; + + +#endif /* _CAMERA_WRAPPER_H_ */ \ No newline at end of file diff --git a/others/include/camera/video_wrapper.h b/others/include/camera/video_wrapper.h new file mode 100644 index 0000000..92b23d0 --- /dev/null +++ b/others/include/camera/video_wrapper.h @@ -0,0 +1,43 @@ +// +// Created by zhikun on 18-11-16. +// wrapper for video read from file +// + +#ifndef STEREOVISION_FROM_VIDEO_FILE_VIDEO_WRAPPER_H +#define STEREOVISION_FROM_VIDEO_FILE_VIDEO_WRAPPER_H + + +#include +#include +#include + +#include "wrapper_head.h" + + +class VideoWrapper:public WrapperHead { +public: + VideoWrapper(const std::string& filename); + ~VideoWrapper(); + + + /** + * @brief initialize cameras + * @return bool value: whether it success + */ + bool init() final; + + + /** + * @brief read images from camera + * @param src_left : output source video of left camera + * @param src_right : output source video of right camera + * @return bool value: whether the reading is successful + */ + bool read(cv::Mat &src) final; +private: + cv::VideoCapture video; + +}; + + +#endif //STEREOVISION_FROM_VIDEO_FILE_VIDEO_WRAPPER_H diff --git a/others/include/camera/wrapper_head.h b/others/include/camera/wrapper_head.h new file mode 100644 index 0000000..d92906c --- /dev/null +++ b/others/include/camera/wrapper_head.h @@ -0,0 +1,22 @@ +// +// Created by zhikun on 18-11-18. +// + +#ifndef STEREOVISION_FROM_VIDEO_FILE_WRAPPER_HEAD_H +#define STEREOVISION_FROM_VIDEO_FILE_WRAPPER_HEAD_H + +#include + +/** + * @brief A virtual class for wrapper of camera and video files + */ +class WrapperHead { +public: + virtual ~WrapperHead() = default;; + virtual bool init() = 0; + virtual bool read(cv::Mat &src) = 0; +}; + + + +#endif //STEREOVISION_FROM_VIDEO_FILE_WRAPPER_HEAD_H diff --git a/others/include/config/setconfig.h b/others/include/config/setconfig.h new file mode 100644 index 0000000..7264e94 --- /dev/null +++ b/others/include/config/setconfig.h @@ -0,0 +1,103 @@ +// 本文件定义了在不同步兵车辆上运行时需要根据车辆情况而发生变化的参数 +// 以下所有参数都给定了默认值,如果想要修改,推荐在该文件目录下新建文件config.h,并在config.h中写定自定义参数 + +#ifndef _SETCONFIG_H_ +#define _SETCONFIG_H_ + +#define WITH_CONFIG + +#ifdef WITH_CONFIG + #include +#else + #warning "Without config.h" +#endif + +#ifndef ARMOR_CAMERA_EXPOSURE + #define ARMOR_CAMERA_EXPOSURE (10) +#endif + +#ifndef ENERGY_CAMERA_EXPOSURE + #define ENERGY_CAMERA_EXPOSURE (10) +#endif + +#ifndef CAMERA_RED_GAIN + #define CAMERA_RED_GAIN (100) +#endif + +#ifndef CAMERA_GREEN_GAIN + #define CAMERA_GREEN_GAIN (100) +#endif + +#ifndef CAMERA_BLUE_GAIN + #define CAMERA_BLUE_GAIN (100) +#endif + + +#ifndef ARMOR_CAMERA_GAIN + #define ARMOR_CAMERA_GAIN (64) +#endif +#ifndef ENERGY_CAMERA_GAIN + #define ENERGY_CAMERA_GAIN (30) +#endif + +#ifndef YAW_AIM_KD + #define YAW_AIM_KD (0.4) +#endif +#ifndef YAW_AIM_KP + #define YAW_AIM_KP (0.75) +#endif +#ifndef YAW_AIM_KI + #define YAW_AIM_KI (0.01) +#endif +#ifndef PITCH_AIM_KD + #define PITCH_AIM_KD (0) +#endif +#ifndef PITCH_AIM_KP + #define PITCH_AIM_KP (0) +#endif +#ifndef PITCH_AIM_KI + #define PITCH_AIM_KI (0) +#endif + +#ifndef RED_COMPENSATE_YAW + #define RED_COMPENSATE_YAW (5) +#endif +#ifndef RED_COMPENSATE_PITCH + #define RED_COMPENSATE_PITCH (74) +#endif + +#ifndef BLUE_COMPENSATE_YAW + #define BLUE_COMPENSATE_YAW (5) +#endif +#ifndef BLUE_COMPENSATE_PITCH + #define BLUE_COMPENSATE_PITCH (74) +#endif + +#ifndef EXTRA_DELTA_X + #define EXTRA_DELTA_X (0) +#endif +#ifndef EXTRA_DELTA_Y + #define EXTRA_DELTA_Y (10) +#endif + +/*弹道相关参数 第一个为初速度,第二个为空气阻力系数,第三个为系统延迟*/ +#ifndef MUZZLE_VELOCITY + #define MUZZLE_VELOCITY (11.0) +#endif + +#ifndef BALLISTIC_K + #define BALLISTIC_K (0.1) +#endif + +#ifndef SYSTEM_DELAY + #define SYSTEM_DELAY (50.0) +#endif + +// 到此为止 + +//#define GIMBAL_FLIP_MODE (-1) +//#define CHASSIS_FLIP_MODE (-1) +//#define WITH_TIME_BASED_CAMERA_GAIN +#define WITH_COUNT_FPS + +#endif /* SETCONFIG_H */ diff --git a/others/include/constants.h b/others/include/constants.h new file mode 100644 index 0000000..4d2467f --- /dev/null +++ b/others/include/constants.h @@ -0,0 +1,24 @@ +// +// Created by xinyang on 19-7-8. +// + +#ifndef _CONSTANTS_H_ +#define _CONSTANTS_H_ + +#define PI (3.14159265459) + +#define ENEMY_BLUE 0 +#define ENEMY_RED 1 + +#define ALLY_BLUE ENEMY_RED +#define ALLY_RED ENEMY_BLUE + +#define BIG_ENERGY_STATE 'b' +#define SMALL_ENERGY_STATE 's' +#define ARMOR_STATE 'a' + +#define FOCUS_PIXAL_8MM (1488) +#define FOCUS_PIXAL_5MM (917) +#define FOCUS_PIXAL FOCUS_PIXAL_8MM + +#endif /* _CONSTANTS_H */ diff --git a/others/include/log.h b/others/include/log.h new file mode 100644 index 0000000..8d32ae7 --- /dev/null +++ b/others/include/log.h @@ -0,0 +1,181 @@ +// +// Created by xinyang on 19-2-19. +// +// 该文件提供一个更加方便的调试信息输出方式 +// 所有输出信息分为三个LEVEL:MSG,WARNING,ERROR +// 可使用宏LOG_LEVEL定义当前文件使用的输出LEVEL +// 高于该LEVEL的输出讲不会被显示 +// ============================================================ +// 输出API: +// LOG(level, format, ...) +// arguments: level:当前输出的level +// format:标准printf格式化字符串 +// LOGM(format, ...) 使用MSG level进行输出 +// LOGW(format, ...) 使用WARNING level进行输出 +// LOGE(format, ...) 使用ERROR level进行输出 +// ============================================================ +// 输出颜色API:(仅对部分终端生效) +// STR_CTR(ctrs, str) +// arguments: ctrs:该字符串对应的颜色(所有以WORD开头的宏) +//       str:需要上色的字符串 +// ============================================================ +// 时间计算API:(需要配合systime.h使用) +// CNT_TIME(tag, codes, ...) +// arguments: tag:显示代码块执行时间前的用户信息,支持printf格式化字符串 +// codes:需要被统计时间的代码块 +// attention: 代码块内定义的局部变量作用域仅限于该代码块 +// 代码块内不支持使用break,continue语句,将无法达到预想效果 +// 支持多出口离开代码块都能显示代码块执行时间 +// +#ifndef _LOG_H_ +#define _LOG_H_ + +#include +#include +#include + +/************** Define the control code *************/ +#define START_CTR "\033[0" +#define END_CTR "m" +#define CLEAR_CODE ";0" +#define LIGHT_CODE ";1" +#define LINE_CODE ";4" +#define BLINK_CODE ";5" +#define REVERSE_CODE ";7" +#define VANISH_CODE ";8" +#define WORD_WHITE_CODE ";30" +#define WORD_RED_CODE ";31" +#define WORD_GREEN_CODE ";32" +#define WORD_YELLOW_CODE ";33" +#define WORD_BLUE_CODE ";34" +#define WORD_PURPLE_CODE ";35" +#define WORD_CYAN_CODE ";36" +#define WORD_GRAY_CODE ";37" +#define BACK_WHITE_CODE ";40" +#define BACK_RED_CODE ";41" +#define BACK_GREEN_CODE ";42" +#define BACK_YELLOW_CODE ";43" +#define BACK_BLUE_CODE ";44" +#define BACK_PURPLE_CODE ";45" +#define BACK_CYAN_CODE ";46" +#define BACK_GRAY_CODE ";47" + +#define CTRS(ctrs) START_CTR ctrs END_CTR +#define STR_CTR(ctrs, str) START_CTR ctrs END_CTR str CLEAR_ALL + +#define WORD_WHITE WORD_WHITE_CODE +#define WORD_RED WORD_RED_CODE +#define WORD_GREEN WORD_GREEN_CODE +#define WORD_YELLOW WORD_YELLOW_CODE +#define WORD_BLUE WORD_BLUE_CODE +#define WORD_PURPLE WORD_PURPLE_CODE +#define WORD_CYAN WORD_CYAN_CODE +#define WORD_GRAY WORD_GRAY_CODE +#define WORD_LIGHT_WHITE LIGHT_CODE WORD_WHITE +#define WORD_LIGHT_RED LIGHT_CODE WORD_RED +#define WORD_LIGHT_GREEN LIGHT_CODE WORD_GREEN +#define WORD_LIGHT_YELLOW LIGHT_CODE WORD_YELLOW +#define WORD_LIGHT_BLUE LIGHT_CODE WORD_BLUE +#define WORD_LIGHT_PURPLE LIGHT_CODE WORD_PURPLE +#define WORD_LIGHT_CYAN LIGHT_CODE WORD_CYAN +#define WORD_LIGHT_GRAY LIGHT_CODE WORD_GRAY +#define CLEAR_ALL CTRS(CLEAR_CODE) +/*************** Define the log level value ***************/ +#define LOG_NONE 0 +#define LOG_ERROR 1 +#define LOG_WARNING 2 +#define LOG_MSG 3 +#define LOG_NOTHING 4 +/************** Ensure the current log level **************/ +#ifndef LOG_LEVEL + #define LOG_LEVEL LOG_MSG +#endif +#if LOG_LEVEL < LOG_NONE + #define LOG_LEVEL LOG_NONE +#elif LOG_LEVEL > LOG_MSG + #define LOG_LEVEL LOG_MSG +#endif +/******* Ensure the color corresponding to the level ******/ +#ifndef LOG_ERROR_COLOR + #define LOG_ERROR_COLOR WORD_RED +#endif +#ifndef LOG_WARNING_COLOR + #define LOG_WARNING_COLOR WORD_YELLOW +#endif +#ifndef LOG_MSG_COLOR + #define LOG_MSG_COLOR WORD_GRAY +#endif +#ifndef LOG_LINK_COLOR + #define LOG_LINK_COLOR LINE_CODE WORD_BLUE +#endif + +/********************** log place *************************/ +#ifndef LOG_OUT + #define LOG_OUT stdout +#endif +/******************** The log API *************************/ +#define LOG_0(format, ...) fprintf(LOG_OUT, format, ##__VA_ARGS__) +#if LOG_LEVEL >= LOG_ERROR + #define LOG_1(format, ...) fprintf(LOG_OUT, format, ##__VA_ARGS__) +#else + #define LOG_1(format, ...) ((void)0) +#endif +#if LOG_LEVEL >= LOG_WARNING + #define LOG_2(format, ...) fprintf(LOG_OUT, format, ##__VA_ARGS__) +#else + #define LOG_2(format, ...) ((void)0) +#endif +#if LOG_LEVEL >= LOG_MSG + #define LOG_3(format, ...) fprintf(LOG_OUT, format, ##__VA_ARGS__) +#else + #define LOG_3(format, ...) ((void)0) +#endif +#define LOG_4(format, ...) ((void)0) +#define LOG_(level, format, ...) LOG_##level (format, ##__VA_ARGS__) +#define LOG(level, format, ...) LOG_(level, format"\n", ##__VA_ARGS__) + +#define LOGA(format, ...) LOG(LOG_NONE, format, ##__VA_ARGS__) +#define LOGA_INFO(format, ...) LOG(LOG_NONE, "<%s:%d>: " format, ##__VA_ARGS__) +#define LOGE(format, ...) LOG(LOG_ERROR, STR_CTR(LOG_ERROR_COLOR, ": " format), ## __VA_ARGS__) +#define LOGW(format, ...) LOG(LOG_WARNING, STR_CTR(LOG_WARNING_COLOR,": " format), ## __VA_ARGS__) +#define LOGM(format, ...) LOG(LOG_MSG, STR_CTR(LOG_MSG_COLOR, ": " format), ## __VA_ARGS__) +#define LOGE_INFO(format, ...) LOG(LOG_ERROR, \ + STR_CTR(LOG_ERROR_COLOR, "<") \ + STR_CTR(LOG_LINK_COLOR, "%s:%d") \ + STR_CTR(LOG_ERROR_COLOR, " ERROR>: " format), \ + __FILE__, __LINE__, ##__VA_ARGS__) +#define LOGW_INFO(format, ...) LOG(LOG_WARNING, \ + STR_CTR(LOG_WARNING_COLOR,"<") \ + STR_CTR(LOG_LINK_COLOR,"%s:%d") \ + STR_CTR(LOG_WARNING_COLOR, " WARNING>: " format), \ + __FILE__, __LINE__, ##__VA_ARGS__) +#define LOGM_INFO(format, ...) LOG(LOG_MSG, \ + STR_CTR(LOG_MSG_COLOR, "<") \ + STR_CTR(LOG_LINK_COLOR, "%s:%d") \ + STR_CTR(LOG_MSG_COLOR, " MSG>: " format), \ + __FILE__, __LINE__, ##__VA_ARGS__) + +/******************** the time counter API ************************/ +#if !defined(DO_NOT_CNT_TIME) && LOG_LEVEL > LOG_NONE + #define CNT_TIME(tag, codes, ...) do{ \ + class { \ + private: \ + systime begin; \ + public: \ + TimeCounter(){ \ + getsystime(begin); \ + } \ + ~TimeCounter(){ \ + systime end; \ + getsystime(end); \ + LOGM(tag": %.1lfms", ##__VA_ARGS__, getTimeIntervalms(end, begin)); \ + } \ + } time_cnt; \ + codes; \ + }while (0) +#else + #define CNT_TIME(tag, codes, ...) codes +#endif +#else /* _LOG_H_ */ + #warning "Multiple include of log.h, some settings may not work." +#endif /* _LOG_H_ */ diff --git a/others/include/options.h b/others/include/options.h new file mode 100644 index 0000000..76c8057 --- /dev/null +++ b/others/include/options.h @@ -0,0 +1,30 @@ +// +// Created by xinyang on 19-3-27. +// + +#ifndef _OPTIONS_H_ +#define _OPTIONS_H_ + +#ifdef PATH + #define PROJECT_DIR PATH +#else + #define PROJECT_DIR "" +#endif + +extern bool show_armor_box; +extern bool show_armor_boxes; +extern bool show_light_blobs; +extern bool show_origin; +extern bool run_with_camera; +extern bool save_video; +extern bool wait_uart; +extern bool save_labelled_boxes; +extern bool show_process; +extern bool save_mark; +extern bool show_info; +extern bool run_by_frame; + + +void processOptions(int argc, char **argv); + +#endif /* _OPTIONS_H_ */ diff --git a/others/include/serial.h b/others/include/serial.h new file mode 100644 index 0000000..5419604 --- /dev/null +++ b/others/include/serial.h @@ -0,0 +1,61 @@ +#ifndef _SERIAL_H_ +#define _SERIAL_H_ + +#ifdef Windows + +#include + +class Serial +{ +public: + Serial(UINT baud = CBR_115200, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR); + ~Serial(); + + bool InitPort(UINT portNo = 1, UINT baud = CBR_9600, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR); + UINT GetBytesInCOM() const ; + bool WriteData(const unsigned char* pData, unsigned int length); + bool ReadData(unsigned char* buffer, unsigned int length); +private: + bool openPort(UINT portNo); + void ClosePort(); + void ErrorHandler(); +private: + HANDLE hComm; + UINT portNo; + UINT baud; + char parity; + UINT databits; + UINT stopsbits; + DWORD dwCommEvents; +}; + +#elif defined(Linux) || defined(Darwin) + +#include +#include +#include +#include + +class Serial { +private: + int fd; + int nSpeed; + char nEvent; + int nBits; + int nStop; + + int set_opt(int fd, int nSpeed, char nEvent, int nBits, int nStop); + +public: + Serial(int nSpeed = 115200, char nEvent = 'N', int nBits = 8, int nStop = 1); + ~Serial(); + + bool InitPort(int nSpeed = 115200, char nEvent = 'N', int nBits = 8, int nStop = 1); +// int GetBytesInCOM() const ; + bool WriteData(const unsigned char* pData, unsigned int length); + bool ReadData(unsigned char* buffer, unsigned int length); +}; + +#endif + +#endif /* _SERIAL_H_ */ diff --git a/others/include/systime.h b/others/include/systime.h new file mode 100644 index 0000000..43d3d9d --- /dev/null +++ b/others/include/systime.h @@ -0,0 +1,23 @@ +// +// Created by xinyang on 19-7-31. +// +// 提供一个多平台统一的精确到毫秒的系统时间接口 +// 该时间仅用于表示相对时间 + +#ifndef _PLATFORM_H_ +#define _PLATFORM_H_ + +typedef double systime; + +void getsystime(systime &t); +double getTimeIntervalms(const systime &now, const systime &last); + +#if defined(Linux) || defined(Darwin) + #include +#elif defined(Windows) + #include +#else + #error "nonsupport platform." +#endif + +#endif /* _PLATFORM_H_ */ diff --git a/others/libMVSDK.so b/others/libMVSDK.so new file mode 100644 index 0000000..4cb7ffd Binary files /dev/null and b/others/libMVSDK.so differ diff --git a/others/libmvsdk.dylib b/others/libmvsdk.dylib new file mode 100644 index 0000000..649386a Binary files /dev/null and b/others/libmvsdk.dylib differ diff --git a/others/solver_config.yml b/others/solver_config.yml new file mode 100644 index 0000000..32566a5 --- /dev/null +++ b/others/solver_config.yml @@ -0,0 +1,5 @@ +camera_matrix: [1731.7, 0.0, 639.5, 0.0, 1726.7, 359.5, 0.0, 0.0, 1.0] +distort_coeffs: [-0.088, 0.841, 0.0, 0.0, 0.0] +R_gimbal2imubody: [1, 0, 0, 0, 1, 0, 0, 0, 1] +R_camera2gimbal: [1, 0, 0, 0, 1, 0, 0, 0, 1] +t_camera2gimbal: [0, 0, 0] diff --git a/others/src/additions.cpp b/others/src/additions.cpp new file mode 100644 index 0000000..3aa8f40 --- /dev/null +++ b/others/src/additions.cpp @@ -0,0 +1,120 @@ +// +// Created by sjturm on 19-5-17. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define RECEIVE_LOG_LEVEL LOG_MSG + +using namespace std; +using namespace cv; + +extern WrapperHead *video; + +extern Serial serial; +extern uint8_t last_state; + +extern ArmorFinder armor_finder; + +void uartReceive(Serial *pSerial) { + char buffer[40]; + LOGM(STR_CTR(WORD_LIGHT_WHITE, "data receive start!")); + while (true) { + memset(buffer, 0, sizeof(buffer)); + pSerial->ReadData((uint8_t *) buffer, sizeof(mcu_data)+1); + if (buffer[sizeof(mcu_data)] == '\n') { + memcpy(&mcu_data, buffer, sizeof(mcu_data)); + LOGM("Get, state:%c, mark:%d!", mcu_data.state, (int) mcu_data.mark); + LOGM("Get yaw: %f, pitch: %f!", mcu_data.curr_yaw, mcu_data.curr_pitch); + // static int t = time(nullptr); +// static int cnt = 0; +// if(time(nullptr) > t){ +// t = time(nullptr); +// LOGM("fps:%d", cnt); +// cnt = 0; +// }else{ +// cnt++; +// } + }else{ +// LOGW("corrupt data!"); + } + } +} + +cv::VideoWriter initVideoWriter(const std::string &filename_prefix) { + cv::VideoWriter video; + std::ifstream in(filename_prefix + "cnt.txt"); + int cnt = 0; + if (in.is_open()) { + in >> cnt; + in.close(); + } + std::string file_name = filename_prefix + std::to_string(cnt) + ".avi"; + cnt++; + std::ofstream out(filename_prefix + "cnt.txt"); + if (out.is_open()) { + out << cnt << std::endl; + out.close(); + } + video.open(file_name, CV_FOURCC('P', 'I', 'M', '1'), 90, cv::Size(640, 480), true); + return video; +} + +bool checkReconnect(bool is_camera_connect) { + if (!is_camera_connect) { + int curr_gain = ((CameraWrapper* )video)->gain; + int curr_exposure = ((CameraWrapper* )video)->exposure; + int curr_mode = ((CameraWrapper* )video)->mode; // 获取原始模式 + + delete video; + std::this_thread::sleep_for(std::chrono::milliseconds(500)); // 等待硬件释放 + video = new CameraWrapper(curr_exposure, curr_gain, curr_mode/*, "armor"*/); + //video = new CameraWrapper(curr_exposure, curr_gain, 0/*, "armor"*/); + is_camera_connect = video->init(); + } + return is_camera_connect; +} + +auto video_writer = initVideoWriter(PROJECT_DIR"/video/"); + +void saveVideos(const cv::Mat &gimbal_src) { + if (!gimbal_src.empty()) { + video_writer.write(gimbal_src); + } else return; +} + +void showOrigin(const cv::Mat &src) { + if (!src.empty()) { + imshow("origin", src); + cv::waitKey(1); + } else return; +} + +void extract(cv::Mat &src) {//图像预处理,将视频切成640×480的大小 + if (src.empty()) return; + float length = static_cast(src.cols); + float width = static_cast(src.rows); + if (length / width > 1280.0 / 1024.0) { + length *= 1024 / width; + resize(src, src, cv::Size(length, 1024)); + src = src(Rect((length - 1280) / 2, 0, 1280, 1024)); + } else { + width *= 1280.0 / length; + resize(src, src, cv::Size(1280, width)); + src = src(Rect(0, (width - 1024) / 2, 1280, 1024)); + } +} + +double getPointLength(const cv::Point2f &p) { + return sqrt(p.x * p.x + p.y * p.y); +} diff --git a/others/src/camera/camera_wrapper.cpp b/others/src/camera/camera_wrapper.cpp new file mode 100644 index 0000000..9a8cd1d --- /dev/null +++ b/others/src/camera/camera_wrapper.cpp @@ -0,0 +1,189 @@ +// +// Created by zhikun on 18-11-7. +// +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace cv; + +CameraWrapper::CameraWrapper(int exposure, int gain, int camera_mode, const std::string &n) : + name(n), + init_done(false), + mode(camera_mode), + camera_cnts(2), + camera_status(-1), + rgb_buffer(nullptr), + channel(3), + gain(gain), + exposure(exposure){ +} + +void cameraCallback(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext){ + CameraWrapper *c = (CameraWrapper*)pContext; + CameraImageProcess(hCamera, pFrameBuffer, c->rgb_buffer, pFrameHead); + // 使用 cv::Mat 替代 IplImage + cv::Mat img(pFrameHead->iHeight, pFrameHead->iWidth, + c->channel == 3 ? CV_8UC3 : CV_8UC1, + c->rgb_buffer, pFrameHead->iWidth * c->channel); + c->src_queue.push(img.clone()); +} + +bool CameraWrapper::init() { + CameraSdkInit(1); + int camera_enumerate_device_status = CameraEnumerateDevice(camera_enum_list, &camera_cnts); + if (camera_enumerate_device_status != CAMERA_STATUS_SUCCESS) { + LOGE("CameraEnumerateDevice fail with %d!", camera_enumerate_device_status); + return false; + } + if (camera_cnts == 0) { + LOGE("No camera device detected!"); + return false; + } else if (camera_cnts >= 1) { + LOGM("%d camera device detected!", camera_cnts); + } + int i; + for (i = 0; i < camera_cnts; i++) { + camera_status = CameraInit(&camera_enum_list[i], -1, -1, &h_camera); + if (camera_status != CAMERA_STATUS_SUCCESS) { + CameraUnInit(h_camera); + continue; + } + CameraGetFriendlyName(h_camera, camera_name); + if (name == "NULL" || strcmp(name.data(), camera_name) == 0) { + break; + } + CameraUnInit(h_camera); + } + if (i >= camera_cnts) { + LOGE("No device name %s or device open error!!", name.data()); + return false; + } + + auto status = CameraGetCapability(h_camera, &tCapability); + if (status != CAMERA_STATUS_SUCCESS) { + cout << "CameraGetCapability return error code " << status << endl; + return false; + } + + rgb_buffer = (unsigned char *) malloc(tCapability.sResolutionRange.iHeightMax * + tCapability.sResolutionRange.iWidthMax * 3); +#ifdef Windows + char filepath[200]; + sprintf(filepath, PROJECT_DIR"/others/%s.Config", name.data()); + if (CameraReadParameterFromFile(h_camera, filepath) != CAMERA_STATUS_SUCCESS) { + LOGE("Load parameter %s from file fail!", filepath); + return false; + } + if (CameraLoadParameter(h_camera, PARAMETER_TEAM_A) != CAMERA_STATUS_SUCCESS) { + LOGE("CameraLoadParameter %s fail!", filepath); + return false; + } + LOGM("successfully loaded %s!", filepath); +#elif defined(Linux) + CameraReadParameterFromFile(h_camera, PROJECT_DIR"/others/MV-UB31-Group0.config"); + CameraLoadParameter(h_camera, PARAMETER_TEAM_A); + CameraSetAeState(h_camera, false); + CameraSetExposureTime(h_camera, exposure * 1000); + CameraSetAnalogGain(h_camera, gain); +#endif + double t; + int g; + CameraGetExposureTime(h_camera, &t); + CameraGetAnalogGain(h_camera, &g); + LOGM("Exposure time: %lfms, gain:%d", t / 1000.0, g); + /*让SDK进入工作模式,开始接收来自相机发送的图像 + 数据。如果当前相机是触发模式,则需要接收到 + 触发帧以后才会更新图像。 */ + CameraPlay(h_camera); + + /*其他的相机参数设置 + 例如 CameraSetExposureTime CameraGetExposureTime 设置/读取曝光时间 + CameraSetImageResolution CameraGetImageResolution 设置/读取分辨率 + CameraSetGamma、CameraSetContrast、CameraSetGain等设置图像伽马、对比度、RGB数字增益等等。 + CameraGetFriendlyName CameraSetFriendlyName 获取/设置相机名称(该名称可写入相机硬件) + */ + cout << tCapability.sIspCapacity.bMonoSensor << endl; + if (tCapability.sIspCapacity.bMonoSensor) { + channel = 1; + CameraSetIspOutFormat(h_camera, CAMERA_MEDIA_TYPE_MONO8); + LOGM("camera %s mono ", camera_name); + } else { + channel = 3; + CameraSetIspOutFormat(h_camera, CAMERA_MEDIA_TYPE_BGR8); + LOGM("camera %s color ", camera_name); + } + if(mode == 2){ + CameraSetCallbackFunction(h_camera, cameraCallback, this, nullptr); + } + init_done = true; + return true; +} + +bool CameraWrapper::read(cv::Mat &src) { + if(init_done) { + if (mode == 0)return readProcessed(src); + if (mode == 1)return readRaw(src); + if (mode == 2)return readCallback(src); + } else { + return false; + } +} + +bool CameraWrapper::readRaw(cv::Mat &src) { + if (CameraGetImageBuffer(h_camera, &frame_info, &pby_buffer, 500) == CAMERA_STATUS_SUCCESS) { + // 使用 cv::Mat 替代 IplImage + cv::Mat img(frame_info.iHeight, frame_info.iWidth, CV_8UC1, pby_buffer, frame_info.iWidth); + src = img.clone(); + + //在成功调用CameraGetImageBuffer后,必须调用CameraReleaseImageBuffer来释放获得的buffer。 + //否则再次调用CameraGetImageBuffer时,程序将被挂起一直阻塞,直到其他线程中调用CameraReleaseImageBuffer来释放了buffer + CameraReleaseImageBuffer(h_camera, pby_buffer); + + return true; + } else { + src = cv::Mat(); + return false; + } +} + +bool CameraWrapper::readProcessed(cv::Mat &src) { + if (CameraGetImageBuffer(h_camera, &frame_info, &pby_buffer, 500) == CAMERA_STATUS_SUCCESS) { + CameraImageProcess(h_camera, pby_buffer, rgb_buffer, + &frame_info); // this function is super slow, better not to use it. + // 使用 cv::Mat 替代 IplImage + int mat_type = (channel == 3) ? CV_8UC3 : CV_8UC1; + cv::Mat img(frame_info.iHeight, frame_info.iWidth, mat_type, rgb_buffer, frame_info.iWidth * channel); + src = img.clone(); + //在成功调用CameraGetImageBuffer后,必须调用CameraReleaseImageBuffer来释放获得的buffer。 + //否则再次调用CameraGetImageBuffer时,程序将被挂起一直阻塞,直到其他线程中调用CameraReleaseImageBuffer来释放了buffer + CameraReleaseImageBuffer(h_camera, pby_buffer); + return true; + } else { + src = cv::Mat(); + return false; + } +} + +bool CameraWrapper::readCallback(cv::Mat &src) { + systime ts, te; + getsystime(ts); + while(src_queue.empty()){ + getsystime(te); + if(getTimeIntervalms(te, ts) > 500){ + return false; + } + } + return src_queue.pop(src); +} + +CameraWrapper::~CameraWrapper() { + CameraUnInit(h_camera); + //注意,先反初始化后再free + if (rgb_buffer != nullptr) + free(rgb_buffer); +} \ No newline at end of file diff --git a/others/src/camera/video_wrapper.cpp b/others/src/camera/video_wrapper.cpp new file mode 100644 index 0000000..23001ed --- /dev/null +++ b/others/src/camera/video_wrapper.cpp @@ -0,0 +1,21 @@ +// +// Created by xixiliadorabarry on 1/24/19. +// + +#include "camera/video_wrapper.h" + + +VideoWrapper::VideoWrapper(const std::string &filename) { + video.open(filename); +} + +VideoWrapper::~VideoWrapper() = default; + + +bool VideoWrapper::init() { + return video.isOpened(); +} + +bool VideoWrapper::read(cv::Mat &src) { + return video.read(src); +} diff --git a/others/src/options.cpp b/others/src/options.cpp new file mode 100644 index 0000000..8b050ad --- /dev/null +++ b/others/src/options.cpp @@ -0,0 +1,135 @@ +// +// Created by xinyang on 19-3-27. +// + +#include +#include +#include +#include +#include + +bool show_armor_box = true; +bool show_armor_boxes = false; +bool show_light_blobs = false; +bool show_origin = false; +bool run_with_camera = true; +bool save_video = false; +bool wait_uart = false; +bool save_labelled_boxes = false; +bool show_process = false; +bool save_mark = false; + +bool show_info = true; +bool run_by_frame = false; + +// 使用map保存所有选项及其描述和操作,加快查找速度。 +std::map> options = { + {"--help",{ + "show the help information.", [](){ + LOG(LOG_MSG, ": " STR_CTR(WORD_BLUE, "All options below are for debug use.")); + for(const auto &option : options){ + LOG(LOG_MSG, ": " STR_CTR(WORD_GREEN, "%s: %s"), option.first.data(), option.second.first.data()); + } + } + }}, + {"--show-armor-box", { + "show the aim box.", []() { + show_armor_box = true; + LOGM("Enable show armor box"); + } + }}, + {"--show-armor-boxes",{ + "show the candidate aim boxes.", [](){ + show_armor_boxes = true; + LOGM("Enable show armor boxes"); + } + }}, + {"--show-light-blobs",{ + "show the candidate light blobs.", [](){ + show_light_blobs = true; + LOGM("Enable show light blobs"); + } + }}, + {"--show-origin", { + "show the origin image.", [](){ + show_origin = true; + LOGM("Enable show origin"); + } + }}, + {"--run-with-camera", { + "start the program with camera directly without asking.", []() { + run_with_camera = true; + LOGM("Run with camera!"); + } + }}, + {"--save-video", { + "save the video.", [](){ + save_video = true; + LOGM("Enable save video!"); + } + }}, + {"--save-labelled-boxes",{ + "save the candidate boxes with their id labels.", [](){ + save_labelled_boxes = true; + LOGM("labelled armor boxes will be saved!"); + } + }}, + {"--wait-uart", { + "wait uart until ready before running.", [](){ + wait_uart = true; + LOGM("Enable wait uart!"); + } + }}, + {"--run-by-frame",{ + "run the code frame by frame.(normally used when run video)", [](){ + run_by_frame = true; + LOGM("Enable run frame by frame"); + } + }}, + {"--show-process", { + "", [](){ + show_process = true; + LOGM("Enable show processed image!"); + } + }}, + + {"--save-mark", { + "", [](){ + save_mark = true; + LOGM("Write down mark"); + } + }}, + {"--show-info", { + "", [](){ + show_info = true; + LOGM("Show information!"); + } + }}, + {"--show-all", { + "show all image windows.", [](){ + show_armor_box = true; + LOGM("Enable show armor box"); + show_armor_boxes = true; + LOGM("Enable show armor boxes"); + show_light_blobs = true; + LOGM("Enable show light blobs"); + show_origin = true; + LOGM("Enable show origin"); + show_process = true; + LOGM("Enable show processed image"); + } + } +}; + +void processOptions(int argc, char **argv) { + if (argc >= 2) { + for (int i = 1; i < argc; i++) { + auto key = options.find(std::string(argv[i])); // 寻找对应选项。 + if(key != options.end()){ + key->second.second(); + }else{ + LOGW("Unknown option: %s. Use --help to see options.", argv[i]); + } + } + } +} \ No newline at end of file diff --git a/others/src/serial.cpp b/others/src/serial.cpp new file mode 100644 index 0000000..d2b599f --- /dev/null +++ b/others/src/serial.cpp @@ -0,0 +1,342 @@ +#include +#include +#include + +//#define LOG_LEVEL LOG_NONE +#include + +using namespace std; + +#ifdef Windows + +Serial::Serial(UINT baud, char parity, UINT databits, UINT stopsbits, DWORD dwCommEvents) : +hComm(INVALID_HANDLE_VALUE), +portNo(3), +parity(parity), +databits(databits), +stopsbits(stopsbits), +dwCommEvents(dwCommEvents){ + if (wait_uart) { + LOGM("Waiting for serial COM%d", portNo); + while (InitPort(portNo, baud, parity, databits, stopsbits, dwCommEvents) == false); + LOGM("Port COM%d open success!", portNo); + } else { + if (InitPort(portNo, baud, parity, databits, stopsbits, dwCommEvents)) { + LOGM("Port COM%d open success!", portNo); + } else { + LOGE("Port COM%d open fail!", portNo); + } + } +} + +Serial::~Serial() { + ClosePort(); +} + +void Serial::ErrorHandler() { + if (wait_uart) { + LOGE("Serial COM%d offline, waiting for serial COM%d", portNo, portNo); + while (InitPort(portNo, baud, parity, databits, stopsbits, dwCommEvents) == false); + LOGM("Port COM%d reopen success!", portNo); + } +} + +bool Serial::openPort(UINT portNo) { + char szPort[50]; + sprintf_s(szPort, "COM%d", portNo); + + /** 打开指定的串口 */ + hComm = CreateFileA(szPort, /** 设备名,COM1,COM2等 */ + GENERIC_READ | GENERIC_WRITE, /** 访问模式,可同时读写 */ + 0, /** 共享模式,0表示不共享 */ + NULL, /** 安全性设置,一般使用NULL */ + OPEN_EXISTING, /** 该参数表示设备必须存在,否则创建失败 */ + 0, + 0); + + return hComm != INVALID_HANDLE_VALUE; +} + +void Serial::ClosePort() { + /** 如果有串口被打开,关闭它 */ + if (hComm != INVALID_HANDLE_VALUE) { + CloseHandle(hComm); + hComm = INVALID_HANDLE_VALUE; + } +} + +bool Serial::InitPort(UINT portNo, UINT baud, char parity, UINT databits, UINT stopsbits, DWORD dwCommEvents) { + /** 临时变量,将制定参数转化为字符串形式,以构造DCB结构 */ + char szDCBparam[50]; + sprintf_s(szDCBparam, "baud=%d parity=%c data=%d stop=%d", baud, parity, databits, stopsbits); + + if (!openPort(portNo)){ + cout << "open error!" << endl; + return false; + } + + BOOL bIsSuccess = TRUE; + COMMTIMEOUTS CommTimeouts; + CommTimeouts.ReadIntervalTimeout = 0; + CommTimeouts.ReadTotalTimeoutMultiplier = 0; + CommTimeouts.ReadTotalTimeoutConstant = 0; + CommTimeouts.WriteTotalTimeoutMultiplier = 0; + CommTimeouts.WriteTotalTimeoutConstant = 0; + if (bIsSuccess) { + bIsSuccess = SetCommTimeouts(hComm, &CommTimeouts); + } else { + cout << "SetCommTimeouts error!" << endl; + } + + DCB dcb; + if (bIsSuccess) { + /** 获取当前串口配置参数,并且构造串口DCB参数 */ + bIsSuccess = GetCommState(hComm, &dcb); + bIsSuccess = BuildCommDCB(szDCBparam, &dcb); + if (!bIsSuccess) { + + cout << "Create dcb fail with "<< GetLastError() << endl; + } + /** 开启RTS flow控制 */ + dcb.fRtsControl = RTS_CONTROL_ENABLE; + } + + if (bIsSuccess) { + /** 使用DCB参数配置串口状态 */ + bIsSuccess = SetCommState(hComm, &dcb); + if (!bIsSuccess) { + cout << "SetCommState error!" << endl; + } + } + + /** 清空串口缓冲区 */ + PurgeComm(hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT); + + return bIsSuccess; +} + +UINT Serial::GetBytesInCOM() const { + DWORD dwError = 0; /** 错误码 */ + COMSTAT comstat; /** COMSTAT结构体,记录通信设备的状态信息 */ + memset(&comstat, 0, sizeof(COMSTAT)); + + UINT BytesInQue = 0; + /** 在调用ReadFile和WriteFile之前,通过本函数清除以前遗留的错误标志 */ + if (ClearCommError(hComm, &dwError, &comstat)) { + BytesInQue = comstat.cbInQue; /** 获取在输入缓冲区中的字节数 */ + } + + return BytesInQue; +} + +bool Serial::WriteData(const unsigned char* pData, unsigned int length) { + if (hComm == INVALID_HANDLE_VALUE) { + ErrorHandler(); + return false; + } + + /** 向缓冲区写入指定量的数据 */ + BOOL bResult = TRUE; + DWORD BytesToSend = 0; + bResult = WriteFile(hComm, pData, length, &BytesToSend, NULL); + if (!bResult) { + DWORD dwError = GetLastError(); + /** 清空串口缓冲区 */ + PurgeComm(hComm, PURGE_RXCLEAR | PURGE_RXABORT); + ErrorHandler(); + return false; + } + return true; +} + +bool Serial::ReadData(unsigned char *buffer, unsigned int length) { + if (hComm == INVALID_HANDLE_VALUE) { + ErrorHandler(); + return false; + } + + /** 从缓冲区读取length字节的数据 */ + BOOL bResult = TRUE; + DWORD totalRead = 0, onceRead = 0; + while (totalRead < length) { + bResult = ReadFile(hComm, buffer, length-totalRead, &onceRead, NULL); + totalRead += onceRead; + if ((!bResult)) { + /** 获取错误码,可以根据该错误码查出错误原因 */ + DWORD dwError = GetLastError(); + + /** 清空串口缓冲区 */ + PurgeComm(hComm, PURGE_RXCLEAR | PURGE_RXABORT); + ErrorHandler(); + return false; + } + } + return bResult; +} + +#elif defined(Linux) || defined(Darwin) + +#include + +using namespace std; + +string get_uart_dev_name() { + FILE *ls = popen("ls /dev/ttyCH341USB* --color=never", "r"); + char name[20] = {0}; + fscanf(ls, "%s", name); + return name; +} + +Serial::Serial(int nSpeed, char nEvent, int nBits, int nStop) : + nSpeed(nSpeed), nEvent(nEvent), nBits(nBits), nStop(nStop) { + if (wait_uart) { + LOGM("Wait for serial be ready!"); + while (!InitPort(nSpeed, nEvent, nBits, nStop)); + LOGM("Port set successfully!"); + } else { + if (InitPort(nSpeed, nEvent, nBits, nStop)) { + LOGM("Port set successfully!"); + } else { + LOGE("Port set fail!"); + } + } +} + +Serial::~Serial() { + close(fd); + fd = -1; +} + +bool Serial::InitPort(int nSpeed, char nEvent, int nBits, int nStop) { + string name = get_uart_dev_name(); + if (name == "") { + return false; + } + if ((fd = open(name.data(), O_RDWR)) < 0) { + return false; + } + if (set_opt(fd, nSpeed, nEvent, nBits, nStop) < 0) { + return false; + } + return true; +} + +//int GetBytesInCOM() const { +// +//} + +bool Serial::WriteData(const unsigned char *pData, unsigned int length) { + int cnt = 0, curr = 0; + if (fd <= 0){ + if(wait_uart){ + InitPort(nSpeed, nEvent, nBits, nStop); + } + return false; + } + while ((curr = write(fd, pData + cnt, length - cnt)) > 0 && (cnt += curr) < length); + if (curr < 0) { + LOGE("Serial offline!"); + close(fd); + if (wait_uart) { + InitPort(nSpeed, nEvent, nBits, nStop); + } + return false; + } + return true; +} + +bool Serial::ReadData(unsigned char *buffer, unsigned int length) { + int cnt = 0, curr = 0; + while ((curr = read(fd, buffer + cnt, length - cnt)) > 0 && (cnt += curr) < length); + if (curr < 0) { + LOGE("Serial offline!"); + close(fd); + if (wait_uart) { + InitPort(nSpeed, nEvent, nBits, nStop); + } + return false; + } + return true; +} + +int Serial::set_opt(int fd, int nSpeed, char nEvent, int nBits, int nStop) { + termios newtio{}, oldtio{}; + if (tcgetattr(fd, &oldtio) != 0) { + perror("SetupSerial 1"); + return -1; + } + bzero(&newtio, sizeof(newtio)); + newtio.c_cflag |= CLOCAL | CREAD; + newtio.c_cflag &= ~CSIZE; + + switch (nBits) { + case 7: + newtio.c_cflag |= CS7; + break; + case 8: + newtio.c_cflag |= CS8; + break; + default: + break; + } + + switch (nEvent) { + case 'O': //奇校验 + newtio.c_cflag |= PARENB; + newtio.c_cflag |= PARODD; + newtio.c_iflag |= (INPCK | ISTRIP); + break; + case 'E': //偶校验 + newtio.c_iflag |= (INPCK | ISTRIP); + newtio.c_cflag |= PARENB; + newtio.c_cflag &= ~PARODD; + break; + case 'N': //无校验 + newtio.c_cflag &= ~PARENB; + break; + default: + break; + } + + switch (nSpeed) { + case 2400: + cfsetispeed(&newtio, B2400); + cfsetospeed(&newtio, B2400); + break; + case 4800: + cfsetispeed(&newtio, B4800); + cfsetospeed(&newtio, B4800); + break; + case 9600: + cfsetispeed(&newtio, B9600); + cfsetospeed(&newtio, B9600); + break; + case 115200: + cfsetispeed(&newtio, B115200); + cfsetospeed(&newtio, B115200); + break; + default: + cfsetispeed(&newtio, B9600); + cfsetospeed(&newtio, B9600); + break; + } + + if (nStop == 1) { + newtio.c_cflag &= ~CSTOPB; + } else if (nStop == 2) { + newtio.c_cflag |= CSTOPB; + } + + newtio.c_cc[VTIME] = 0; + newtio.c_cc[VMIN] = 0; + tcflush(fd, TCIFLUSH); + if ((tcsetattr(fd, TCSANOW, &newtio)) != 0) { + perror("com set error"); + return -1; + } + printf("set done!\n"); + + return 0; +} + +#endif /* switch os */ diff --git a/others/src/systime.cpp b/others/src/systime.cpp new file mode 100644 index 0000000..aa36b78 --- /dev/null +++ b/others/src/systime.cpp @@ -0,0 +1,36 @@ +// +// Created by xinyang on 19-7-31. +// +#include + +#if defined(Linux) || defined(Darwin) + +static systime getsystime(){ + timeval tv; + gettimeofday(&tv, nullptr); + return tv.tv_usec / 1000.0 + tv.tv_sec * 1000.0; +} + +void getsystime(systime &t) { + static systime time_base = getsystime(); + timeval tv; + gettimeofday(&tv, nullptr); + t = tv.tv_usec / 1000.0 + tv.tv_sec * 1000.0 - time_base; +} + +#elif defined(Windows) + +void getsystime(systime &t){ + SYSTEMTIME tv; + GetLocalTime(&tv); + t = tv.wMilliseconds + tv.wSecond * 1000.0; +} + +#else +#error "nonsupport platform." +#endif + + +double getTimeIntervalms(const systime &now, const systime &last) { + return now - last; +} diff --git a/tools/TrainCNN/backward.py b/tools/TrainCNN/backward.py new file mode 100755 index 0000000..c4b94b9 --- /dev/null +++ b/tools/TrainCNN/backward.py @@ -0,0 +1,232 @@ +#!/usr/bin/python3 +print("Preparing...") +import tensorflow as tf +import os +from tqdm import tqdm +import generate +import forward +import cv2 +import numpy as np +import mvsdk + +print("Finish!") + + +def save_kernal(fp, val): + print(val.shape[2], file=fp) + print(val.shape[3], file=fp) + print(val.shape[1], file=fp) + print(val.shape[0], file=fp) + for in_channel in range(val.shape[2]): + for out_channel in range(val.shape[3]): + for row in range(val.shape[0]): + for col in range(val.shape[1]): + print(val[row][col][in_channel][out_channel], file=fp) + + +def save_weight_mat(fp, val): + print(val.shape[0], file=fp) + print(val.shape[1], file=fp) + for row in range(val.shape[0]): + for col in range(val.shape[1]): + print(val[row][col], file=fp) + + +def save_bias(fp, val): + print(val.shape[0], file=fp) + for i in range(val.shape[0]): + print(val[i], file=fp) + + +def save_para(folder, paras, names, info): + os.system("mkdir %s/%s" % (folder, info)) + for para, name in zip(paras, names): + fp = open("%s/%s/%s" % (folder, info, name), "w") + if name[-1:] == "b": + save_bias(fp, para) + elif name[:2] == "fc": + save_weight_mat(fp, para) + elif name[:4] == "conv": + save_kernal(fp, para) + fp.close() + + +STEPS = 100000 +BATCH = 40 +LEARNING_RATE_BASE = 0.0003 +LEARNING_RATE_DECAY = 0.99 +MOVING_AVERAGE_DECAY = 0.99 + + +def train(dataset, show_bar=False): + x = tf.placeholder(tf.float32, [None, generate.SRC_ROWS, generate.SRC_COLS, generate.SRC_CHANNELS]) + y_ = tf.placeholder(tf.float32, [None, forward.OUTPUT_NODES]) + keep_rate = tf.placeholder(tf.float32) + nodes, vars, vars_name = forward.forward(x, 0.01, keep_rate) + y = nodes[-1] + + ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1)) + # ce = tf.nn.weighted_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1), pos_weight=1) + cem = tf.reduce_mean(ce) + loss = cem + tf.add_n(tf.get_collection("losses")) + + global_step = tf.Variable(0, trainable=False) + learning_rate = tf.train.exponential_decay( + LEARNING_RATE_BASE, + global_step, + len(dataset.train_samples) / BATCH, + LEARNING_RATE_DECAY, + staircase=False) + train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss, global_step=global_step) + + ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step) + ema_op = ema.apply(tf.trainable_variables()) + with tf.control_dependencies([train_step, ema_op]): + train_op = tf.no_op(name='train') + + correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) + accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) + + config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True)) + with tf.Session(config=config) as sess: + init_op = tf.global_variables_initializer() + sess.run(init_op) + + bar = tqdm(range(STEPS), ascii=True, dynamic_ncols=True) + for i in bar: + images_samples, labels_samples = dataset.sample_train_sets(BATCH, 0.03) + + _, loss_value, step = sess.run( + [train_op, loss, global_step], + feed_dict={x: images_samples, y_: labels_samples, keep_rate: 0.3} + ) + + if step % 500 == 0: + test_images, test_labels = dataset.sample_test_sets(10000) + test_acc, output = sess.run([accuracy, y], + feed_dict={x: test_images, y_: test_labels, keep_rate: 1.0}) + output = np.argmax(output, axis=1) + real = np.argmax(test_labels, axis=1) + print("=============test-set===============") + for n in range(forward.OUTPUT_NODES): + print("label: %d, precise: %f, recall: %f" % + (n, np.mean(real[output == n] == n), np.mean(output[real == n] == n))) + + train_images, train_labels = dataset.sample_train_sets(10000) + train_acc, output = sess.run([accuracy, y], + feed_dict={x: train_images, y_: train_labels, keep_rate: 1.0}) + output = np.argmax(output, axis=1) + real = np.argmax(train_labels, axis=1) + print("=============train-set===============") + for n in range(forward.OUTPUT_NODES): + print("label: %d, precise: %f, recall: %f" % + (n, np.mean(real[output == n] == n), np.mean(output[real == n] == n))) + print("\n") + if train_acc >= 0.99 and test_acc >= 0.99: + vars_val = sess.run(vars) + save_para( + "model", + vars_val, + vars_name, + "steps:%d-train_acc:%f-test_acc:%f" % (step, train_acc, test_acc) + ) + bar.set_postfix({"loss": loss_value, "train_acc": train_acc, "test_acc": test_acc}) + # print("save done!") + + # pred = sess.run(y, feed_dict={x: test_images, keep_rate:1.0}) + + # nodes_val = sess.run(nodes, feed_dict={x:test_images}) + # return vars_val, nodes_val + DevList = mvsdk.CameraEnumerateDevice() + nDev = len(DevList) + if nDev < 1: + print("No camera was found!") + return + + for i, DevInfo in enumerate(DevList): + print("{}: {} {}".format(i, DevInfo.GetFriendlyName(), DevInfo.GetPortType())) + i = 0 if nDev == 1 else int(input("Select camera: ")) + DevInfo = DevList[i] + print(DevInfo) + + # 打开相机 + hCamera = 0 + try: + hCamera = mvsdk.CameraInit(DevInfo, -1, -1) + except mvsdk.CameraException as e: + print("CameraInit Failed({}): {}".format(e.error_code, e.message)) + return + + # 获取相机特性描述 + cap = mvsdk.CameraGetCapability(hCamera) + + # 判断是黑白相机还是彩色相机 + monoCamera = (cap.sIspCapacity.bMonoSensor != 0) + + # 黑白相机让ISP直接输出MONO数据,而不是扩展成R=G=B的24位灰度 + if monoCamera: + mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_MONO8) + else: + mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_BGR8) + + # 相机模式切换成连续采集 + mvsdk.CameraSetTriggerMode(hCamera, 0) + + # 手动曝光,曝光时间30ms + mvsdk.CameraSetAeState(hCamera, 0) + mvsdk.CameraSetExposureTime(hCamera, 30 * 1000) + + # 让SDK内部取图线程开始工作 + mvsdk.CameraPlay(hCamera) + + # 计算RGB buffer所需的大小,这里直接按照相机的最大分辨率来分配 + FrameBufferSize = cap.sResolutionRange.iWidthMax * cap.sResolutionRange.iHeightMax * (1 if monoCamera else 3) + + # 分配RGB buffer,用来存放ISP输出的图像 + # 备注:从相机传输到PC端的是RAW数据,在PC端通过软件ISP转为RGB数据(如果是黑白相机就不需要转换格式,但是ISP还有其它处理,所以也需要分配这个buffer) + pFrameBuffer = mvsdk.CameraAlignMalloc(FrameBufferSize, 16) + + while (cv2.waitKey(1) & 0xFF) != ord('q'): + # 从相机取一帧图片 + try: + pRawData, FrameHead = mvsdk.CameraGetImageBuffer(hCamera, 200) + mvsdk.CameraImageProcess(hCamera, pRawData, pFrameBuffer, FrameHead) + mvsdk.CameraReleaseImageBuffer(hCamera, pRawData) + # 此时图片已经存储在pFrameBuffer中,对于彩色相机pFrameBuffer=RGB数据,黑白相机pFrameBuffer=8位灰度数据 + # 把pFrameBuffer转换成opencv的图像格式以进行后续算法处理 + frame_data = (mvsdk.c_ubyte * FrameHead.uBytes).from_address(pFrameBuffer) + frame = np.frombuffer(frame_data, dtype=np.uint8) + frame = frame.reshape((FrameHead.iHeight, FrameHead.iWidth, + 1 if FrameHead.uiMediaType == mvsdk.CAMERA_MEDIA_TYPE_MONO8 else 3)) + + frame = cv2.resize(frame, (640, 480), interpolation=cv2.INTER_LINEAR) + cv2.imshow("Press q to end", frame) + if (cv2.waitKey(1) & 0xFF) == ord(' '): + roi = cv2.selectROI("roi", frame) + roi = frame[roi[1]:roi[1] + roi[3], roi[0]:roi[0] + roi[2]] + print(roi) + cv2.imshow("box", roi) + image = cv2.resize(roi, (48, 36)) + image = image.astype(np.float32) / 255.0 + out = sess.run(y, feed_dict={x: [image]}) + print(out) + print(np.argmax(out)) + + except mvsdk.CameraException as e: + if e.error_code != mvsdk.CAMERA_STATUS_TIME_OUT: + print("CameraGetImageBuffer failed({}): {}".format(e.error_code, e.message)) + + # 关闭相机 + mvsdk.CameraUnInit(hCamera) + + # 释放帧缓存 + mvsdk.CameraAlignFree(pFrameBuffer) + + +if __name__ == "__main__": + # import os + # os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" + # os.environ["CUDA_VISIBLE_DEVICES"] = "-1" + dataset = generate.DataSet("/home/xinyang/Workspace/box_resize") + train(dataset, show_bar=True) + input("press enter to continue...") diff --git a/tools/TrainCNN/cv_grab.py b/tools/TrainCNN/cv_grab.py new file mode 100644 index 0000000..32054a5 --- /dev/null +++ b/tools/TrainCNN/cv_grab.py @@ -0,0 +1,94 @@ +#coding=utf-8 +import cv2 +import numpy as np +import mvsdk + +def main_loop(): + # 枚举相机 + DevList = mvsdk.CameraEnumerateDevice() + nDev = len(DevList) + if nDev < 1: + print("No camera was found!") + return + + for i, DevInfo in enumerate(DevList): + print("{}: {} {}".format(i, DevInfo.GetFriendlyName(), DevInfo.GetPortType())) + i = 0 if nDev == 1 else int(input("Select camera: ")) + DevInfo = DevList[i] + print(DevInfo) + + # 打开相机 + hCamera = 0 + try: + hCamera = mvsdk.CameraInit(DevInfo, -1, -1) + except mvsdk.CameraException as e: + print("CameraInit Failed({}): {}".format(e.error_code, e.message) ) + return + + # 获取相机特性描述 + cap = mvsdk.CameraGetCapability(hCamera) + + # 判断是黑白相机还是彩色相机 + monoCamera = (cap.sIspCapacity.bMonoSensor != 0) + + # 黑白相机让ISP直接输出MONO数据,而不是扩展成R=G=B的24位灰度 + if monoCamera: + mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_MONO8) + else: + mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_BGR8) + + # 相机模式切换成连续采集 + mvsdk.CameraSetTriggerMode(hCamera, 0) + + # 手动曝光,曝光时间30ms + mvsdk.CameraSetAeState(hCamera, 0) + mvsdk.CameraSetExposureTime(hCamera, 30 * 1000) + + # 让SDK内部取图线程开始工作 + mvsdk.CameraPlay(hCamera) + + # 计算RGB buffer所需的大小,这里直接按照相机的最大分辨率来分配 + FrameBufferSize = cap.sResolutionRange.iWidthMax * cap.sResolutionRange.iHeightMax * (1 if monoCamera else 3) + + # 分配RGB buffer,用来存放ISP输出的图像 + # 备注:从相机传输到PC端的是RAW数据,在PC端通过软件ISP转为RGB数据(如果是黑白相机就不需要转换格式,但是ISP还有其它处理,所以也需要分配这个buffer) + pFrameBuffer = mvsdk.CameraAlignMalloc(FrameBufferSize, 16) + + while (cv2.waitKey(1) & 0xFF) != ord('q'): + # 从相机取一帧图片 + try: + pRawData, FrameHead = mvsdk.CameraGetImageBuffer(hCamera, 200) + mvsdk.CameraImageProcess(hCamera, pRawData, pFrameBuffer, FrameHead) + mvsdk.CameraReleaseImageBuffer(hCamera, pRawData) + + # 此时图片已经存储在pFrameBuffer中,对于彩色相机pFrameBuffer=RGB数据,黑白相机pFrameBuffer=8位灰度数据 + # 把pFrameBuffer转换成opencv的图像格式以进行后续算法处理 + frame_data = (mvsdk.c_ubyte * FrameHead.uBytes).from_address(pFrameBuffer) + frame = np.frombuffer(frame_data, dtype=np.uint8) + frame = frame.reshape((FrameHead.iHeight, FrameHead.iWidth, 1 if FrameHead.uiMediaType == mvsdk.CAMERA_MEDIA_TYPE_MONO8 else 3) ) + + frame = cv2.resize(frame, (640,480), interpolation = cv2.INTER_LINEAR) + cv2.imshow("Press q to end", frame) + roi = cv2.selectROI("roi", frame) + roi = frame[roi[1]:roi[1]+roi[3], roi[0]:roi[0]+roi[2]] + print(roi) + cv2.imshow("box", roi) + + + except mvsdk.CameraException as e: + if e.error_code != mvsdk.CAMERA_STATUS_TIME_OUT: + print("CameraGetImageBuffer failed({}): {}".format(e.error_code, e.message) ) + + # 关闭相机 + mvsdk.CameraUnInit(hCamera) + + # 释放帧缓存 + mvsdk.CameraAlignFree(pFrameBuffer) + +def main(): + try: + main_loop() + finally: + cv2.destroyAllWindows() + +main() diff --git a/tools/TrainCNN/forward.py b/tools/TrainCNN/forward.py new file mode 100644 index 0000000..bfbfc7c --- /dev/null +++ b/tools/TrainCNN/forward.py @@ -0,0 +1,114 @@ +import tensorflow as tf + + +def get_weight(shape, regularizer=None): + w = tf.Variable(tf.truncated_normal(shape, stddev=0.1)) + if regularizer is not None: + tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w)) + return w + + +def get_bias(shape): + b = tf.Variable(tf.zeros(shape)) + return b + + +def conv2d(x, w): + return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding="VALID") + + +def avg_pool_2x2(x): + return tf.nn.avg_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="VALID") + + +def max_pool_2x2(x): + return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="VALID") + + +# 第一层卷积核大小 +CONV1_KERNAL_SIZE = 5 + +# 第一层卷积输出通道数 +CONV1_OUTPUT_CHANNELS = 6 + +# 第二层卷积核大小 +CONV2_KERNAL_SIZE = 3 + +# 第二层卷积输出通道数 +CONV2_OUTPUT_CHANNELS = 10 + +# 第三层卷积核大小 +CONV3_KERNAL_SIZE = 3 + +# 第三层卷积输出通道数 +CONV3_OUTPUT_CHANNELS = 14 + +# 第一层全连接宽度 +FC1_OUTPUT_NODES = 60 + +# 第二层全连接宽度(输出标签类型数) +FC2_OUTPUT_NODES = 15 + +# 输出标签类型数 +OUTPUT_NODES = FC2_OUTPUT_NODES + + +def forward(x, regularizer=None, keep_rate=tf.constant(1.0)): + vars = [] + vars_name = [] + nodes = [] + + conv1_w = get_weight( + [CONV1_KERNAL_SIZE, CONV1_KERNAL_SIZE, int(x.shape[3]), CONV1_OUTPUT_CHANNELS] + ) + conv1_b = get_bias([CONV1_OUTPUT_CHANNELS]) + conv1 = tf.nn.relu(tf.nn.bias_add(conv2d(x, conv1_w), conv1_b)) + pool1 = avg_pool_2x2(conv1) + print("conv1: ", conv1.shape) + print("pool1: ", pool1.shape) + vars.extend([conv1_w, conv1_b]) + vars_name.extend(["conv1_w", "conv1_b"]) + nodes.extend([conv1, pool1]) + + conv2_w = get_weight( + [CONV2_KERNAL_SIZE, CONV2_KERNAL_SIZE, CONV1_OUTPUT_CHANNELS, CONV2_OUTPUT_CHANNELS] + ) + conv2_b = get_bias([CONV2_OUTPUT_CHANNELS]) + conv2 = tf.nn.relu(tf.nn.bias_add(conv2d(pool1, conv2_w), conv2_b)) + pool2 = avg_pool_2x2(conv2) + print("conv2: ", conv2.shape) + vars.extend([conv2_w, conv2_b]) + vars_name.extend(["conv2_w", "conv2_b"]) + nodes.extend([conv2, pool2]) + + conv3_w = get_weight( + [CONV3_KERNAL_SIZE, CONV3_KERNAL_SIZE, CONV2_OUTPUT_CHANNELS, CONV3_OUTPUT_CHANNELS] + ) + conv3_b = get_bias([CONV3_OUTPUT_CHANNELS]) + conv3 = tf.nn.relu(tf.nn.bias_add(conv2d(pool2, conv3_w), conv3_b)) + print("conv3: ", conv3.shape) + vars.extend([conv3_w, conv3_b]) + vars_name.extend(["conv3_w", "conv3_b"]) + nodes.extend([conv3]) + + conv_shape = conv3.get_shape().as_list() + node = conv_shape[1] * conv_shape[2] * conv_shape[3] + reshaped = tf.reshape(conv3, [-1, node]) + reshaped = tf.nn.dropout(reshaped, keep_rate) + print("reshaped: ", reshaped.shape) + + fc1_w = get_weight([node, FC1_OUTPUT_NODES], regularizer) + fc1_b = get_bias([FC1_OUTPUT_NODES]) + fc1 = tf.nn.relu(tf.matmul(reshaped, fc1_w) + fc1_b) + vars.extend([fc1_w, fc1_b]) + vars_name.extend(["fc1_w", "fc1_b"]) + nodes.extend([fc1]) + + fc2_w = get_weight([FC1_OUTPUT_NODES, FC2_OUTPUT_NODES], regularizer) + fc2_b = get_bias([FC2_OUTPUT_NODES]) + fc2 = tf.matmul(fc1, fc2_w) + fc2_b + vars.extend([fc2_w, fc2_b]) + vars_name.extend(["fc2_w", "fc2_b"]) + nodes.extend([fc2]) + + return nodes, vars, vars_name diff --git a/tools/TrainCNN/generate.py b/tools/TrainCNN/generate.py new file mode 100644 index 0000000..8f8a44a --- /dev/null +++ b/tools/TrainCNN/generate.py @@ -0,0 +1,104 @@ +import numpy as np +import os +import cv2 +import random +from tqdm import tqdm +from forward import OUTPUT_NODES + +# 原图像行数 +SRC_ROWS = 36 + +# 原图像列数 +SRC_COLS = 48 + +# 原图像通道数 +SRC_CHANNELS = 3 + + +class DataSet: + def __init__(self, folder): + self.train_samples = [] + self.train_labels = [] + self.test_samples = [] + self.test_labels = [] + self.generate_data_sets(folder) + + def file2nparray(self, name): + image = cv2.imread(name) + image = cv2.resize(image, (SRC_COLS, SRC_ROWS)) + image = image.astype(np.float32) + return image / 255.0 + + def id2label(self, id): + a = np.zeros([OUTPUT_NODES]) + a[id] = 1 + return a[:] + + def generate_data_sets(self, folder): + sets = [] + for i in range(OUTPUT_NODES): + dir = "%s/id%d" % (folder, i) + files = os.listdir(dir) + for file in tqdm(files, postfix={"loading id": i}, dynamic_ncols=True): + if file[-3:] == "jpg": + sample = self.file2nparray("%s/%s" % (dir, file)) + label = self.id2label(i) + if random.random() < 0.7: + self.train_samples.append(sample) + self.train_labels.append(label) + if i == 0: + tmp = sample.copy() + tmp = tmp[:, :, ::-1] + self.train_samples.append(tmp) + self.train_labels.append(label) + else: + tmp = sample.copy() + tmp = 1.2 * tmp + tmp = np.where(tmp > 1, 1, tmp) + tmp = np.where(tmp < 0, 0, tmp) + self.train_samples.append(tmp) + self.train_labels.append(label) + tmp = sample.copy() + tmp = 0.8 * tmp + tmp = np.where(tmp > 1, 1, tmp) + tmp = np.where(tmp < 0, 0, tmp) + self.train_samples.append(tmp) + self.train_labels.append(label) + else: + self.test_samples.append(sample) + self.test_labels.append(label) + self.train_samples = np.array(self.train_samples) + self.train_labels = np.array(self.train_labels) + self.test_samples = np.array(self.test_samples) + self.test_labels = np.array(self.test_labels) + return sets + + def sample_train_sets(self, length, std=0.0): + samples = [] + labels = [] + for i in range(length): + id = random.randint(0, len(self.train_samples) - 1) + samples.append(self.train_samples[id]) + labels.append(self.train_labels[id]) + samples = np.array(samples).copy() + samples += np.random.normal(0, std, samples.shape) + labels = np.array(labels) + return samples, labels + + def sample_test_sets(self, length, std=0.0): + samples = [] + labels = [] + for i in range(length): + id = random.randint(0, len(self.test_samples) - 1) + samples.append(self.test_samples[id]) + labels.append(self.test_labels[id]) + samples = np.array(samples).copy() + samples += np.random.normal(0, std, samples.shape) + labels = np.array(labels) + return samples, labels + + def all_train_sets(self, std=0.0): + return self.train_samples[:], self.train_labels[:] + + def all_test_sets(self, std=0.0): + return self.test_samples[:], self.test_labels[:] diff --git a/tools/TrainCNN/grab.py b/tools/TrainCNN/grab.py new file mode 100644 index 0000000..efdbb2b --- /dev/null +++ b/tools/TrainCNN/grab.py @@ -0,0 +1,111 @@ +#coding=utf-8 +import mvsdk + +def main(): + # 枚举相机 + DevList = mvsdk.CameraEnumerateDevice() + nDev = len(DevList) + if nDev < 1: + print("No camera was found!") + return + + for i, DevInfo in enumerate(DevList): + print("{}: {} {}".format(i, DevInfo.GetFriendlyName(), DevInfo.GetPortType())) + i = 0 if nDev == 1 else int(input("Select camera: ")) + DevInfo = DevList[i] + print(DevInfo) + + # 打开相机 + hCamera = 0 + try: + hCamera = mvsdk.CameraInit(DevInfo, -1, -1) + except mvsdk.CameraException as e: + print("CameraInit Failed({}): {}".format(e.error_code, e.message) ) + return + + # 获取相机特性描述 + cap = mvsdk.CameraGetCapability(hCamera) + PrintCapbility(cap) + + # 判断是黑白相机还是彩色相机 + monoCamera = (cap.sIspCapacity.bMonoSensor != 0) + + # 黑白相机让ISP直接输出MONO数据,而不是扩展成R=G=B的24位灰度 + if monoCamera: + mvsdk.CameraSetIspOutFormat(hCamera, mvsdk.CAMERA_MEDIA_TYPE_MONO8) + + # 相机模式切换成连续采集 + mvsdk.CameraSetTriggerMode(hCamera, 0) + + # 手动曝光,曝光时间30ms + mvsdk.CameraSetAeState(hCamera, 0) + mvsdk.CameraSetExposureTime(hCamera, 30 * 1000) + + # 让SDK内部取图线程开始工作 + mvsdk.CameraPlay(hCamera) + + # 计算RGB buffer所需的大小,这里直接按照相机的最大分辨率来分配 + FrameBufferSize = cap.sResolutionRange.iWidthMax * cap.sResolutionRange.iHeightMax * (1 if monoCamera else 3) + + # 分配RGB buffer,用来存放ISP输出的图像 + # 备注:从相机传输到PC端的是RAW数据,在PC端通过软件ISP转为RGB数据(如果是黑白相机就不需要转换格式,但是ISP还有其它处理,所以也需要分配这个buffer) + pFrameBuffer = mvsdk.CameraAlignMalloc(FrameBufferSize, 16) + + # 从相机取一帧图片 + try: + pRawData, FrameHead = mvsdk.CameraGetImageBuffer(hCamera, 2000) + mvsdk.CameraImageProcess(hCamera, pRawData, pFrameBuffer, FrameHead) + mvsdk.CameraReleaseImageBuffer(hCamera, pRawData) + + # 此时图片已经存储在pFrameBuffer中,对于彩色相机pFrameBuffer=RGB数据,黑白相机pFrameBuffer=8位灰度数据 + # 该示例中我们只是把图片保存到硬盘文件中 + status = mvsdk.CameraSaveImage(hCamera, "./grab.bmp", pFrameBuffer, FrameHead, mvsdk.FILE_BMP, 100) + if status == mvsdk.CAMERA_STATUS_SUCCESS: + print("Save image successfully. image_size = {}X{}".format(FrameHead.iWidth, FrameHead.iHeight) ) + else: + print("Save image failed. err={}".format(status) ) + except mvsdk.CameraException as e: + print("CameraGetImageBuffer failed({}): {}".format(e.error_code, e.message) ) + + # 关闭相机 + mvsdk.CameraUnInit(hCamera) + + # 释放帧缓存 + mvsdk.CameraAlignFree(pFrameBuffer) + +def PrintCapbility(cap): + for i in range(cap.iTriggerDesc): + desc = cap.pTriggerDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iImageSizeDesc): + desc = cap.pImageSizeDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iClrTempDesc): + desc = cap.pClrTempDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iMediaTypeDesc): + desc = cap.pMediaTypeDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iFrameSpeedDesc): + desc = cap.pFrameSpeedDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iPackLenDesc): + desc = cap.pPackLenDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iPresetLut): + desc = cap.pPresetLutDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iAeAlmSwDesc): + desc = cap.pAeAlmSwDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iAeAlmHdDesc): + desc = cap.pAeAlmHdDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iBayerDecAlmSwDesc): + desc = cap.pBayerDecAlmSwDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + for i in range(cap.iBayerDecAlmHdDesc): + desc = cap.pBayerDecAlmHdDesc[i] + print("{}: {}".format(desc.iIndex, desc.GetDescription()) ) + +main() diff --git a/tools/TrainCNN/mvsdk.py b/tools/TrainCNN/mvsdk.py new file mode 100644 index 0000000..6bca73c --- /dev/null +++ b/tools/TrainCNN/mvsdk.py @@ -0,0 +1,2344 @@ +#coding=utf-8 +import platform +from ctypes import * +from threading import local + +# 回调函数类型 +CALLBACK_FUNC_TYPE = None + +# SDK动态库 +_sdk = None + +def _Init(): + global _sdk + global CALLBACK_FUNC_TYPE + + is_win = (platform.system() == "Windows") + is_x86 = (platform.architecture()[0] == '32bit') + + if is_win: + _sdk = windll.MVCAMSDK if is_x86 else windll.MVCAMSDK_X64 + CALLBACK_FUNC_TYPE = WINFUNCTYPE + else: + _sdk = cdll.LoadLibrary("libMVSDK.so") + CALLBACK_FUNC_TYPE = CFUNCTYPE + +_Init() + +#-------------------------------------------类型定义-------------------------------------------------- + +# 状态码定义 +CAMERA_STATUS_SUCCESS = 0 # 操作成功 +CAMERA_STATUS_FAILED = -1 # 操作失败 +CAMERA_STATUS_INTERNAL_ERROR = -2 # 内部错误 +CAMERA_STATUS_UNKNOW = -3 # 未知错误 +CAMERA_STATUS_NOT_SUPPORTED = -4 # 不支持该功能 +CAMERA_STATUS_NOT_INITIALIZED = -5 # 初始化未完成 +CAMERA_STATUS_PARAMETER_INVALID = -6 # 参数无效 +CAMERA_STATUS_PARAMETER_OUT_OF_BOUND = -7 # 参数越界 +CAMERA_STATUS_UNENABLED = -8 # 未使能 +CAMERA_STATUS_USER_CANCEL = -9 # 用户手动取消了,比如roi面板点击取消,返回 +CAMERA_STATUS_PATH_NOT_FOUND = -10 # 注册表中没有找到对应的路径 +CAMERA_STATUS_SIZE_DISMATCH = -11 # 获得图像数据长度和定义的尺寸不匹配 +CAMERA_STATUS_TIME_OUT = -12 # 超时错误 +CAMERA_STATUS_IO_ERROR = -13 # 硬件IO错误 +CAMERA_STATUS_COMM_ERROR = -14 # 通讯错误 +CAMERA_STATUS_BUS_ERROR = -15 # 总线错误 +CAMERA_STATUS_NO_DEVICE_FOUND = -16 # 没有发现设备 +CAMERA_STATUS_NO_LOGIC_DEVICE_FOUND = -17 # 未找到逻辑设备 +CAMERA_STATUS_DEVICE_IS_OPENED = -18 # 设备已经打开 +CAMERA_STATUS_DEVICE_IS_CLOSED = -19 # 设备已经关闭 +CAMERA_STATUS_DEVICE_VEDIO_CLOSED = -20 # 没有打开设备视频,调用录像相关的函数时,如果相机视频没有打开,则回返回该错误。 +CAMERA_STATUS_NO_MEMORY = -21 # 没有足够系统内存 +CAMERA_STATUS_FILE_CREATE_FAILED = -22 # 创建文件失败 +CAMERA_STATUS_FILE_INVALID = -23 # 文件格式无效 +CAMERA_STATUS_WRITE_PROTECTED = -24 # 写保护,不可写 +CAMERA_STATUS_GRAB_FAILED = -25 # 数据采集失败 +CAMERA_STATUS_LOST_DATA = -26 # 数据丢失,不完整 +CAMERA_STATUS_EOF_ERROR = -27 # 未接收到帧结束符 +CAMERA_STATUS_BUSY = -28 # 正忙(上一次操作还在进行中),此次操作不能进行 +CAMERA_STATUS_WAIT = -29 # 需要等待(进行操作的条件不成立),可以再次尝试 +CAMERA_STATUS_IN_PROCESS = -30 # 正在进行,已经被操作过 +CAMERA_STATUS_IIC_ERROR = -31 # IIC传输错误 +CAMERA_STATUS_SPI_ERROR = -32 # SPI传输错误 +CAMERA_STATUS_USB_CONTROL_ERROR = -33 # USB控制传输错误 +CAMERA_STATUS_USB_BULK_ERROR = -34 # USB BULK传输错误 +CAMERA_STATUS_SOCKET_INIT_ERROR = -35 # 网络传输套件初始化失败 +CAMERA_STATUS_GIGE_FILTER_INIT_ERROR = -36 # 网络相机内核过滤驱动初始化失败,请检查是否正确安装了驱动,或者重新安装。 +CAMERA_STATUS_NET_SEND_ERROR = -37 # 网络数据发送错误 +CAMERA_STATUS_DEVICE_LOST = -38 # 与网络相机失去连接,心跳检测超时 +CAMERA_STATUS_DATA_RECV_LESS = -39 # 接收到的字节数比请求的少 +CAMERA_STATUS_FUNCTION_LOAD_FAILED = -40 # 从文件中加载程序失败 +CAMERA_STATUS_CRITICAL_FILE_LOST = -41 # 程序运行所必须的文件丢失。 +CAMERA_STATUS_SENSOR_ID_DISMATCH = -42 # 固件和程序不匹配,原因是下载了错误的固件。 +CAMERA_STATUS_OUT_OF_RANGE = -43 # 参数超出有效范围。 +CAMERA_STATUS_REGISTRY_ERROR = -44 # 安装程序注册错误。请重新安装程序,或者运行安装目录Setup/Installer.exe +CAMERA_STATUS_ACCESS_DENY = -45 # 禁止访问。指定相机已经被其他程序占用时,再申请访问该相机,会返回该状态。(一个相机不能被多个程序同时访问) +#AIA的标准兼容的错误码 +CAMERA_AIA_PACKET_RESEND = 0x0100 #该帧需要重传 +CAMERA_AIA_NOT_IMPLEMENTED = 0x8001 #设备不支持的命令 +CAMERA_AIA_INVALID_PARAMETER = 0x8002 #命令参数非法 +CAMERA_AIA_INVALID_ADDRESS = 0x8003 #不可访问的地址 +CAMERA_AIA_WRITE_PROTECT = 0x8004 #访问的对象不可写 +CAMERA_AIA_BAD_ALIGNMENT = 0x8005 #访问的地址没有按照要求对齐 +CAMERA_AIA_ACCESS_DENIED = 0x8006 #没有访问权限 +CAMERA_AIA_BUSY = 0x8007 #命令正在处理中 +CAMERA_AIA_DEPRECATED = 0x8008 #0x8008-0x0800B 0x800F 该指令已经废弃 +CAMERA_AIA_PACKET_UNAVAILABLE = 0x800C #包无效 +CAMERA_AIA_DATA_OVERRUN = 0x800D #数据溢出,通常是收到的数据比需要的多 +CAMERA_AIA_INVALID_HEADER = 0x800E #数据包头部中某些区域与协议不匹配 +CAMERA_AIA_PACKET_NOT_YET_AVAILABLE = 0x8010 #图像分包数据还未准备好,多用于触发模式,应用程序访问超时 +CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY = 0x8011 #需要访问的分包已经不存在。多用于重传时数据已经不在缓冲区中 +CAMERA_AIA_PACKET_REMOVED_FROM_MEMORY = 0x8012 #CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY +CAMERA_AIA_NO_REF_TIME = 0x0813 #没有参考时钟源。多用于时间同步的命令执行时 +CAMERA_AIA_PACKET_TEMPORARILY_UNAVAILABLE = 0x0814 #由于信道带宽问题,当前分包暂时不可用,需稍后进行访问 +CAMERA_AIA_OVERFLOW = 0x0815 #设备端数据溢出,通常是队列已满 +CAMERA_AIA_ACTION_LATE = 0x0816 #命令执行已经超过有效的指定时间 +CAMERA_AIA_ERROR = 0x8FFF #错误 + +# 图像格式定义 +CAMERA_MEDIA_TYPE_MONO = 0x01000000 +CAMERA_MEDIA_TYPE_RGB = 0x02000000 +CAMERA_MEDIA_TYPE_COLOR = 0x02000000 +CAMERA_MEDIA_TYPE_OCCUPY1BIT = 0x00010000 +CAMERA_MEDIA_TYPE_OCCUPY2BIT = 0x00020000 +CAMERA_MEDIA_TYPE_OCCUPY4BIT = 0x00040000 +CAMERA_MEDIA_TYPE_OCCUPY8BIT = 0x00080000 +CAMERA_MEDIA_TYPE_OCCUPY10BIT = 0x000A0000 +CAMERA_MEDIA_TYPE_OCCUPY12BIT = 0x000C0000 +CAMERA_MEDIA_TYPE_OCCUPY16BIT = 0x00100000 +CAMERA_MEDIA_TYPE_OCCUPY24BIT = 0x00180000 +CAMERA_MEDIA_TYPE_OCCUPY32BIT = 0x00200000 +CAMERA_MEDIA_TYPE_OCCUPY36BIT = 0x00240000 +CAMERA_MEDIA_TYPE_OCCUPY48BIT = 0x00300000 +CAMERA_MEDIA_TYPE_EFFECTIVE_PIXEL_SIZE_MASK = 0x00FF0000 +CAMERA_MEDIA_TYPE_EFFECTIVE_PIXEL_SIZE_SHIFT = 16 +CAMERA_MEDIA_TYPE_ID_MASK = 0x0000FFFF +CAMERA_MEDIA_TYPE_COUNT = 0x46 + +#mono +CAMERA_MEDIA_TYPE_MONO1P = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY1BIT | 0x0037) +CAMERA_MEDIA_TYPE_MONO2P = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY2BIT | 0x0038) +CAMERA_MEDIA_TYPE_MONO4P = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY4BIT | 0x0039) +CAMERA_MEDIA_TYPE_MONO8 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0001) +CAMERA_MEDIA_TYPE_MONO8S = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0002) +CAMERA_MEDIA_TYPE_MONO10 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0003) +CAMERA_MEDIA_TYPE_MONO10_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0004) +CAMERA_MEDIA_TYPE_MONO12 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0005) +CAMERA_MEDIA_TYPE_MONO12_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0006) +CAMERA_MEDIA_TYPE_MONO14 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0025) +CAMERA_MEDIA_TYPE_MONO16 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0007) + +# Bayer +CAMERA_MEDIA_TYPE_BAYGR8 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0008) +CAMERA_MEDIA_TYPE_BAYRG8 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x0009) +CAMERA_MEDIA_TYPE_BAYGB8 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x000A) +CAMERA_MEDIA_TYPE_BAYBG8 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY8BIT | 0x000B) + +CAMERA_MEDIA_TYPE_BAYGR10_MIPI = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0026) +CAMERA_MEDIA_TYPE_BAYRG10_MIPI = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0027) +CAMERA_MEDIA_TYPE_BAYGB10_MIPI = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0028) +CAMERA_MEDIA_TYPE_BAYBG10_MIPI = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY10BIT | 0x0029) + +CAMERA_MEDIA_TYPE_BAYGR10 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000C) +CAMERA_MEDIA_TYPE_BAYRG10 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000D) +CAMERA_MEDIA_TYPE_BAYGB10 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000E) +CAMERA_MEDIA_TYPE_BAYBG10 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x000F) + +CAMERA_MEDIA_TYPE_BAYGR12 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0010) +CAMERA_MEDIA_TYPE_BAYRG12 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0011) +CAMERA_MEDIA_TYPE_BAYGB12 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0012) +CAMERA_MEDIA_TYPE_BAYBG12 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0013) + +CAMERA_MEDIA_TYPE_BAYGR10_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0026) +CAMERA_MEDIA_TYPE_BAYRG10_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0027) +CAMERA_MEDIA_TYPE_BAYGB10_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0028) +CAMERA_MEDIA_TYPE_BAYBG10_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0029) + +CAMERA_MEDIA_TYPE_BAYGR12_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002A) +CAMERA_MEDIA_TYPE_BAYRG12_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002B) +CAMERA_MEDIA_TYPE_BAYGB12_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002C) +CAMERA_MEDIA_TYPE_BAYBG12_PACKED = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x002D) + +CAMERA_MEDIA_TYPE_BAYGR16 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x002E) +CAMERA_MEDIA_TYPE_BAYRG16 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x002F) +CAMERA_MEDIA_TYPE_BAYGB16 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0030) +CAMERA_MEDIA_TYPE_BAYBG16 = (CAMERA_MEDIA_TYPE_MONO | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0031) + +# RGB +CAMERA_MEDIA_TYPE_RGB8 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0014) +CAMERA_MEDIA_TYPE_BGR8 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0015) +CAMERA_MEDIA_TYPE_RGBA8 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x0016) +CAMERA_MEDIA_TYPE_BGRA8 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x0017) +CAMERA_MEDIA_TYPE_RGB10 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0018) +CAMERA_MEDIA_TYPE_BGR10 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0019) +CAMERA_MEDIA_TYPE_RGB12 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x001A) +CAMERA_MEDIA_TYPE_BGR12 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x001B) +CAMERA_MEDIA_TYPE_RGB16 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0033) +CAMERA_MEDIA_TYPE_RGB10V1_PACKED = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x001C) +CAMERA_MEDIA_TYPE_RGB10P32 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY32BIT | 0x001D) +CAMERA_MEDIA_TYPE_RGB12V1_PACKED = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY36BIT | 0X0034) +CAMERA_MEDIA_TYPE_RGB565P = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0035) +CAMERA_MEDIA_TYPE_BGR565P = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0X0036) + +# YUV and YCbCr +CAMERA_MEDIA_TYPE_YUV411_8_UYYVYY = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x001E) +CAMERA_MEDIA_TYPE_YUV422_8_UYVY = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x001F) +CAMERA_MEDIA_TYPE_YUV422_8 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0032) +CAMERA_MEDIA_TYPE_YUV8_UYV = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0020) +CAMERA_MEDIA_TYPE_YCBCR8_CBYCR = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x003A) +#CAMERA_MEDIA_TYPE_YCBCR422_8 : YYYYCbCrCbCr +CAMERA_MEDIA_TYPE_YCBCR422_8 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x003B) +CAMERA_MEDIA_TYPE_YCBCR422_8_CBYCRY = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0043) +CAMERA_MEDIA_TYPE_YCBCR411_8_CBYYCRYY = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x003C) +CAMERA_MEDIA_TYPE_YCBCR601_8_CBYCR = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x003D) +CAMERA_MEDIA_TYPE_YCBCR601_422_8 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x003E) +CAMERA_MEDIA_TYPE_YCBCR601_422_8_CBYCRY = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0044) +CAMERA_MEDIA_TYPE_YCBCR601_411_8_CBYYCRYY = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x003F) +CAMERA_MEDIA_TYPE_YCBCR709_8_CBYCR = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0040) +CAMERA_MEDIA_TYPE_YCBCR709_422_8 = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0041) +CAMERA_MEDIA_TYPE_YCBCR709_422_8_CBYCRY = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY16BIT | 0x0045) +CAMERA_MEDIA_TYPE_YCBCR709_411_8_CBYYCRYY = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY12BIT | 0x0042) + +# RGB Planar +CAMERA_MEDIA_TYPE_RGB8_PLANAR = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY24BIT | 0x0021) +CAMERA_MEDIA_TYPE_RGB10_PLANAR = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0022) +CAMERA_MEDIA_TYPE_RGB12_PLANAR = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0023) +CAMERA_MEDIA_TYPE_RGB16_PLANAR = (CAMERA_MEDIA_TYPE_COLOR | CAMERA_MEDIA_TYPE_OCCUPY48BIT | 0x0024) + +# 保存格式 +FILE_JPG = 1 +FILE_BMP = 2 +FILE_RAW = 4 +FILE_PNG = 8 +FILE_BMP_8BIT = 16 +FILE_PNG_8BIT = 32 +FILE_RAW_16BIT = 64 + +# 触发信号 +EXT_TRIG_LEADING_EDGE = 0 +EXT_TRIG_TRAILING_EDGE = 1 +EXT_TRIG_HIGH_LEVEL = 2 +EXT_TRIG_LOW_LEVEL = 3 +EXT_TRIG_DOUBLE_EDGE = 4 + +# IO模式 +IOMODE_TRIG_INPUT = 0 +IOMODE_STROBE_OUTPUT = 1 +IOMODE_GP_INPUT = 2 +IOMODE_GP_OUTPUT = 3 +IOMODE_PWM_OUTPUT = 4 + + +# 相机操作异常信息 +class CameraException(Exception): + """docstring for CameraException""" + def __init__(self, error_code): + super(CameraException, self).__init__() + self.error_code = error_code + self.message = CameraGetErrorString(error_code) + + def __str__(self): + return 'error_code:{} message:{}'.format(self.error_code, self.message) + +class MvStructure(Structure): + def __str__(self): + strs = [] + for field in self._fields_: + name = field[0] + value = getattr(self, name) + if isinstance(value, type(b'')): + value = _string_buffer_to_str(value) + strs.append("{}:{}".format(name, value)) + return '\n'.join(strs) + +# 相机的设备信息,只读信息,请勿修改 +class tSdkCameraDevInfo(MvStructure): + _fields_ = [("acProductSeries", c_char * 32), #产品系列 + ("acProductName", c_char * 32), #产品名称 + ("acFriendlyName", c_char * 32), #产品昵称 + ("acLinkName", c_char * 32), #内核符号连接名,内部使用 + ("acDriverVersion", c_char * 32), #驱动版本 + ("acSensorType", c_char * 32), #sensor类型 + ("acPortType", c_char * 32), #接口类型 + ("acSn", c_char * 32), #产品唯一序列号 + ("uInstance", c_uint)] #该型号相机在该电脑上的实例索引号,用于区分同型号多相机 + + def GetProductSeries(self): + return _string_buffer_to_str(self.acProductSeries) + def GetProductName(self): + return _string_buffer_to_str(self.acProductName) + def GetFriendlyName(self): + return _string_buffer_to_str(self.acFriendlyName) + def GetLinkName(self): + return _string_buffer_to_str(self.acLinkName) + def GetDriverVersion(self): + return _string_buffer_to_str(self.acDriverVersion) + def GetSensorType(self): + return _string_buffer_to_str(self.acSensorType) + def GetPortType(self): + return _string_buffer_to_str(self.acPortType) + def GetSn(self): + return _string_buffer_to_str(self.acSn) + +# 相机的分辨率设定范围 +class tSdkResolutionRange(MvStructure): + _fields_ = [("iHeightMax", c_int), #图像最大高度 + ("iHeightMin", c_int), #图像最小高度 + ("iWidthMax", c_int), #图像最大宽度 + ("iWidthMin", c_int), #图像最小宽度 + ("uSkipModeMask", c_uint), #SKIP模式掩码,为0,表示不支持SKIP 。bit0为1,表示支持SKIP 2x2 bit1为1,表示支持SKIP 3x3.... + ("uBinSumModeMask", c_uint), #BIN(求和)模式掩码,为0,表示不支持BIN 。bit0为1,表示支持BIN 2x2 bit1为1,表示支持BIN 3x3.... + ("uBinAverageModeMask", c_uint),#BIN(求均值)模式掩码,为0,表示不支持BIN 。bit0为1,表示支持BIN 2x2 bit1为1,表示支持BIN 3x3.... + ("uResampleMask", c_uint)] #硬件重采样的掩码 + +#相机的分辨率描述 +class tSdkImageResolution(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 索引号,[0,N]表示预设的分辨率(N 为预设分辨率的最大个数,一般不超过20),OXFF 表示自定义分辨率(ROI) + ("acDescription", c_char * 32), # 该分辨率的描述信息。仅预设分辨率时该信息有效。自定义分辨率可忽略该信息 + ("uBinSumMode", c_uint), # BIN(求和)的模式,范围不能超过tSdkResolutionRange中uBinSumModeMask + ("uBinAverageMode", c_uint), # BIN(求均值)的模式,范围不能超过tSdkResolutionRange中uBinAverageModeMask + ("uSkipMode", c_uint), # 是否SKIP的尺寸,为0表示禁止SKIP模式,范围不能超过tSdkResolutionRange中uSkipModeMask + ("uResampleMask", c_uint), # 硬件重采样的掩码 + ("iHOffsetFOV", c_int), # 采集视场相对于Sensor最大视场左上角的垂直偏移 + ("iVOffsetFOV", c_int), # 采集视场相对于Sensor最大视场左上角的水平偏移 + ("iWidthFOV", c_int), # 采集视场的宽度 + ("iHeightFOV", c_int), # 采集视场的高度 + ("iWidth", c_int), # 相机最终输出的图像的宽度 + ("iHeight", c_int), # 相机最终输出的图像的高度 + ("iWidthZoomHd", c_int), # 硬件缩放的宽度,不需要进行此操作的分辨率,此变量设置为0. + ("iHeightZoomHd", c_int), # 硬件缩放的高度,不需要进行此操作的分辨率,此变量设置为0. + ("iWidthZoomSw", c_int), # 软件缩放的宽度,不需要进行此操作的分辨率,此变量设置为0. + ("iHeightZoomSw", c_int), # 软件缩放的高度,不需要进行此操作的分辨率,此变量设置为0. + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#相机白平衡模式描述信息 +class tSdkColorTemperatureDes(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 模式索引号 + ("acDescription", c_char * 32), # 描述信息 + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#相机帧率描述信息 +class tSdkFrameSpeed(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 帧率索引号,一般0对应于低速模式,1对应于普通模式,2对应于高速模式 + ("acDescription", c_char * 32), # 描述信息 + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#相机曝光功能范围定义 +class tSdkExpose(MvStructure): + _fields_ = [ + ("uiTargetMin", c_uint), #自动曝光亮度目标最小值 + ("uiTargetMax", c_uint), #自动曝光亮度目标最大值 + ("uiAnalogGainMin", c_uint), #模拟增益的最小值,单位为fAnalogGainStep中定义 + ("uiAnalogGainMax", c_uint), #模拟增益的最大值,单位为fAnalogGainStep中定义 + ("fAnalogGainStep", c_float), #模拟增益每增加1,对应的增加的放大倍数。例如,uiAnalogGainMin一般为16,fAnalogGainStep一般为0.125,那么最小放大倍数就是16*0.125 = 2倍 + ("uiExposeTimeMin", c_uint), #手动模式下,曝光时间的最小值,单位:行。根据CameraGetExposureLineTime可以获得一行对应的时间(微秒),从而得到整帧的曝光时间 + ("uiExposeTimeMax", c_uint), #手动模式下,曝光时间的最大值,单位:行 + ] + +#触发模式描述 +class tSdkTrigger(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 模式索引号 + ("acDescription", c_char * 32), # 描述信息 + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#传输分包大小描述(主要是针对网络相机有效) +class tSdkPackLength(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 模式索引号 + ("acDescription", c_char * 32), # 描述信息 + ("iPackSize", c_uint), + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#预设的LUT表描述 +class tSdkPresetLut(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 编号 + ("acDescription", c_char * 32), # 描述信息 + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#AE算法描述 +class tSdkAeAlgorithm(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 编号 + ("acDescription", c_char * 32), # 描述信息 + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#RAW转RGB算法描述 +class tSdkBayerDecodeAlgorithm(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 编号 + ("acDescription", c_char * 32), # 描述信息 + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#帧率统计信息 +class tSdkFrameStatistic(MvStructure): + _fields_ = [ + ("iTotal", c_int), #当前采集的总帧数(包括错误帧) + ("iCapture", c_int), #当前采集的有效帧的数量 + ("iLost", c_int), #当前丢帧的数量 + ] + +#相机输出的图像数据格式 +class tSdkMediaType(MvStructure): + _fields_ = [ + ("iIndex", c_int), # 格式种类编号 + ("acDescription", c_char * 32), # 描述信息 + ("iMediaType", c_uint), # 对应的图像格式编码,如CAMERA_MEDIA_TYPE_BAYGR8。 + ] + + def GetDescription(self): + return _string_buffer_to_str(self.acDescription) + +#伽马的设定范围 +class tGammaRange(MvStructure): + _fields_ = [ + ("iMin", c_int), #最小值 + ("iMax", c_int), #最大值 + ] + +#对比度的设定范围 +class tContrastRange(MvStructure): + _fields_ = [ + ("iMin", c_int), #最小值 + ("iMax", c_int), #最大值 + ] + +#RGB三通道数字增益的设定范围 +class tRgbGainRange(MvStructure): + _fields_ = [ + ("iRGainMin", c_int), #红色增益的最小值 + ("iRGainMax", c_int), #红色增益的最大值 + ("iGGainMin", c_int), #绿色增益的最小值 + ("iGGainMax", c_int), #绿色增益的最大值 + ("iBGainMin", c_int), #蓝色增益的最小值 + ("iBGainMax", c_int), #蓝色增益的最大值 + ] + +#饱和度设定的范围 +class tSaturationRange(MvStructure): + _fields_ = [ + ("iMin", c_int), #最小值 + ("iMax", c_int), #最大值 + ] + +#锐化的设定范围 +class tSharpnessRange(MvStructure): + _fields_ = [ + ("iMin", c_int), #最小值 + ("iMax", c_int), #最大值 + ] + +#ISP模块的使能信息 +class tSdkIspCapacity(MvStructure): + _fields_ = [ + ("bMonoSensor", c_int), #表示该型号相机是否为黑白相机,如果是黑白相机,则颜色相关的功能都无法调节 + ("bWbOnce", c_int), #表示该型号相机是否支持手动白平衡功能 + ("bAutoWb", c_int), #表示该型号相机是否支持自动白平衡功能 + ("bAutoExposure", c_int), #表示该型号相机是否支持自动曝光功能 + ("bManualExposure", c_int), #表示该型号相机是否支持手动曝光功能 + ("bAntiFlick", c_int), #表示该型号相机是否支持抗频闪功能 + ("bDeviceIsp", c_int), #表示该型号相机是否支持硬件ISP功能 + ("bForceUseDeviceIsp", c_int), #bDeviceIsp和bForceUseDeviceIsp同时为TRUE时,表示强制只用硬件ISP,不可取消。 + ("bZoomHD", c_int), #相机硬件是否支持图像缩放输出(只能是缩小)。 + ] + +# 定义整合的设备描述信息,这些信息可以用于动态构建UI +class tSdkCameraCapbility(MvStructure): + _fields_ = [ + ("pTriggerDesc", POINTER(tSdkTrigger)), + ("iTriggerDesc", c_int), #触发模式的个数,即pTriggerDesc数组的大小 + ("pImageSizeDesc", POINTER(tSdkImageResolution)), + ("iImageSizeDesc", c_int), #预设分辨率的个数,即pImageSizeDesc数组的大小 + ("pClrTempDesc", POINTER(tSdkColorTemperatureDes)), + ("iClrTempDesc", c_int), #预设色温个数 + ("pMediaTypeDesc", POINTER(tSdkMediaType)), + ("iMediaTypeDesc", c_int), #相机输出图像格式的种类个数,即pMediaTypeDesc数组的大小。 + ("pFrameSpeedDesc", POINTER(tSdkFrameSpeed)), #可调节帧速类型,对应界面上普通 高速 和超级三种速度设置 + ("iFrameSpeedDesc", c_int), #可调节帧速类型的个数,即pFrameSpeedDesc数组的大小。 + ("pPackLenDesc", POINTER(tSdkPackLength)), #传输包长度,一般用于网络设备 + ("iPackLenDesc", c_int), #可供选择的传输分包长度的个数,即pPackLenDesc数组的大小。 + ("iOutputIoCounts", c_int), #可编程输出IO的个数 + ("iInputIoCounts", c_int), #可编程输入IO的个数 + ("pPresetLutDesc", POINTER(tSdkPresetLut)), #相机预设的LUT表 + ("iPresetLut", c_int), #相机预设的LUT表的个数,即pPresetLutDesc数组的大小 + ("iUserDataMaxLen", c_int), #指示该相机中用于保存用户数据区的最大长度。为0表示无。 + ("bParamInDevice", c_int), #指示该设备是否支持从设备中读写参数组。1为支持,0不支持。 + ("pAeAlmSwDesc", POINTER(tSdkAeAlgorithm)),#软件自动曝光算法描述 + ("iAeAlmSwDesc", c_int), #软件自动曝光算法个数 + ("pAeAlmHdDesc", POINTER(tSdkAeAlgorithm)),#硬件自动曝光算法描述,为NULL表示不支持硬件自动曝光 + ("iAeAlmHdDesc", c_int), #硬件自动曝光算法个数,为0表示不支持硬件自动曝光 + ("pBayerDecAlmSwDesc", POINTER(tSdkBayerDecodeAlgorithm)),#软件Bayer转换为RGB数据的算法描述 + ("iBayerDecAlmSwDesc", c_int), #软件Bayer转换为RGB数据的算法个数 + ("pBayerDecAlmHdDesc", POINTER(tSdkBayerDecodeAlgorithm)),#硬件Bayer转换为RGB数据的算法描述,为NULL表示不支持 + ("iBayerDecAlmHdDesc", c_int), #硬件Bayer转换为RGB数据的算法个数,为0表示不支持 + + # 图像参数的调节范围定义,用于动态构建UI + ("sExposeDesc", tSdkExpose), #曝光的范围值 + ("sResolutionRange", tSdkResolutionRange), #分辨率范围描述 + ("sRgbGainRange", tRgbGainRange), #图像数字增益范围描述 + ("sSaturationRange", tSaturationRange), #饱和度范围描述 + ("sGammaRange", tGammaRange), #伽马范围描述 + ("sContrastRange", tContrastRange), #对比度范围描述 + ("sSharpnessRange", tSharpnessRange), #锐化范围描述 + ("sIspCapacity", tSdkIspCapacity), #ISP能力描述 + ] + +#图像帧头信息 +class tSdkFrameHead(MvStructure): + _fields_ = [ + ("uiMediaType", c_uint), # 图像格式,Image Format + ("uBytes", c_uint), # 图像数据字节数,Total bytes + ("iWidth", c_int), # 宽度 Image height + ("iHeight", c_int), # 高度 Image width + ("iWidthZoomSw", c_int), # 软件缩放的宽度,不需要进行软件裁剪的图像,此变量设置为0. + ("iHeightZoomSw", c_int), # 软件缩放的高度,不需要进行软件裁剪的图像,此变量设置为0. + ("bIsTrigger", c_int), # 指示是否为触发帧 is trigger + ("uiTimeStamp", c_uint), # 该帧的采集时间,单位0.1毫秒 + ("uiExpTime", c_uint), # 当前图像的曝光值,单位为微秒us + ("fAnalogGain", c_float), # 当前图像的模拟增益倍数 + ("iGamma", c_int), # 该帧图像的伽马设定值,仅当LUT模式为动态参数生成时有效,其余模式下为-1 + ("iContrast", c_int), # 该帧图像的对比度设定值,仅当LUT模式为动态参数生成时有效,其余模式下为-1 + ("iSaturation", c_int), # 该帧图像的饱和度设定值,对于黑白相机无意义,为0 + ("fRgain", c_float), # 该帧图像处理的红色数字增益倍数,对于黑白相机无意义,为1 + ("fGgain", c_float), # 该帧图像处理的绿色数字增益倍数,对于黑白相机无意义,为1 + ("fBgain", c_float), # 该帧图像处理的蓝色数字增益倍数,对于黑白相机无意义,为1 + ] + +# Grabber统计信息 +class tSdkGrabberStat(MvStructure): + _fields_ = [ + ("Width", c_int), # 帧图像大小 + ("Height", c_int), # 帧图像大小 + ("Disp", c_int), # 显示帧数量 + ("Capture", c_int), # 采集的有效帧的数量 + ("Lost", c_int), # 丢帧的数量 + ("Error", c_int), # 错帧的数量 + ("DispFps", c_float), # 显示帧率 + ("CapFps", c_float), # 捕获帧率 + ] + +# 方法回调辅助类 +class method(object): + def __init__(self, FuncType): + super(method, self).__init__() + self.FuncType = FuncType + self.cache = {} + + def __call__(self, cb): + self.cb = cb + return self + + def __get__(self, obj, objtype): + try: + return self.cache[obj] + except KeyError as e: + def cl(*args): + return self.cb(obj, *args) + r = self.cache[obj] = self.FuncType(cl) + return r + +# 图像捕获的回调函数定义 +CAMERA_SNAP_PROC = CALLBACK_FUNC_TYPE(None, c_int, c_void_p, POINTER(tSdkFrameHead), c_void_p) + +# 相机连接状态回调 +CAMERA_CONNECTION_STATUS_CALLBACK = CALLBACK_FUNC_TYPE(None, c_int, c_uint, c_uint, c_void_p) + +# 异步抓图完成回调 +pfnCameraGrabberSaveImageComplete = CALLBACK_FUNC_TYPE(None, c_void_p, c_void_p, c_int, c_void_p) + +# 帧监听回调 +pfnCameraGrabberFrameListener = CALLBACK_FUNC_TYPE(c_int, c_void_p, c_int, c_void_p, POINTER(tSdkFrameHead), c_void_p) + +# 采集器图像捕获的回调 +pfnCameraGrabberFrameCallback = CALLBACK_FUNC_TYPE(None, c_void_p, c_void_p, POINTER(tSdkFrameHead), c_void_p) + +#-----------------------------------函数接口------------------------------------------ + +# 线程局部存储 +_tls = local() + +# 存储最后一次SDK调用返回的错误码 +def GetLastError(): + try: + return _tls.last_error + except AttributeError as e: + _tls.last_error = 0 + return 0 + +def SetLastError(err_code): + _tls.last_error = err_code + +def _string_buffer_to_str(buf): + s = buf if isinstance(buf, type(b'')) else buf.value + + for codec in ('gbk', 'utf-8'): + try: + s = s.decode(codec) + break + except UnicodeDecodeError as e: + continue + + if isinstance(s, str): + return s + else: + return s.encode('utf-8') + +def _str_to_string_buffer(str): + if type(str) is type(u''): + s = str.encode('gbk') + else: + s = str.decode('utf-8').encode('gbk') + return create_string_buffer(s) + +def CameraSdkInit(iLanguageSel): + err_code = _sdk.CameraSdkInit(iLanguageSel) + SetLastError(err_code) + return err_code + +def CameraEnumerateDevice(MaxCount = 32): + Nums = c_int(MaxCount) + pCameraList = (tSdkCameraDevInfo * Nums.value)() + err_code = _sdk.CameraEnumerateDevice(pCameraList, byref(Nums)) + SetLastError(err_code) + return pCameraList[0:Nums.value] + +def CameraEnumerateDeviceEx(): + return _sdk.CameraEnumerateDeviceEx() + +def CameraIsOpened(pCameraInfo): + pOpened = c_int() + err_code = _sdk.CameraIsOpened(pCameraInfo, byref(pOpened) ) + SetLastError(err_code) + return pOpened.value != 0 + +def CameraInit(pCameraInfo, emParamLoadMode = -1, emTeam = -1): + pCameraHandle = c_int() + err_code = _sdk.CameraInit(byref(pCameraInfo), emParamLoadMode, emTeam, byref(pCameraHandle)) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return pCameraHandle.value + +def CameraInitEx(iDeviceIndex, emParamLoadMode = -1, emTeam = -1): + pCameraHandle = c_int() + err_code = _sdk.CameraInitEx(iDeviceIndex, emParamLoadMode, emTeam, byref(pCameraHandle)) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return pCameraHandle.value + +def CameraInitEx2(CameraName): + pCameraHandle = c_int() + err_code = _sdk.CameraInitEx2(_str_to_string_buffer(CameraName), byref(pCameraHandle)) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return pCameraHandle.value + +def CameraSetCallbackFunction(hCamera, pCallBack, pContext = 0): + err_code = _sdk.CameraSetCallbackFunction(hCamera, pCallBack, c_void_p(pContext), None) + SetLastError(err_code) + return err_code + +def CameraUnInit(hCamera): + err_code = _sdk.CameraUnInit(hCamera) + SetLastError(err_code) + return err_code + +def CameraGetInformation(hCamera): + pbuffer = c_char_p() + err_code = _sdk.CameraGetInformation(hCamera, byref(pbuffer) ) + SetLastError(err_code) + if err_code == 0 and pbuffer.value is not None: + return _string_buffer_to_str(pbuffer) + return '' + +def CameraImageProcess(hCamera, pbyIn, pbyOut, pFrInfo): + err_code = _sdk.CameraImageProcess(hCamera, c_void_p(pbyIn), c_void_p(pbyOut), byref(pFrInfo)) + SetLastError(err_code) + return err_code + +def CameraImageProcessEx(hCamera, pbyIn, pbyOut, pFrInfo, uOutFormat, uReserved): + err_code = _sdk.CameraImageProcessEx(hCamera, c_void_p(pbyIn), c_void_p(pbyOut), byref(pFrInfo), uOutFormat, uReserved) + SetLastError(err_code) + return err_code + +def CameraDisplayInit(hCamera, hWndDisplay): + err_code = _sdk.CameraDisplayInit(hCamera, hWndDisplay) + SetLastError(err_code) + return err_code + +def CameraDisplayRGB24(hCamera, pFrameBuffer, pFrInfo): + err_code = _sdk.CameraDisplayRGB24(hCamera, c_void_p(pFrameBuffer), byref(pFrInfo) ) + SetLastError(err_code) + return err_code + +def CameraSetDisplayMode(hCamera, iMode): + err_code = _sdk.CameraSetDisplayMode(hCamera, iMode) + SetLastError(err_code) + return err_code + +def CameraSetDisplayOffset(hCamera, iOffsetX, iOffsetY): + err_code = _sdk.CameraSetDisplayOffset(hCamera, iOffsetX, iOffsetY) + SetLastError(err_code) + return err_code + +def CameraSetDisplaySize(hCamera, iWidth, iHeight): + err_code = _sdk.CameraSetDisplaySize(hCamera, iWidth, iHeight) + SetLastError(err_code) + return err_code + +def CameraGetImageBuffer(hCamera, wTimes): + pbyBuffer = c_void_p() + pFrameInfo = tSdkFrameHead() + err_code = _sdk.CameraGetImageBuffer(hCamera, byref(pFrameInfo), byref(pbyBuffer), wTimes) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return (pbyBuffer.value, pFrameInfo) + +def CameraGetImageBufferEx(hCamera, wTimes): + _sdk.CameraGetImageBufferEx.restype = c_void_p + piWidth = c_int() + piHeight = c_int() + pFrameBuffer = _sdk.CameraGetImageBufferEx(hCamera, byref(piWidth), byref(piHeight), wTimes) + err_code = CAMERA_STATUS_SUCCESS if pFrameBuffer else CAMERA_STATUS_TIME_OUT + SetLastError(err_code) + if pFrameBuffer: + return (pFrameBuffer, piWidth.value, piHeight.value) + else: + raise CameraException(err_code) + +def CameraSnapToBuffer(hCamera, wTimes): + pbyBuffer = c_void_p() + pFrameInfo = tSdkFrameHead() + err_code = _sdk.CameraSnapToBuffer(hCamera, byref(pFrameInfo), byref(pbyBuffer), wTimes) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return (pbyBuffer.value, pFrameInfo) + +def CameraReleaseImageBuffer(hCamera, pbyBuffer): + err_code = _sdk.CameraReleaseImageBuffer(hCamera, c_void_p(pbyBuffer) ) + SetLastError(err_code) + return err_code + +def CameraPlay(hCamera): + err_code = _sdk.CameraPlay(hCamera) + SetLastError(err_code) + return err_code + +def CameraPause(hCamera): + err_code = _sdk.CameraPause(hCamera) + SetLastError(err_code) + return err_code + +def CameraStop(hCamera): + err_code = _sdk.CameraStop(hCamera) + SetLastError(err_code) + return err_code + +def CameraInitRecord(hCamera, iFormat, pcSavePath, b2GLimit, dwQuality, iFrameRate): + err_code = _sdk.CameraInitRecord(hCamera, iFormat, _str_to_string_buffer(pcSavePath), b2GLimit, dwQuality, iFrameRate) + SetLastError(err_code) + return err_code + +def CameraStopRecord(hCamera): + err_code = _sdk.CameraStopRecord(hCamera) + SetLastError(err_code) + return err_code + +def CameraPushFrame(hCamera, pbyImageBuffer, pFrInfo): + err_code = _sdk.CameraPushFrame(hCamera, c_void_p(pbyImageBuffer), byref(pFrInfo) ) + SetLastError(err_code) + return err_code + +def CameraSaveImage(hCamera, lpszFileName, pbyImageBuffer, pFrInfo, byFileType, byQuality): + err_code = _sdk.CameraSaveImage(hCamera, _str_to_string_buffer(lpszFileName), c_void_p(pbyImageBuffer), byref(pFrInfo), byFileType, byQuality) + SetLastError(err_code) + return err_code + +def CameraSaveImageEx(hCamera, lpszFileName, pbyImageBuffer, uImageFormat, iWidth, iHeight, byFileType, byQuality): + err_code = _sdk.CameraSaveImageEx(hCamera, _str_to_string_buffer(lpszFileName), c_void_p(pbyImageBuffer), uImageFormat, iWidth, iHeight, byFileType, byQuality) + SetLastError(err_code) + return err_code + +def CameraGetImageResolution(hCamera): + psCurVideoSize = tSdkImageResolution() + err_code = _sdk.CameraGetImageResolution(hCamera, byref(psCurVideoSize) ) + SetLastError(err_code) + return psCurVideoSize + +def CameraSetImageResolution(hCamera, pImageResolution): + err_code = _sdk.CameraSetImageResolution(hCamera, byref(pImageResolution) ) + SetLastError(err_code) + return err_code + +def CameraSetImageResolutionEx(hCamera, iIndex, Mode, ModeSize, x, y, width, height, ZoomWidth, ZoomHeight): + err_code = _sdk.CameraSetImageResolutionEx(hCamera, iIndex, Mode, ModeSize, x, y, width, height, ZoomWidth, ZoomHeight) + SetLastError(err_code) + return err_code + +def CameraGetMediaType(hCamera): + piMediaType = c_int() + err_code = _sdk.CameraGetMediaType(hCamera, byref(piMediaType) ) + SetLastError(err_code) + return piMediaType.value + +def CameraSetMediaType(hCamera, iMediaType): + err_code = _sdk.CameraSetMediaType(hCamera, iMediaType) + SetLastError(err_code) + return err_code + +def CameraSetAeState(hCamera, bAeState): + err_code = _sdk.CameraSetAeState(hCamera, bAeState) + SetLastError(err_code) + return err_code + +def CameraGetAeState(hCamera): + pAeState = c_int() + err_code = _sdk.CameraGetAeState(hCamera, byref(pAeState) ) + SetLastError(err_code) + return pAeState.value + +def CameraSetSharpness(hCamera, iSharpness): + err_code = _sdk.CameraSetSharpness(hCamera, iSharpness) + SetLastError(err_code) + return err_code + +def CameraGetSharpness(hCamera): + piSharpness = c_int() + err_code = _sdk.CameraGetSharpness(hCamera, byref(piSharpness) ) + SetLastError(err_code) + return piSharpness.value + +def CameraSetLutMode(hCamera, emLutMode): + err_code = _sdk.CameraSetLutMode(hCamera, emLutMode) + SetLastError(err_code) + return err_code + +def CameraGetLutMode(hCamera): + pemLutMode = c_int() + err_code = _sdk.CameraGetLutMode(hCamera, byref(pemLutMode) ) + SetLastError(err_code) + return pemLutMode.value + +def CameraSelectLutPreset(hCamera, iSel): + err_code = _sdk.CameraSelectLutPreset(hCamera, iSel) + SetLastError(err_code) + return err_code + +def CameraGetLutPresetSel(hCamera): + piSel = c_int() + err_code = _sdk.CameraGetLutPresetSel(hCamera, byref(piSel) ) + SetLastError(err_code) + return piSel.value + +def CameraSetCustomLut(hCamera, iChannel, pLut): + pLutNative = (c_ushort * 4096)(*pLut) + err_code = _sdk.CameraSetCustomLut(hCamera, iChannel, pLutNative) + SetLastError(err_code) + return err_code + +def CameraGetCustomLut(hCamera, iChannel): + pLutNative = (c_ushort * 4096)() + err_code = _sdk.CameraGetCustomLut(hCamera, iChannel, pLutNative) + SetLastError(err_code) + return pLutNative[:] + +def CameraGetCurrentLut(hCamera, iChannel): + pLutNative = (c_ushort * 4096)() + err_code = _sdk.CameraGetCurrentLut(hCamera, iChannel, pLutNative) + SetLastError(err_code) + return pLutNative[:] + +def CameraSetWbMode(hCamera, bAuto): + err_code = _sdk.CameraSetWbMode(hCamera, bAuto) + SetLastError(err_code) + return err_code + +def CameraGetWbMode(hCamera): + pbAuto = c_int() + err_code = _sdk.CameraGetWbMode(hCamera, byref(pbAuto) ) + SetLastError(err_code) + return pbAuto.value + +def CameraSetPresetClrTemp(hCamera, iSel): + err_code = _sdk.CameraSetPresetClrTemp(hCamera, iSel) + SetLastError(err_code) + return err_code + +def CameraGetPresetClrTemp(hCamera): + piSel = c_int() + err_code = _sdk.CameraGetPresetClrTemp(hCamera, byref(piSel) ) + SetLastError(err_code) + return piSel.value + +def CameraSetUserClrTempGain(hCamera, iRgain, iGgain, iBgain): + err_code = _sdk.CameraSetUserClrTempGain(hCamera, iRgain, iGgain, iBgain) + SetLastError(err_code) + return err_code + +def CameraGetUserClrTempGain(hCamera): + piRgain = c_int() + piGgain = c_int() + piBgain = c_int() + err_code = _sdk.CameraGetUserClrTempGain(hCamera, byref(piRgain), byref(piGgain), byref(piBgain) ) + SetLastError(err_code) + return (piRgain.value, piGgain.value, piBgain.value) + +def CameraSetUserClrTempMatrix(hCamera, pMatrix): + pMatrixNative = (c_float * 9)(*pMatrix) + err_code = _sdk.CameraSetUserClrTempMatrix(hCamera, pMatrixNative) + SetLastError(err_code) + return err_code + +def CameraGetUserClrTempMatrix(hCamera): + pMatrixNative = (c_float * 9)() + err_code = _sdk.CameraGetUserClrTempMatrix(hCamera, pMatrixNative) + SetLastError(err_code) + return pMatrixNative[:] + +def CameraSetClrTempMode(hCamera, iMode): + err_code = _sdk.CameraSetClrTempMode(hCamera, iMode) + SetLastError(err_code) + return err_code + +def CameraGetClrTempMode(hCamera): + piMode = c_int() + err_code = _sdk.CameraGetClrTempMode(hCamera, byref(piMode) ) + SetLastError(err_code) + return piMode.value + +def CameraSetOnceWB(hCamera): + err_code = _sdk.CameraSetOnceWB(hCamera) + SetLastError(err_code) + return err_code + +def CameraSetOnceBB(hCamera): + err_code = _sdk.CameraSetOnceBB(hCamera) + SetLastError(err_code) + return err_code + +def CameraSetAeTarget(hCamera, iAeTarget): + err_code = _sdk.CameraSetAeTarget(hCamera, iAeTarget) + SetLastError(err_code) + return err_code + +def CameraGetAeTarget(hCamera): + piAeTarget = c_int() + err_code = _sdk.CameraGetAeTarget(hCamera, byref(piAeTarget) ) + SetLastError(err_code) + return piAeTarget.value + +def CameraSetAeExposureRange(hCamera, fMinExposureTime, fMaxExposureTime): + err_code = _sdk.CameraSetAeExposureRange(hCamera, c_double(fMinExposureTime), c_double(fMaxExposureTime) ) + SetLastError(err_code) + return err_code + +def CameraGetAeExposureRange(hCamera): + fMinExposureTime = c_double() + fMaxExposureTime = c_double() + err_code = _sdk.CameraGetAeExposureRange(hCamera, byref(fMinExposureTime), byref(fMaxExposureTime) ) + SetLastError(err_code) + return (fMinExposureTime.value, fMaxExposureTime.value) + +def CameraSetAeAnalogGainRange(hCamera, iMinAnalogGain, iMaxAnalogGain): + err_code = _sdk.CameraSetAeAnalogGainRange(hCamera, iMinAnalogGain, iMaxAnalogGain) + SetLastError(err_code) + return err_code + +def CameraGetAeAnalogGainRange(hCamera): + iMinAnalogGain = c_int() + iMaxAnalogGain = c_int() + err_code = _sdk.CameraGetAeAnalogGainRange(hCamera, byref(iMinAnalogGain), byref(iMaxAnalogGain) ) + SetLastError(err_code) + return (iMinAnalogGain.value, iMaxAnalogGain.value) + +def CameraSetAeThreshold(hCamera, iThreshold): + err_code = _sdk.CameraSetAeThreshold(hCamera, iThreshold) + SetLastError(err_code) + return err_code + +def CameraGetAeThreshold(hCamera): + iThreshold = c_int() + err_code = _sdk.CameraGetAeThreshold(hCamera, byref(iThreshold)) + SetLastError(err_code) + return iThreshold.value + +def CameraSetExposureTime(hCamera, fExposureTime): + err_code = _sdk.CameraSetExposureTime(hCamera, c_double(fExposureTime) ) + SetLastError(err_code) + return err_code + +def CameraGetExposureLineTime(hCamera): + pfLineTime = c_double() + err_code = _sdk.CameraGetExposureLineTime(hCamera, byref(pfLineTime)) + SetLastError(err_code) + return pfLineTime.value + +def CameraGetExposureTime(hCamera): + pfExposureTime = c_double() + err_code = _sdk.CameraGetExposureTime(hCamera, byref(pfExposureTime)) + SetLastError(err_code) + return pfExposureTime.value + +def CameraGetExposureTimeRange(hCamera): + pfMin = c_double() + pfMax = c_double() + pfStep = c_double() + err_code = _sdk.CameraGetExposureTimeRange(hCamera, byref(pfMin), byref(pfMax), byref(pfStep)) + SetLastError(err_code) + return (pfMin.value, pfMax.value, pfStep.value) + +def CameraSetAnalogGain(hCamera, iAnalogGain): + err_code = _sdk.CameraSetAnalogGain(hCamera, iAnalogGain) + SetLastError(err_code) + return err_code + +def CameraGetAnalogGain(hCamera): + piAnalogGain = c_int() + err_code = _sdk.CameraGetAnalogGain(hCamera, byref(piAnalogGain)) + SetLastError(err_code) + return piAnalogGain.value + +def CameraSetGain(hCamera, iRGain, iGGain, iBGain): + err_code = _sdk.CameraSetGain(hCamera, iRGain, iGGain, iBGain) + SetLastError(err_code) + return err_code + +def CameraGetGain(hCamera): + piRGain = c_int() + piGGain = c_int() + piBGain = c_int() + err_code = _sdk.CameraGetGain(hCamera, byref(piRGain), byref(piGGain), byref(piBGain)) + SetLastError(err_code) + return (piRGain.value, piGGain.value, piBGain.value) + +def CameraSetGamma(hCamera, iGamma): + err_code = _sdk.CameraSetGamma(hCamera, iGamma) + SetLastError(err_code) + return err_code + +def CameraGetGamma(hCamera): + piGamma = c_int() + err_code = _sdk.CameraGetGamma(hCamera, byref(piGamma)) + SetLastError(err_code) + return piGamma.value + +def CameraSetContrast(hCamera, iContrast): + err_code = _sdk.CameraSetContrast(hCamera, iContrast) + SetLastError(err_code) + return err_code + +def CameraGetContrast(hCamera): + piContrast = c_int() + err_code = _sdk.CameraGetContrast(hCamera, byref(piContrast)) + SetLastError(err_code) + return piContrast.value + +def CameraSetSaturation(hCamera, iSaturation): + err_code = _sdk.CameraSetSaturation(hCamera, iSaturation) + SetLastError(err_code) + return err_code + +def CameraGetSaturation(hCamera): + piSaturation = c_int() + err_code = _sdk.CameraGetSaturation(hCamera, byref(piSaturation)) + SetLastError(err_code) + return piSaturation.value + +def CameraSetMonochrome(hCamera, bEnable): + err_code = _sdk.CameraSetMonochrome(hCamera, bEnable) + SetLastError(err_code) + return err_code + +def CameraGetMonochrome(hCamera): + pbEnable = c_int() + err_code = _sdk.CameraGetMonochrome(hCamera, byref(pbEnable)) + SetLastError(err_code) + return pbEnable.value + +def CameraSetInverse(hCamera, bEnable): + err_code = _sdk.CameraSetInverse(hCamera, bEnable) + SetLastError(err_code) + return err_code + +def CameraGetInverse(hCamera): + pbEnable = c_int() + err_code = _sdk.CameraGetInverse(hCamera, byref(pbEnable)) + SetLastError(err_code) + return pbEnable.value + +def CameraSetAntiFlick(hCamera, bEnable): + err_code = _sdk.CameraSetAntiFlick(hCamera, bEnable) + SetLastError(err_code) + return err_code + +def CameraGetAntiFlick(hCamera): + pbEnable = c_int() + err_code = _sdk.CameraGetAntiFlick(hCamera, byref(pbEnable)) + SetLastError(err_code) + return pbEnable.value + +def CameraGetLightFrequency(hCamera): + piFrequencySel = c_int() + err_code = _sdk.CameraGetLightFrequency(hCamera, byref(piFrequencySel)) + SetLastError(err_code) + return piFrequencySel.value + +def CameraSetLightFrequency(hCamera, iFrequencySel): + err_code = _sdk.CameraSetLightFrequency(hCamera, iFrequencySel) + SetLastError(err_code) + return err_code + +def CameraSetFrameSpeed(hCamera, iFrameSpeed): + err_code = _sdk.CameraSetFrameSpeed(hCamera, iFrameSpeed) + SetLastError(err_code) + return err_code + +def CameraGetFrameSpeed(hCamera): + piFrameSpeed = c_int() + err_code = _sdk.CameraGetFrameSpeed(hCamera, byref(piFrameSpeed)) + SetLastError(err_code) + return piFrameSpeed.value + +def CameraSetParameterMode(hCamera, iMode): + err_code = _sdk.CameraSetParameterMode(hCamera, iMode) + SetLastError(err_code) + return err_code + +def CameraGetParameterMode(hCamera): + piTarget = c_int() + err_code = _sdk.CameraGetParameterMode(hCamera, byref(piTarget)) + SetLastError(err_code) + return piTarget.value + +def CameraSetParameterMask(hCamera, uMask): + err_code = _sdk.CameraSetParameterMask(hCamera, uMask) + SetLastError(err_code) + return err_code + +def CameraSaveParameter(hCamera, iTeam): + err_code = _sdk.CameraSaveParameter(hCamera, iTeam) + SetLastError(err_code) + return err_code + +def CameraSaveParameterToFile(hCamera, sFileName): + err_code = _sdk.CameraSaveParameterToFile(hCamera, _str_to_string_buffer(sFileName)) + SetLastError(err_code) + return err_code + +def CameraReadParameterFromFile(hCamera, sFileName): + err_code = _sdk.CameraReadParameterFromFile(hCamera, _str_to_string_buffer(sFileName)) + SetLastError(err_code) + return err_code + +def CameraLoadParameter(hCamera, iTeam): + err_code = _sdk.CameraLoadParameter(hCamera, iTeam) + SetLastError(err_code) + return err_code + +def CameraGetCurrentParameterGroup(hCamera): + piTeam = c_int() + err_code = _sdk.CameraGetCurrentParameterGroup(hCamera, byref(piTeam)) + SetLastError(err_code) + return piTeam.value + +def CameraSetTransPackLen(hCamera, iPackSel): + err_code = _sdk.CameraSetTransPackLen(hCamera, iPackSel) + SetLastError(err_code) + return err_code + +def CameraGetTransPackLen(hCamera): + piPackSel = c_int() + err_code = _sdk.CameraGetTransPackLen(hCamera, byref(piPackSel)) + SetLastError(err_code) + return piPackSel.value + +def CameraIsAeWinVisible(hCamera): + pbIsVisible = c_int() + err_code = _sdk.CameraIsAeWinVisible(hCamera, byref(pbIsVisible)) + SetLastError(err_code) + return pbIsVisible.value + +def CameraSetAeWinVisible(hCamera, bIsVisible): + err_code = _sdk.CameraSetAeWinVisible(hCamera, bIsVisible) + SetLastError(err_code) + return err_code + +def CameraGetAeWindow(hCamera): + piHOff = c_int() + piVOff = c_int() + piWidth = c_int() + piHeight = c_int() + err_code = _sdk.CameraGetAeWindow(hCamera, byref(piHOff), byref(piVOff), byref(piWidth), byref(piHeight)) + SetLastError(err_code) + return (piHOff.value, piVOff.value, piWidth.value, piHeight.value) + +def CameraSetAeWindow(hCamera, iHOff, iVOff, iWidth, iHeight): + err_code = _sdk.CameraSetAeWindow(hCamera, iHOff, iVOff, iWidth, iHeight) + SetLastError(err_code) + return err_code + +def CameraSetMirror(hCamera, iDir, bEnable): + err_code = _sdk.CameraSetMirror(hCamera, iDir, bEnable) + SetLastError(err_code) + return err_code + +def CameraGetMirror(hCamera, iDir): + pbEnable = c_int() + err_code = _sdk.CameraGetMirror(hCamera, iDir, byref(pbEnable)) + SetLastError(err_code) + return pbEnable.value + +def CameraSetRotate(hCamera, iRot): + err_code = _sdk.CameraSetRotate(hCamera, iRot) + SetLastError(err_code) + return err_code + +def CameraGetRotate(hCamera): + iRot = c_int() + err_code = _sdk.CameraGetRotate(hCamera, byref(iRot)) + SetLastError(err_code) + return iRot.value + +def CameraGetWbWindow(hCamera): + PiHOff = c_int() + PiVOff = c_int() + PiWidth = c_int() + PiHeight = c_int() + err_code = _sdk.CameraGetWbWindow(hCamera, byref(PiHOff), byref(PiVOff), byref(PiWidth), byref(PiHeight)) + SetLastError(err_code) + return (PiHOff.value, PiVOff.value, PiWidth.value, PiHeight.value) + +def CameraSetWbWindow(hCamera, iHOff, iVOff, iWidth, iHeight): + err_code = _sdk.CameraSetWbWindow(hCamera, iHOff, iVOff, iWidth, iHeight) + SetLastError(err_code) + return err_code + +def CameraIsWbWinVisible(hCamera): + pbShow = c_int() + err_code = _sdk.CameraIsWbWinVisible(hCamera, byref(pbShow)) + SetLastError(err_code) + return pbShow.value + +def CameraSetWbWinVisible(hCamera, bShow): + err_code = _sdk.CameraSetWbWinVisible(hCamera, bShow) + SetLastError(err_code) + return err_code + +def CameraImageOverlay(hCamera, pRgbBuffer, pFrInfo): + err_code = _sdk.CameraImageOverlay(hCamera, c_void_p(pRgbBuffer), byref(pFrInfo)) + SetLastError(err_code) + return err_code + +def CameraSetCrossLine(hCamera, iLine, x, y, uColor, bVisible): + err_code = _sdk.CameraSetCrossLine(hCamera, iLine, x, y, uColor, bVisible) + SetLastError(err_code) + return err_code + +def CameraGetCrossLine(hCamera, iLine): + px = c_int() + py = c_int() + pcolor = c_uint() + pbVisible = c_int() + err_code = _sdk.CameraGetCrossLine(hCamera, iLine, byref(px), byref(py), byref(pcolor), byref(pbVisible)) + SetLastError(err_code) + return (px.value, py.value, pcolor.value, pbVisible.value) + +def CameraGetCapability(hCamera): + pCameraInfo = tSdkCameraCapbility() + err_code = _sdk.CameraGetCapability(hCamera, byref(pCameraInfo)) + SetLastError(err_code) + return pCameraInfo + +def CameraWriteSN(hCamera, pbySN, iLevel): + err_code = _sdk.CameraWriteSN(hCamera, _str_to_string_buffer(pbySN), iLevel) + SetLastError(err_code) + return err_code + +def CameraReadSN(hCamera, iLevel): + pbySN = create_string_buffer(64) + err_code = _sdk.CameraReadSN(hCamera, pbySN, iLevel) + SetLastError(err_code) + return _string_buffer_to_str(pbySN) + +def CameraSetTriggerDelayTime(hCamera, uDelayTimeUs): + err_code = _sdk.CameraSetTriggerDelayTime(hCamera, uDelayTimeUs) + SetLastError(err_code) + return err_code + +def CameraGetTriggerDelayTime(hCamera): + puDelayTimeUs = c_uint() + err_code = _sdk.CameraGetTriggerDelayTime(hCamera, byref(puDelayTimeUs)) + SetLastError(err_code) + return puDelayTimeUs.value + +def CameraSetTriggerCount(hCamera, iCount): + err_code = _sdk.CameraSetTriggerCount(hCamera, iCount) + SetLastError(err_code) + return err_code + +def CameraGetTriggerCount(hCamera): + piCount = c_int() + err_code = _sdk.CameraGetTriggerCount(hCamera, byref(piCount)) + SetLastError(err_code) + return piCount.value + +def CameraSoftTrigger(hCamera): + err_code = _sdk.CameraSoftTrigger(hCamera) + SetLastError(err_code) + return err_code + +def CameraSetTriggerMode(hCamera, iModeSel): + err_code = _sdk.CameraSetTriggerMode(hCamera, iModeSel) + SetLastError(err_code) + return err_code + +def CameraGetTriggerMode(hCamera): + piModeSel = c_int() + err_code = _sdk.CameraGetTriggerMode(hCamera, byref(piModeSel)) + SetLastError(err_code) + return piModeSel.value + +def CameraSetStrobeMode(hCamera, iMode): + err_code = _sdk.CameraSetStrobeMode(hCamera, iMode) + SetLastError(err_code) + return err_code + +def CameraGetStrobeMode(hCamera): + piMode = c_int() + err_code = _sdk.CameraGetStrobeMode(hCamera, byref(piMode)) + SetLastError(err_code) + return piMode.value + +def CameraSetStrobeDelayTime(hCamera, uDelayTimeUs): + err_code = _sdk.CameraSetStrobeDelayTime(hCamera, uDelayTimeUs) + SetLastError(err_code) + return err_code + +def CameraGetStrobeDelayTime(hCamera): + upDelayTimeUs = c_uint() + err_code = _sdk.CameraGetStrobeDelayTime(hCamera, byref(upDelayTimeUs)) + SetLastError(err_code) + return upDelayTimeUs.value + +def CameraSetStrobePulseWidth(hCamera, uTimeUs): + err_code = _sdk.CameraSetStrobePulseWidth(hCamera, uTimeUs) + SetLastError(err_code) + return err_code + +def CameraGetStrobePulseWidth(hCamera): + upTimeUs = c_uint() + err_code = _sdk.CameraGetStrobePulseWidth(hCamera, byref(upTimeUs)) + SetLastError(err_code) + return upTimeUs.value + +def CameraSetStrobePolarity(hCamera, uPolarity): + err_code = _sdk.CameraSetStrobePolarity(hCamera, uPolarity) + SetLastError(err_code) + return err_code + +def CameraGetStrobePolarity(hCamera): + upPolarity = c_uint() + err_code = _sdk.CameraGetStrobePolarity(hCamera, byref(upPolarity)) + SetLastError(err_code) + return upPolarity.value + +def CameraSetExtTrigSignalType(hCamera, iType): + err_code = _sdk.CameraSetExtTrigSignalType(hCamera, iType) + SetLastError(err_code) + return err_code + +def CameraGetExtTrigSignalType(hCamera): + ipType = c_int() + err_code = _sdk.CameraGetExtTrigSignalType(hCamera, byref(ipType)) + SetLastError(err_code) + return ipType.value + +def CameraSetExtTrigShutterType(hCamera, iType): + err_code = _sdk.CameraSetExtTrigShutterType(hCamera, iType) + SetLastError(err_code) + return err_code + +def CameraGetExtTrigShutterType(hCamera): + ipType = c_int() + err_code = _sdk.CameraGetExtTrigShutterType(hCamera, byref(ipType)) + SetLastError(err_code) + return ipType.value + +def CameraSetExtTrigDelayTime(hCamera, uDelayTimeUs): + err_code = _sdk.CameraSetExtTrigDelayTime(hCamera, uDelayTimeUs) + SetLastError(err_code) + return err_code + +def CameraGetExtTrigDelayTime(hCamera): + upDelayTimeUs = c_uint() + err_code = _sdk.CameraGetExtTrigDelayTime(hCamera, byref(upDelayTimeUs)) + SetLastError(err_code) + return upDelayTimeUs.value + +def CameraSetExtTrigJitterTime(hCamera, uTimeUs): + err_code = _sdk.CameraSetExtTrigJitterTime(hCamera, uTimeUs) + SetLastError(err_code) + return err_code + +def CameraGetExtTrigJitterTime(hCamera): + upTimeUs = c_uint() + err_code = _sdk.CameraGetExtTrigJitterTime(hCamera, byref(upTimeUs)) + SetLastError(err_code) + return upTimeUs.value + +def CameraGetExtTrigCapability(hCamera): + puCapabilityMask = c_uint() + err_code = _sdk.CameraGetExtTrigCapability(hCamera, byref(puCapabilityMask)) + SetLastError(err_code) + return puCapabilityMask.value + +def CameraPauseLevelTrigger(hCamera): + err_code = _sdk.CameraPauseLevelTrigger(hCamera) + SetLastError(err_code) + return err_code + +def CameraGetResolutionForSnap(hCamera): + pImageResolution = tSdkImageResolution() + err_code = _sdk.CameraGetResolutionForSnap(hCamera, byref(pImageResolution)) + SetLastError(err_code) + return pImageResolution + +def CameraSetResolutionForSnap(hCamera, pImageResolution): + err_code = _sdk.CameraSetResolutionForSnap(hCamera, byref(pImageResolution)) + SetLastError(err_code) + return err_code + +def CameraCustomizeResolution(hCamera): + pImageCustom = tSdkImageResolution() + err_code = _sdk.CameraCustomizeResolution(hCamera, byref(pImageCustom)) + SetLastError(err_code) + return pImageCustom + +def CameraCustomizeReferWin(hCamera, iWinType, hParent): + piHOff = c_int() + piVOff = c_int() + piWidth = c_int() + piHeight = c_int() + err_code = _sdk.CameraCustomizeReferWin(hCamera, iWinType, hParent, byref(piHOff), byref(piVOff), byref(piWidth), byref(piHeight)) + SetLastError(err_code) + return (piHOff.value, piVOff.value, piWidth.value, piHeight.value) + +def CameraShowSettingPage(hCamera, bShow): + err_code = _sdk.CameraShowSettingPage(hCamera, bShow) + SetLastError(err_code) + return err_code + +def CameraCreateSettingPage(hCamera, hParent, pWinText, pCallbackFunc = None, pCallbackCtx = 0, uReserved = 0): + err_code = _sdk.CameraCreateSettingPage(hCamera, hParent, _str_to_string_buffer(pWinText), pCallbackFunc, c_void_p(pCallbackCtx), uReserved) + SetLastError(err_code) + return err_code + +def CameraCreateSettingPageEx(hCamera): + err_code = _sdk.CameraCreateSettingPageEx(hCamera) + SetLastError(err_code) + return err_code + +def CameraSetActiveSettingSubPage(hCamera, index): + err_code = _sdk.CameraSetActiveSettingSubPage(hCamera, index) + SetLastError(err_code) + return err_code + +def CameraSetSettingPageParent(hCamera, hParentWnd, Flags): + err_code = _sdk.CameraSetSettingPageParent(hCamera, hParentWnd, Flags) + SetLastError(err_code) + return err_code + +def CameraGetSettingPageHWnd(hCamera): + hWnd = c_void_p() + err_code = _sdk.CameraGetSettingPageHWnd(hCamera, byref(hWnd)) + SetLastError(err_code) + return hWnd.value + +def CameraSpecialControl(hCamera, dwCtrlCode, dwParam, lpData): + err_code = _sdk.CameraSpecialControl(hCamera, dwCtrlCode, dwParam, c_void_p(lpData) ) + SetLastError(err_code) + return err_code + +def CameraGetFrameStatistic(hCamera): + psFrameStatistic = tSdkFrameStatistic() + err_code = _sdk.CameraGetFrameStatistic(hCamera, byref(psFrameStatistic)) + SetLastError(err_code) + return psFrameStatistic + +def CameraSetNoiseFilter(hCamera, bEnable): + err_code = _sdk.CameraSetNoiseFilter(hCamera, bEnable) + SetLastError(err_code) + return err_code + +def CameraGetNoiseFilterState(hCamera): + pEnable = c_int() + err_code = _sdk.CameraGetNoiseFilterState(hCamera, byref(pEnable)) + SetLastError(err_code) + return pEnable.value + +def CameraRstTimeStamp(hCamera): + err_code = _sdk.CameraRstTimeStamp(hCamera) + SetLastError(err_code) + return err_code + +def CameraSaveUserData(hCamera, uStartAddr, pbData): + err_code = _sdk.CameraSaveUserData(hCamera, uStartAddr, pbData, len(pbData)) + SetLastError(err_code) + return err_code + +def CameraLoadUserData(hCamera, uStartAddr, ilen): + pbData = create_string_buffer(ilen) + err_code = _sdk.CameraLoadUserData(hCamera, uStartAddr, pbData, ilen) + SetLastError(err_code) + return pbData[:] + +def CameraGetFriendlyName(hCamera): + pName = create_string_buffer(64) + err_code = _sdk.CameraGetFriendlyName(hCamera, pName) + SetLastError(err_code) + return _string_buffer_to_str(pName) + +def CameraSetFriendlyName(hCamera, pName): + pNameBuf = _str_to_string_buffer(pName) + resize(pNameBuf, 64) + err_code = _sdk.CameraSetFriendlyName(hCamera, pNameBuf) + SetLastError(err_code) + return err_code + +def CameraSdkGetVersionString(): + pVersionString = create_string_buffer(64) + err_code = _sdk.CameraSdkGetVersionString(pVersionString) + SetLastError(err_code) + return _string_buffer_to_str(pVersionString) + +def CameraCheckFwUpdate(hCamera): + pNeedUpdate = c_int() + err_code = _sdk.CameraCheckFwUpdate(hCamera, byref(pNeedUpdate)) + SetLastError(err_code) + return pNeedUpdate.value + +def CameraGetFirmwareVersion(hCamera): + pVersion = create_string_buffer(64) + err_code = _sdk.CameraGetFirmwareVersion(hCamera, pVersion) + SetLastError(err_code) + return _string_buffer_to_str(pVersion) + +def CameraGetEnumInfo(hCamera): + pCameraInfo = tSdkCameraDevInfo() + err_code = _sdk.CameraGetEnumInfo(hCamera, byref(pCameraInfo)) + SetLastError(err_code) + return pCameraInfo + +def CameraGetInerfaceVersion(hCamera): + pVersion = create_string_buffer(64) + err_code = _sdk.CameraGetInerfaceVersion(hCamera, pVersion) + SetLastError(err_code) + return _string_buffer_to_str(pVersion) + +def CameraSetIOState(hCamera, iOutputIOIndex, uState): + err_code = _sdk.CameraSetIOState(hCamera, iOutputIOIndex, uState) + SetLastError(err_code) + return err_code + +def CameraGetIOState(hCamera, iInputIOIndex): + puState = c_int() + err_code = _sdk.CameraGetIOState(hCamera, iInputIOIndex, byref(puState)) + SetLastError(err_code) + return puState.value + +def CameraSetInPutIOMode(hCamera, iInputIOIndex, iMode): + err_code = _sdk.CameraSetInPutIOMode(hCamera, iInputIOIndex, iMode) + SetLastError(err_code) + return err_code + +def CameraSetOutPutIOMode(hCamera, iOutputIOIndex, iMode): + err_code = _sdk.CameraSetOutPutIOMode(hCamera, iOutputIOIndex, iMode) + SetLastError(err_code) + return err_code + +def CameraSetOutPutPWM(hCamera, iOutputIOIndex, iCycle, uDuty): + err_code = _sdk.CameraSetOutPutPWM(hCamera, iOutputIOIndex, iCycle, uDuty) + SetLastError(err_code) + return err_code + +def CameraSetAeAlgorithm(hCamera, iIspProcessor, iAeAlgorithmSel): + err_code = _sdk.CameraSetAeAlgorithm(hCamera, iIspProcessor, iAeAlgorithmSel) + SetLastError(err_code) + return err_code + +def CameraGetAeAlgorithm(hCamera, iIspProcessor): + piAlgorithmSel = c_int() + err_code = _sdk.CameraGetAeAlgorithm(hCamera, iIspProcessor, byref(piAlgorithmSel)) + SetLastError(err_code) + return piAlgorithmSel.value + +def CameraSetBayerDecAlgorithm(hCamera, iIspProcessor, iAlgorithmSel): + err_code = _sdk.CameraSetBayerDecAlgorithm(hCamera, iIspProcessor, iAlgorithmSel) + SetLastError(err_code) + return err_code + +def CameraGetBayerDecAlgorithm(hCamera, iIspProcessor): + piAlgorithmSel = c_int() + err_code = _sdk.CameraGetBayerDecAlgorithm(hCamera, iIspProcessor, byref(piAlgorithmSel)) + SetLastError(err_code) + return piAlgorithmSel.value + +def CameraSetIspProcessor(hCamera, iIspProcessor): + err_code = _sdk.CameraSetIspProcessor(hCamera, iIspProcessor) + SetLastError(err_code) + return err_code + +def CameraGetIspProcessor(hCamera): + piIspProcessor = c_int() + err_code = _sdk.CameraGetIspProcessor(hCamera, byref(piIspProcessor)) + SetLastError(err_code) + return piIspProcessor.value + +def CameraSetBlackLevel(hCamera, iBlackLevel): + err_code = _sdk.CameraSetBlackLevel(hCamera, iBlackLevel) + SetLastError(err_code) + return err_code + +def CameraGetBlackLevel(hCamera): + piBlackLevel = c_int() + err_code = _sdk.CameraGetBlackLevel(hCamera, byref(piBlackLevel)) + SetLastError(err_code) + return piBlackLevel.value + +def CameraSetWhiteLevel(hCamera, iWhiteLevel): + err_code = _sdk.CameraSetWhiteLevel(hCamera, iWhiteLevel) + SetLastError(err_code) + return err_code + +def CameraGetWhiteLevel(hCamera): + piWhiteLevel = c_int() + err_code = _sdk.CameraGetWhiteLevel(hCamera, byref(piWhiteLevel)) + SetLastError(err_code) + return piWhiteLevel.value + +def CameraSetIspOutFormat(hCamera, uFormat): + err_code = _sdk.CameraSetIspOutFormat(hCamera, uFormat) + SetLastError(err_code) + return err_code + +def CameraGetIspOutFormat(hCamera): + puFormat = c_int() + err_code = _sdk.CameraGetIspOutFormat(hCamera, byref(puFormat)) + SetLastError(err_code) + return puFormat.value + +def CameraGetErrorString(iStatusCode): + _sdk.CameraGetErrorString.restype = c_char_p + msg = _sdk.CameraGetErrorString(iStatusCode) + if msg: + return _string_buffer_to_str(msg) + else: + return '' + +def CameraGetImageBufferEx2(hCamera, pImageData, uOutFormat, wTimes): + piWidth = c_int() + piHeight = c_int() + err_code = _sdk.CameraGetImageBufferEx2(hCamera, c_void_p(pImageData), uOutFormat, byref(piWidth), byref(piHeight), wTimes) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return (piWidth.value, piHeight.value) + +def CameraGetImageBufferEx3(hCamera, pImageData, uOutFormat, wTimes): + piWidth = c_int() + piHeight = c_int() + puTimeStamp = c_int() + err_code = _sdk.CameraGetImageBufferEx3(hCamera, c_void_p(pImageData), uOutFormat, byref(piWidth), byref(piHeight), byref(puTimeStamp), wTimes) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return (piWidth.value, piHeight.value, puTimeStamp.value) + +def CameraGetCapabilityEx2(hCamera): + pMaxWidth = c_int() + pMaxHeight = c_int() + pbColorCamera = c_int() + err_code = _sdk.CameraGetCapabilityEx2(hCamera, byref(pMaxWidth), byref(pMaxHeight), byref(pbColorCamera)) + SetLastError(err_code) + return (pMaxWidth.value, pMaxHeight.value, pbColorCamera.value) + +def CameraReConnect(hCamera): + err_code = _sdk.CameraReConnect(hCamera) + SetLastError(err_code) + return err_code + +def CameraConnectTest(hCamera): + err_code = _sdk.CameraConnectTest(hCamera) + SetLastError(err_code) + return err_code + +def CameraSetLedEnable(hCamera, index, enable): + err_code = _sdk.CameraSetLedEnable(hCamera, index, enable) + SetLastError(err_code) + return err_code + +def CameraGetLedEnable(hCamera, index): + enable = c_int() + err_code = _sdk.CameraGetLedEnable(hCamera, index, byref(enable)) + SetLastError(err_code) + return enable.value + +def CameraSetLedOnOff(hCamera, index, onoff): + err_code = _sdk.CameraSetLedOnOff(hCamera, index, onoff) + SetLastError(err_code) + return err_code + +def CameraGetLedOnOff(hCamera, index): + onoff = c_int() + err_code = _sdk.CameraGetLedOnOff(hCamera, index, byref(onoff)) + SetLastError(err_code) + return onoff.value + +def CameraSetLedDuration(hCamera, index, duration): + err_code = _sdk.CameraSetLedDuration(hCamera, index, duration) + SetLastError(err_code) + return err_code + +def CameraGetLedDuration(hCamera, index): + duration = c_uint() + err_code = _sdk.CameraGetLedDuration(hCamera, index, byref(duration)) + SetLastError(err_code) + return duration.value + +def CameraSetLedBrightness(hCamera, index, uBrightness): + err_code = _sdk.CameraSetLedBrightness(hCamera, index, uBrightness) + SetLastError(err_code) + return err_code + +def CameraGetLedBrightness(hCamera, index): + uBrightness = c_uint() + err_code = _sdk.CameraGetLedBrightness(hCamera, index, byref(uBrightness)) + SetLastError(err_code) + return uBrightness.value + +def CameraEnableTransferRoi(hCamera, uEnableMask): + err_code = _sdk.CameraEnableTransferRoi(hCamera, uEnableMask) + SetLastError(err_code) + return err_code + +def CameraSetTransferRoi(hCamera, index, X1, Y1, X2, Y2): + err_code = _sdk.CameraSetTransferRoi(hCamera, index, X1, Y1, X2, Y2) + SetLastError(err_code) + return err_code + +def CameraGetTransferRoi(hCamera, index): + pX1 = c_uint() + pY1 = c_uint() + pX2 = c_uint() + pY2 = c_uint() + err_code = _sdk.CameraGetTransferRoi(hCamera, index, byref(pX1), byref(pY1), byref(pX2), byref(pY2)) + SetLastError(err_code) + return (pX1.value, pY1.value, pX2.value, pY2.value) + +def CameraAlignMalloc(size, align = 16): + _sdk.CameraAlignMalloc.restype = c_void_p + r = _sdk.CameraAlignMalloc(size, align) + return r + +def CameraAlignFree(membuffer): + _sdk.CameraAlignFree(c_void_p(membuffer)) + +def CameraSetAutoConnect(hCamera, bEnable): + err_code = _sdk.CameraSetAutoConnect(hCamera, bEnable) + SetLastError(err_code) + return err_code + +def CameraGetAutoConnect(hCamera): + pbEnable = c_int() + err_code = _sdk.CameraGetAutoConnect(hCamera, byref(pbEnable)) + SetLastError(err_code) + return pbEnable.value + +def CameraGetReConnectCounts(hCamera): + puCounts = c_int() + err_code = _sdk.CameraGetReConnectCounts(hCamera, byref(puCounts)) + SetLastError(err_code) + return puCounts.value + +def CameraSetSingleGrabMode(hCamera, bEnable): + err_code = _sdk.CameraSetSingleGrabMode(hCamera, bEnable) + SetLastError(err_code) + return err_code + +def CameraGetSingleGrabMode(hCamera): + pbEnable = c_int() + err_code = _sdk.CameraGetSingleGrabMode(hCamera, byref(pbEnable)) + SetLastError(err_code) + return pbEnable.value + +def CameraRestartGrab(hCamera): + err_code = _sdk.CameraRestartGrab(hCamera) + SetLastError(err_code) + return err_code + +def CameraEvaluateImageDefinition(hCamera, iAlgorithSel, pbyIn, pFrInfo): + DefinitionValue = c_double() + err_code = _sdk.CameraEvaluateImageDefinition(hCamera, iAlgorithSel, c_void_p(pbyIn), byref(pFrInfo), byref(DefinitionValue)) + SetLastError(err_code) + return DefinitionValue.value + +def CameraDrawText(pRgbBuffer, pFrInfo, pFontFileName, FontWidth, FontHeight, pText, Left, Top, Width, Height, TextColor, uFlags): + err_code = _sdk.CameraDrawText(c_void_p(pRgbBuffer), byref(pFrInfo), _str_to_string_buffer(pFontFileName), FontWidth, FontHeight, _str_to_string_buffer(pText), Left, Top, Width, Height, TextColor, uFlags) + SetLastError(err_code) + return err_code + +def CameraGigeGetIp(pCameraInfo): + CamIp = create_string_buffer(32) + CamMask = create_string_buffer(32) + CamGateWay = create_string_buffer(32) + EtIp = create_string_buffer(32) + EtMask = create_string_buffer(32) + EtGateWay = create_string_buffer(32) + err_code = _sdk.CameraGigeGetIp(byref(pCameraInfo), CamIp, CamMask, CamGateWay, EtIp, EtMask, EtGateWay) + SetLastError(err_code) + return (_string_buffer_to_str(CamIp), _string_buffer_to_str(CamMask), _string_buffer_to_str(CamGateWay), + _string_buffer_to_str(EtIp), _string_buffer_to_str(EtMask), _string_buffer_to_str(EtGateWay) ) + +def CameraGigeSetIp(pCameraInfo, Ip, SubMask, GateWay, bPersistent): + err_code = _sdk.CameraGigeSetIp(byref(pCameraInfo), + _str_to_string_buffer(Ip), _str_to_string_buffer(SubMask), _str_to_string_buffer(GateWay), bPersistent) + SetLastError(err_code) + return err_code + +def CameraGigeGetMac(pCameraInfo): + CamMac = create_string_buffer(32) + EtMac = create_string_buffer(32) + err_code = _sdk.CameraGigeGetMac(byref(pCameraInfo), CamMac, EtMac) + SetLastError(err_code) + return (_string_buffer_to_str(CamMac), _string_buffer_to_str(EtMac) ) + +def CameraEnableFastResponse(hCamera): + err_code = _sdk.CameraEnableFastResponse(hCamera) + SetLastError(err_code) + return err_code + +def CameraSetCorrectDeadPixel(hCamera, bEnable): + err_code = _sdk.CameraSetCorrectDeadPixel(hCamera, bEnable) + SetLastError(err_code) + return err_code + +def CameraGetCorrectDeadPixel(hCamera): + pbEnable = c_int() + err_code = _sdk.CameraGetCorrectDeadPixel(hCamera, byref(pbEnable)) + SetLastError(err_code) + return pbEnable.value + +def CameraFlatFieldingCorrectSetEnable(hCamera, bEnable): + err_code = _sdk.CameraFlatFieldingCorrectSetEnable(hCamera, bEnable) + SetLastError(err_code) + return err_code + +def CameraFlatFieldingCorrectGetEnable(hCamera): + pbEnable = c_int() + err_code = _sdk.CameraFlatFieldingCorrectGetEnable(hCamera, byref(pbEnable)) + SetLastError(err_code) + return pbEnable.value + +def CameraFlatFieldingCorrectSetParameter(hCamera, pDarkFieldingImage, pDarkFieldingFrInfo, pLightFieldingImage, pLightFieldingFrInfo): + err_code = _sdk.CameraFlatFieldingCorrectSetParameter(hCamera, c_void_p(pDarkFieldingImage), byref(pDarkFieldingFrInfo), c_void_p(pLightFieldingImage), byref(pLightFieldingFrInfo)) + SetLastError(err_code) + return err_code + +def CameraFlatFieldingCorrectGetParameterState(hCamera): + pbValid = c_int() + pFilePath = create_string_buffer(1024) + err_code = _sdk.CameraFlatFieldingCorrectGetParameterState(hCamera, byref(pbValid), pFilePath) + SetLastError(err_code) + return (pbValid.value, _string_buffer_to_str(pFilePath) ) + +def CameraFlatFieldingCorrectSaveParameterToFile(hCamera, pszFileName): + err_code = _sdk.CameraFlatFieldingCorrectSaveParameterToFile(hCamera, _str_to_string_buffer(pszFileName)) + SetLastError(err_code) + return err_code + +def CameraFlatFieldingCorrectLoadParameterFromFile(hCamera, pszFileName): + err_code = _sdk.CameraFlatFieldingCorrectLoadParameterFromFile(hCamera, _str_to_string_buffer(pszFileName)) + SetLastError(err_code) + return err_code + +def CameraCommonCall(hCamera, pszCall, uResultBufSize): + pszResult = create_string_buffer(uResultBufSize) if uResultBufSize > 0 else None + err_code = _sdk.CameraCommonCall(hCamera, _str_to_string_buffer(pszCall), pszResult, uResultBufSize) + SetLastError(err_code) + return _string_buffer_to_str(pszResult) if pszResult else '' + +def CameraSetDenoise3DParams(hCamera, bEnable, nCount, Weights): + assert(nCount >= 2 and nCount <= 8) + if Weights: + assert(len(Weights) == nCount) + WeightsNative = (c_float * nCount)(*Weights) + else: + WeightsNative = None + err_code = _sdk.CameraSetDenoise3DParams(hCamera, bEnable, nCount, WeightsNative) + SetLastError(err_code) + return err_code + +def CameraGetDenoise3DParams(hCamera): + bEnable = c_int() + nCount = c_int() + bUseWeight = c_int() + Weights = (c_float * 8)() + err_code = _sdk.CameraGetDenoise3DParams(hCamera, byref(bEnable), byref(nCount), byref(bUseWeight), Weights) + SetLastError(err_code) + bEnable, nCount, bUseWeight = bEnable.value, nCount.value, bUseWeight.value + if bUseWeight: + Weights = Weights[:nCount] + else: + Weights = None + return (bEnable, nCount, bUseWeight, Weights) + +def CameraManualDenoise3D(InFramesHead, InFramesData, nCount, Weights, OutFrameHead, OutFrameData): + assert(nCount > 0) + assert(len(InFramesData) == nCount) + assert(Weights is None or len(Weights) == nCount) + InFramesDataNative = (c_void_p * nCount)(*InFramesData) + WeightsNative = (c_float * nCount)(*Weights) if Weights else None + err_code = _sdk.CameraManualDenoise3D(byref(InFramesHead), InFramesDataNative, nCount, WeightsNative, byref(OutFrameHead), c_void_p(OutFrameData)) + SetLastError(err_code) + return err_code + +def CameraCustomizeDeadPixels(hCamera, hParent): + err_code = _sdk.CameraCustomizeDeadPixels(hCamera, hParent) + SetLastError(err_code) + return err_code + +def CameraReadDeadPixels(hCamera): + pNumPixel = c_int() + err_code = _sdk.CameraReadDeadPixels(hCamera, None, None, byref(pNumPixel)) + SetLastError(err_code) + if pNumPixel.value < 1: + return None + UShortArray = c_ushort * pNumPixel.value + pRows = UShortArray() + pCols = UShortArray() + err_code = _sdk.CameraReadDeadPixels(hCamera, pRows, pCols, byref(pNumPixel)) + SetLastError(err_code) + if err_code == 0: + pNumPixel = pNumPixel.value + else: + pNumPixel = 0 + return (pRows[:pNumPixel], pCols[:pNumPixel]) + +def CameraAddDeadPixels(hCamera, pRows, pCols, NumPixel): + UShortArray = c_ushort * NumPixel + pRowsNative = UShortArray(*pRows) + pColsNative = UShortArray(*pCols) + err_code = _sdk.CameraAddDeadPixels(hCamera, pRowsNative, pColsNative, NumPixel) + SetLastError(err_code) + return err_code + +def CameraRemoveDeadPixels(hCamera, pRows, pCols, NumPixel): + UShortArray = c_ushort * NumPixel + pRowsNative = UShortArray(*pRows) + pColsNative = UShortArray(*pCols) + err_code = _sdk.CameraRemoveDeadPixels(hCamera, pRowsNative, pColsNative, NumPixel) + SetLastError(err_code) + return err_code + +def CameraRemoveAllDeadPixels(hCamera): + err_code = _sdk.CameraRemoveAllDeadPixels(hCamera) + SetLastError(err_code) + return err_code + +def CameraSaveDeadPixels(hCamera): + err_code = _sdk.CameraSaveDeadPixels(hCamera) + SetLastError(err_code) + return err_code + +def CameraSaveDeadPixelsToFile(hCamera, sFileName): + err_code = _sdk.CameraSaveDeadPixelsToFile(hCamera, _str_to_string_buffer(sFileName)) + SetLastError(err_code) + return err_code + +def CameraLoadDeadPixelsFromFile(hCamera, sFileName): + err_code = _sdk.CameraLoadDeadPixelsFromFile(hCamera, _str_to_string_buffer(sFileName)) + SetLastError(err_code) + return err_code + +def CameraGetImageBufferPriority(hCamera, wTimes, Priority): + pFrameInfo = tSdkFrameHead() + pbyBuffer = c_void_p() + err_code = _sdk.CameraGetImageBufferPriority(hCamera, byref(pFrameInfo), byref(pbyBuffer), wTimes, Priority) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return (pbyBuffer.value, pFrameInfo) + +def CameraGetImageBufferPriorityEx(hCamera, wTimes, Priority): + _sdk.CameraGetImageBufferPriorityEx.restype = c_void_p + piWidth = c_int() + piHeight = c_int() + pFrameBuffer = _sdk.CameraGetImageBufferPriorityEx(hCamera, byref(piWidth), byref(piHeight), wTimes, Priority) + err_code = CAMERA_STATUS_SUCCESS if pFrameBuffer else CAMERA_STATUS_TIME_OUT + SetLastError(err_code) + if pFrameBuffer: + return (pFrameBuffer, piWidth.value, piHeight.value) + else: + raise CameraException(err_code) + +def CameraGetImageBufferPriorityEx2(hCamera, pImageData, uOutFormat, wTimes, Priority): + piWidth = c_int() + piHeight = c_int() + err_code = _sdk.CameraGetImageBufferPriorityEx2(hCamera, c_void_p(pImageData), uOutFormat, byref(piWidth), byref(piHeight), wTimes, Priority) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return (piWidth.value, piHeight.value) + +def CameraGetImageBufferPriorityEx3(hCamera, pImageData, uOutFormat, wTimes, Priority): + piWidth = c_int() + piHeight = c_int() + puTimeStamp = c_uint() + err_code = _sdk.CameraGetImageBufferPriorityEx3(hCamera, c_void_p(pImageData), uOutFormat, byref(piWidth), byref(piHeight), byref(puTimeStamp), wTimes, Priority) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return (piWidth.value, piHeight.value, puTimeStamp.value) + +def CameraClearBuffer(hCamera): + err_code = _sdk.CameraClearBuffer(hCamera) + SetLastError(err_code) + return err_code + +def CameraSoftTriggerEx(hCamera, uFlags): + err_code = _sdk.CameraSoftTriggerEx(hCamera, uFlags) + SetLastError(err_code) + return err_code + +def CameraSetHDR(hCamera, value): + err_code = _sdk.CameraSetHDR(hCamera, value) + SetLastError(err_code) + return err_code + +def CameraGetHDR(hCamera): + value = c_int() + err_code = _sdk.CameraGetHDR(hCamera, byref(value)) + SetLastError(err_code) + return value.value + +def CameraGetFrameID(hCamera): + FrameID = c_uint() + err_code = _sdk.CameraGetFrameID(hCamera, byref(FrameID)) + SetLastError(err_code) + return FrameID.value + +def CameraGetFrameTimeStamp(hCamera): + TimeStamp = c_uint64() + TimeStampL = c_uint32.from_buffer(TimeStamp) + TimeStampH = c_uint32.from_buffer(TimeStamp, 4) + err_code = _sdk.CameraGetFrameTimeStamp(hCamera, byref(TimeStampL), byref(TimeStampH)) + SetLastError(err_code) + return TimeStamp.value + +def CameraSetHDRGainMode(hCamera, value): + err_code = _sdk.CameraSetHDRGainMode(hCamera, value) + SetLastError(err_code) + return err_code + +def CameraGetHDRGainMode(hCamera): + value = c_int() + err_code = _sdk.CameraGetHDRGainMode(hCamera, byref(value)) + SetLastError(err_code) + return value.value + +def CameraCreateDIBitmap(hDC, pFrameBuffer, pFrameHead): + outBitmap = c_void_p() + err_code = _sdk.CameraCreateDIBitmap(hDC, c_void_p(pFrameBuffer), byref(pFrameHead), byref(outBitmap)) + SetLastError(err_code) + return outBitmap.value + +def CameraDrawFrameBuffer(pFrameBuffer, pFrameHead, hWnd, Algorithm, Mode): + err_code = _sdk.CameraDrawFrameBuffer(c_void_p(pFrameBuffer), byref(pFrameHead), c_void_p(hWnd), Algorithm, Mode) + SetLastError(err_code) + return err_code + +def CameraFlipFrameBuffer(pFrameBuffer, pFrameHead, Flags): + err_code = _sdk.CameraFlipFrameBuffer(c_void_p(pFrameBuffer), byref(pFrameHead), Flags) + SetLastError(err_code) + return err_code + +def CameraConvertFrameBufferFormat(hCamera, pInFrameBuffer, pOutFrameBuffer, outWidth, outHeight, outMediaType, pFrameHead): + err_code = _sdk.CameraConvertFrameBufferFormat(hCamera, c_void_p(pInFrameBuffer), c_void_p(pOutFrameBuffer), outWidth, outHeight, outMediaType, byref(pFrameHead)) + SetLastError(err_code) + return err_code + +def CameraSetConnectionStatusCallback(hCamera, pCallBack, pContext = 0): + err_code = _sdk.CameraSetConnectionStatusCallback(hCamera, pCallBack, c_void_p(pContext) ) + SetLastError(err_code) + return err_code + +def CameraSetLightingControllerMode(hCamera, index, mode): + err_code = _sdk.CameraSetLightingControllerMode(hCamera, index, mode) + SetLastError(err_code) + return err_code + +def CameraSetLightingControllerState(hCamera, index, state): + err_code = _sdk.CameraSetLightingControllerState(hCamera, index, state) + SetLastError(err_code) + return err_code + +def CameraGetEyeCount(hCamera): + EyeCount = c_int() + err_code = _sdk.CameraGetEyeCount(hCamera, byref(EyeCount)) + SetLastError(err_code) + return EyeCount.value + +def CameraMultiEyeImageProcess(hCamera, iEyeIndex, pbyIn, pInFrInfo, pbyOut, pOutFrInfo, uOutFormat, uReserved): + err_code = _sdk.CameraMultiEyeImageProcess(hCamera, iEyeIndex, c_void_p(pbyIn), byref(pInFrInfo), c_void_p(pbyOut), byref(pOutFrInfo), uOutFormat, uReserved) + SetLastError(err_code) + return err_code + +# CameraGrabber + +def CameraGrabber_CreateFromDevicePage(): + Grabber = c_void_p() + err_code = _sdk.CameraGrabber_CreateFromDevicePage(byref(Grabber)) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return Grabber.value + +def CameraGrabber_CreateByIndex(Index): + Grabber = c_void_p() + err_code = _sdk.CameraGrabber_CreateByIndex(byref(Grabber), Index) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return Grabber.value + +def CameraGrabber_CreateByName(Name): + Grabber = c_void_p() + err_code = _sdk.CameraGrabber_CreateByName(byref(Grabber), _str_to_string_buffer(Name)) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return Grabber.value + +def CameraGrabber_Create(pDevInfo): + Grabber = c_void_p() + err_code = _sdk.CameraGrabber_Create(byref(Grabber), byref(pDevInfo)) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return Grabber.value + +def CameraGrabber_Destroy(Grabber): + err_code = _sdk.CameraGrabber_Destroy(c_void_p(Grabber)) + SetLastError(err_code) + return err_code + +def CameraGrabber_SetHWnd(Grabber, hWnd): + err_code = _sdk.CameraGrabber_SetHWnd(c_void_p(Grabber), c_void_p(hWnd) ) + SetLastError(err_code) + return err_code + +def CameraGrabber_SetPriority(Grabber, Priority): + err_code = _sdk.CameraGrabber_SetPriority(c_void_p(Grabber), Priority) + SetLastError(err_code) + return err_code + +def CameraGrabber_StartLive(Grabber): + err_code = _sdk.CameraGrabber_StartLive(c_void_p(Grabber)) + SetLastError(err_code) + return err_code + +def CameraGrabber_StopLive(Grabber): + err_code = _sdk.CameraGrabber_StopLive(c_void_p(Grabber)) + SetLastError(err_code) + return err_code + +def CameraGrabber_SaveImage(Grabber, TimeOut): + Image = c_void_p() + err_code = _sdk.CameraGrabber_SaveImage(c_void_p(Grabber), byref(Image), TimeOut) + SetLastError(err_code) + if err_code != 0: + raise CameraException(err_code) + return Image.value + +def CameraGrabber_SaveImageAsync(Grabber): + err_code = _sdk.CameraGrabber_SaveImageAsync(c_void_p(Grabber)) + SetLastError(err_code) + return err_code + +def CameraGrabber_SaveImageAsyncEx(Grabber, UserData): + err_code = _sdk.CameraGrabber_SaveImageAsyncEx(c_void_p(Grabber), c_void_p(UserData)) + SetLastError(err_code) + return err_code + +def CameraGrabber_SetSaveImageCompleteCallback(Grabber, Callback, Context = 0): + err_code = _sdk.CameraGrabber_SetSaveImageCompleteCallback(c_void_p(Grabber), Callback, c_void_p(Context)) + SetLastError(err_code) + return err_code + +def CameraGrabber_SetFrameListener(Grabber, Listener, Context = 0): + err_code = _sdk.CameraGrabber_SetFrameListener(c_void_p(Grabber), Listener, c_void_p(Context)) + SetLastError(err_code) + return err_code + +def CameraGrabber_SetRawCallback(Grabber, Callback, Context = 0): + err_code = _sdk.CameraGrabber_SetRawCallback(c_void_p(Grabber), Callback, c_void_p(Context)) + SetLastError(err_code) + return err_code + +def CameraGrabber_SetRGBCallback(Grabber, Callback, Context = 0): + err_code = _sdk.CameraGrabber_SetRGBCallback(c_void_p(Grabber), Callback, c_void_p(Context)) + SetLastError(err_code) + return err_code + +def CameraGrabber_GetCameraHandle(Grabber): + hCamera = c_int() + err_code = _sdk.CameraGrabber_GetCameraHandle(c_void_p(Grabber), byref(hCamera)) + SetLastError(err_code) + return hCamera.value + +def CameraGrabber_GetStat(Grabber): + stat = tSdkGrabberStat() + err_code = _sdk.CameraGrabber_GetStat(c_void_p(Grabber), byref(stat)) + SetLastError(err_code) + return stat + +def CameraGrabber_GetCameraDevInfo(Grabber): + DevInfo = tSdkCameraDevInfo() + err_code = _sdk.CameraGrabber_GetCameraDevInfo(c_void_p(Grabber), byref(DevInfo)) + SetLastError(err_code) + return DevInfo + +# CameraImage + +def CameraImage_Create(pFrameBuffer, pFrameHead, bCopy): + Image = c_void_p() + err_code = _sdk.CameraImage_Create(byref(Image), c_void_p(pFrameBuffer), byref(pFrameHead), bCopy) + SetLastError(err_code) + return Image.value + +def CameraImage_CreateEmpty(): + Image = c_void_p() + err_code = _sdk.CameraImage_CreateEmpty(byref(Image)) + SetLastError(err_code) + return Image.value + +def CameraImage_Destroy(Image): + err_code = _sdk.CameraImage_Destroy(c_void_p(Image)) + SetLastError(err_code) + return err_code + +def CameraImage_GetData(Image): + DataBuffer = c_void_p() + HeadPtr = c_void_p() + err_code = _sdk.CameraImage_GetData(c_void_p(Image), byref(DataBuffer), byref(HeadPtr)) + SetLastError(err_code) + if err_code == 0: + return (DataBuffer.value, tSdkFrameHead.from_address(HeadPtr.value) ) + else: + return (0, None) + +def CameraImage_GetUserData(Image): + UserData = c_void_p() + err_code = _sdk.CameraImage_GetUserData(c_void_p(Image), byref(UserData)) + SetLastError(err_code) + return UserData.value + +def CameraImage_SetUserData(Image, UserData): + err_code = _sdk.CameraImage_SetUserData(c_void_p(Image), c_void_p(UserData)) + SetLastError(err_code) + return err_code + +def CameraImage_IsEmpty(Image): + IsEmpty = c_int() + err_code = _sdk.CameraImage_IsEmpty(c_void_p(Image), byref(IsEmpty)) + SetLastError(err_code) + return IsEmpty.value + +def CameraImage_Draw(Image, hWnd, Algorithm): + err_code = _sdk.CameraImage_Draw(c_void_p(Image), c_void_p(hWnd), Algorithm) + SetLastError(err_code) + return err_code + +def CameraImage_DrawFit(Image, hWnd, Algorithm): + err_code = _sdk.CameraImage_DrawFit(c_void_p(Image), c_void_p(hWnd), Algorithm) + SetLastError(err_code) + return err_code + +def CameraImage_DrawToDC(Image, hDC, Algorithm, xDst, yDst, cxDst, cyDst): + err_code = _sdk.CameraImage_DrawToDC(c_void_p(Image), c_void_p(hDC), Algorithm, xDst, yDst, cxDst, cyDst) + SetLastError(err_code) + return err_code + +def CameraImage_DrawToDCFit(Image, hDC, Algorithm, xDst, yDst, cxDst, cyDst): + err_code = _sdk.CameraImage_DrawToDCFit(c_void_p(Image), c_void_p(hDC), Algorithm, xDst, yDst, cxDst, cyDst) + SetLastError(err_code) + return err_code + +def CameraImage_BitBlt(Image, hWnd, xDst, yDst, cxDst, cyDst, xSrc, ySrc): + err_code = _sdk.CameraImage_BitBlt(c_void_p(Image), c_void_p(hWnd), xDst, yDst, cxDst, cyDst, xSrc, ySrc) + SetLastError(err_code) + return err_code + +def CameraImage_BitBltToDC(Image, hDC, xDst, yDst, cxDst, cyDst, xSrc, ySrc): + err_code = _sdk.CameraImage_BitBltToDC(c_void_p(Image), c_void_p(hDC), xDst, yDst, cxDst, cyDst, xSrc, ySrc) + SetLastError(err_code) + return err_code + +def CameraImage_SaveAsBmp(Image, FileName): + err_code = _sdk.CameraImage_SaveAsBmp(c_void_p(Image), _str_to_string_buffer(FileName)) + SetLastError(err_code) + return err_code + +def CameraImage_SaveAsJpeg(Image, FileName, Quality): + err_code = _sdk.CameraImage_SaveAsJpeg(c_void_p(Image), _str_to_string_buffer(FileName), Quality) + SetLastError(err_code) + return err_code + +def CameraImage_SaveAsPng(Image, FileName): + err_code = _sdk.CameraImage_SaveAsPng(c_void_p(Image), _str_to_string_buffer(FileName)) + SetLastError(err_code) + return err_code + +def CameraImage_SaveAsRaw(Image, FileName, Format): + err_code = _sdk.CameraImage_SaveAsRaw(c_void_p(Image), _str_to_string_buffer(FileName), Format) + SetLastError(err_code) + return err_code + +def CameraImage_IPicture(Image): + NewPic = c_void_p() + err_code = _sdk.CameraImage_IPicture(c_void_p(Image), byref(NewPic)) + SetLastError(err_code) + return NewPic.value diff --git a/tools/analysis.py b/tools/analysis.py new file mode 100644 index 0000000..8f2bd28 --- /dev/null +++ b/tools/analysis.py @@ -0,0 +1,52 @@ +import matplotlib.pyplot as plt +import numpy as np + +fsend = open("send.info") +frecv = open("recv.info") + +send_lines = fsend.readlines()[:-1] +recv_lines = frecv.readlines()[:-1] + +send_infos = [line.split(" ") for line in send_lines] +recv_infos = [line.split(" ") for line in recv_lines] + +send_times = [float(info[0]) for info in send_infos] +recv_times = [float(info[0]) for info in recv_infos] + +send_yaw = [float(info[1]) for info in send_infos] +TargetAngle= [float(info[1]) for info in recv_infos] +RealAngle = [float(info[2]) for info in recv_infos] + +length = min(len(send_times), len(recv_times)) + +send_times = send_times[:length] +recv_times = recv_times[:length] +send_yaw = send_yaw[:length] +TargetAngle= TargetAngle[:length] +RealAngle = RealAngle[:length] + +time_base = min(send_times[0], recv_times[0]) + +send_times = np.array(send_times) - time_base +recv_times = np.array(recv_times) - time_base + +TargetAngle = TargetAngle[:300] +RealAngle = RealAngle[:300] +send_times = send_times[:300] +recv_times = recv_times[:300] +send_yaw = send_yaw[:300] + +TargetAngle = np.array(TargetAngle) +TargetAngle -= TargetAngle.mean() +RealAngle = np.array(RealAngle) +RealAngle -= RealAngle.mean() + +plt.plot(send_times, send_yaw, label="send-yaw") +plt.plot(recv_times, TargetAngle,label="TargetAngle") +plt.plot(recv_times, RealAngle, label="RealAngle") +plt.scatter(send_times, send_yaw, label="send-yaw") +plt.scatter(recv_times, TargetAngle,label="TargetAngle") +plt.scatter(recv_times, RealAngle, label="RealAngle") +plt.legend() +plt.show() + diff --git a/tools/auto-pull.sh b/tools/auto-pull.sh new file mode 100755 index 0000000..0a951b2 --- /dev/null +++ b/tools/auto-pull.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +cd $(dirname $0)/../ +timeout 8 git pull +cd cmake-build-debug +cmake .. +make -j4 diff --git a/tools/create-startup.sh b/tools/create-startup.sh new file mode 100755 index 0000000..3e14f3d --- /dev/null +++ b/tools/create-startup.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +echo "#!/bin/bash" > $2/startup-run +echo "echo sjturm | sudo -S cpufreq-set -g performance" >> $2/startup-run +echo "mkdir $1/Mark" >> $2/startup-run +echo "mkdir $1/gimbal_video" >> $2/startup-run +echo "mkdir $1/armor_box_photo" >> $2/startup-run +echo "gnome-terminal -- bash -c \"echo sjturm | sudo -S $1/tools/monitor.sh \\\"$2/run --run-with-camera --save-video --save-mark --show-armor-box --wait-uart --save-labelled-boxes\\\"\"" >> $2/startup-run +chmod +x $2/startup-run diff --git a/tools/logger.hpp b/tools/logger.hpp new file mode 100644 index 0000000..7df01f9 --- /dev/null +++ b/tools/logger.hpp @@ -0,0 +1,8 @@ +#pragma once +// Minimal logger stub — no external logging library required. +// Replace with a real logger (e.g. spdlog) if needed. +#include +#define LOG_INFO(...) (void)0 +#define LOG_WARN(...) (void)0 +#define LOG_ERROR(...) (void)0 +#define LOG_DEBUG(...) (void)0 diff --git a/tools/math_tools.hpp b/tools/math_tools.hpp new file mode 100644 index 0000000..c4f04ba --- /dev/null +++ b/tools/math_tools.hpp @@ -0,0 +1,68 @@ +#pragma once +// math_tools.hpp +// 内联实现 solver.cpp 所需的全部数学工具函数,无外部依赖。 + +#include +#include + +namespace tools +{ + +// ────────────────────────────────────────────────────────────────────────────── +// square(x): 返回 x 的平方 +// ────────────────────────────────────────────────────────────────────────────── +inline double square(double x) { return x * x; } + +// ────────────────────────────────────────────────────────────────────────────── +// limit_rad(angle): 将弧度角限制在 (-π, π] 范围内 +// ────────────────────────────────────────────────────────────────────────────── +inline double limit_rad(double angle) +{ + constexpr double two_pi = 2.0 * M_PI; + angle = std::fmod(angle + M_PI, two_pi); + if (angle < 0.0) angle += two_pi; + return angle - M_PI; +} + +// ────────────────────────────────────────────────────────────────────────────── +// eulers(R, ax0, ax1, ax2): 从旋转矩阵 R 提取欧拉角(内禀旋转,按 ax0->ax1->ax2 顺序) +// +// 常用调用方式:eulers(R, 2, 1, 0) 对应 ZYX(Yaw-Pitch-Roll)顺序。 +// 返回 Vector3d { angle_ax0, angle_ax1, angle_ax2 } +// ────────────────────────────────────────────────────────────────────────────── +inline Eigen::Vector3d eulers(const Eigen::Matrix3d & R, int ax0, int ax1, int ax2) +{ + // 使用 Eigen 内置的欧拉角接口(内禀旋转) + return R.eulerAngles(ax0, ax1, ax2); +} + +// ────────────────────────────────────────────────────────────────────────────── +// xyz2ypd(xyz): 将三维空间坐标转换为 [yaw, pitch, distance] +// +// 坐标系约定(与云台/世界坐标系一致): +// x 轴:前方(射击方向) +// y 轴:左方 +// z 轴:上方 +// +// 返回 Vector3d { yaw, pitch, distance }(单位:弧度,弧度,米) +// ────────────────────────────────────────────────────────────────────────────── +inline Eigen::Vector3d xyz2ypd(const Eigen::Vector3d & xyz) +{ + double distance = xyz.norm(); + double yaw = std::atan2(xyz.y(), xyz.x()); + double pitch = std::atan2(xyz.z(), std::sqrt(xyz.x() * xyz.x() + xyz.y() * xyz.y())); + return Eigen::Vector3d(yaw, pitch, distance); +} + +// ────────────────────────────────────────────────────────────────────────────── +// get_abs_angle(a, b): 返回两个二维向量夹角的绝对值(弧度) +// ────────────────────────────────────────────────────────────────────────────── +inline double get_abs_angle(const Eigen::Vector2d & a, const Eigen::Vector2d & b) +{ + double cos_angle = a.normalized().dot(b.normalized()); + // 数值钳位避免 acos 域错误 + cos_angle = std::max(-1.0, std::min(1.0, cos_angle)); + return std::acos(cos_angle); +} + +} // namespace tools diff --git a/tools/monitor.bat b/tools/monitor.bat new file mode 100644 index 0000000..e8fa909 --- /dev/null +++ b/tools/monitor.bat @@ -0,0 +1,53 @@ +@echo off + +rem سĽͳ·ɸҪ޸ + +set AppName=run.exe + +set AppArgs= --run-with-camera --wait-uart --show-armor-box + +set AppPath=C:\Users\sjturm\Desktop\AutoAim\build\Release\ + +title ̼ + +cls + +echo. + +echo ̼ؿʼ + +echo. + +rem ѭ + +:startjc + + rem ӽбвָ + + rem Ҳд qprocess %AppName% >nul 鷢󲹳䣩 + + qprocess|findstr /i %AppName% >nul + + rem errorlevelֵ0ʾҵ̣ûвҵ + + if %errorlevel%==0 ( + + echo ^>%date:~0,10% %time:~0,8% С + + )else ( + + echo ^>%date:~0,10% %time:~0,8% ûзֳ + + echo ^>%date:~0,10% %time:~0,8% + + start %AppPath%%AppName%%AppArgs% 2>nul && echo ^>%date:~0,10% %time:~0,8% ɹ + + ) + + rem pingʵʱ + + ping -n 2 -w 1000 1.1.1.1>nul + + goto startjc + +echo on \ No newline at end of file diff --git a/tools/monitor.sh b/tools/monitor.sh new file mode 100755 index 0000000..e46f816 --- /dev/null +++ b/tools/monitor.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# usage: monitor.sh "" +# And then when ever the exe shutdown it will be automatically restart + +exe=$1 +while true; do + state=`ps aux | grep "$1" | grep -v grep | grep -v $0` + if [ ! "$state" ]; then + exec $exe & + echo "restart $exe" + fi + sleep 0.5 +done diff --git a/tools/para/conv1_b b/tools/para/conv1_b new file mode 100644 index 0000000..d2ddb9d --- /dev/null +++ b/tools/para/conv1_b @@ -0,0 +1,7 @@ +6 +-0.13957113 +0.06878903 +0.031124229 +1.4302016 +-0.1433692 +1.1473336 diff --git a/tools/para/conv1_w b/tools/para/conv1_w new file mode 100644 index 0000000..487386e --- /dev/null +++ b/tools/para/conv1_w @@ -0,0 +1,454 @@ +3 +6 +5 +5 +0.026539411 +0.42253798 +0.6257618 +0.7803654 +0.56751746 +0.26718912 +0.7051625 +0.71628624 +0.7642506 +0.49248695 +0.16620474 +0.3780306 +0.7110501 +0.6030068 +0.4948883 +0.24835615 +0.33591226 +0.43040946 +0.5077497 +0.5212336 +-0.027971355 +0.2103128 +0.25356093 +0.07722227 +0.18559895 +0.32333145 +0.345134 +0.4201757 +0.6501012 +0.71342164 +0.27166557 +0.4905165 +0.6236048 +0.7930295 +0.7500772 +0.17779675 +0.56028295 +0.74555326 +0.5372084 +0.70782083 +0.27072752 +0.50543845 +0.57856107 +0.65362686 +0.53758156 +0.20370956 +0.38661864 +0.5690749 +0.24994203 +0.42308953 +-0.05610049 +0.0263962 +0.16409136 +-0.12595575 +-0.28413054 +-0.08711743 +0.3854187 +0.18076564 +0.08114622 +-0.31865782 +-0.10122112 +0.17201129 +0.116371 +0.13443075 +-0.3267171 +-0.23860133 +-0.092047565 +0.09856403 +-0.15966126 +-0.42780057 +-0.27054727 +-0.17382775 +-0.19402348 +-0.50262624 +-0.6701677 +0.021166094 +-0.15367271 +-0.3535248 +-0.3223209 +-0.3930027 +-0.012587458 +-0.2514576 +-0.028994415 +-0.23040394 +-0.22344537 +-0.28225404 +-0.12920779 +-0.084865615 +-0.079808 +-0.24189578 +-0.077354565 +-0.1364608 +-0.08271066 +0.015865652 +-0.17308144 +-0.016932748 +-0.10400943 +-0.15847488 +-0.19929907 +-0.024590252 +-0.305961 +0.41650155 +0.71885103 +0.5064972 +0.2556136 +-0.2217093 +0.3904318 +0.679353 +0.41345686 +0.1750823 +-0.07011908 +0.21723142 +0.36451343 +0.2734496 +-0.1827238 +-0.2640027 +-0.07665969 +-0.07281056 +-0.17140535 +-0.506126 +-0.39344314 +-0.19199198 +-0.43100312 +-0.5216478 +-0.8140914 +-0.22539687 +-0.1332064 +-0.18383063 +-0.3015942 +-0.3543749 +-0.07875634 +-0.046881627 +-0.17341466 +-0.17210038 +-0.16427462 +-0.12995729 +-0.09128473 +-0.07223676 +-0.05202489 +-0.17732152 +0.032028172 +0.022708599 +-0.07037333 +-0.24315825 +-0.3907585 +0.09521279 +-0.07241904 +-0.15533188 +-0.030434519 +-0.262898 +0.796653 +0.9267637 +0.93120253 +0.9917096 +0.9490124 +0.8625081 +1.0733354 +1.1211755 +1.1176518 +0.9001717 +0.7897956 +1.1967996 +1.1863062 +1.0460231 +0.86984694 +0.7440283 +0.88651806 +0.9017338 +0.81466335 +0.6403854 +0.50749934 +0.5359783 +0.54264694 +0.5598802 +0.41759288 +0.21787402 +0.42994195 +0.5423997 +0.46424487 +0.4637137 +0.4655036 +0.5988346 +0.5442244 +0.71659744 +0.6306643 +0.52392393 +0.66216165 +0.57559747 +0.50626665 +0.53091234 +0.50743634 +0.57716715 +0.7824497 +0.41367468 +0.55546504 +0.3030582 +0.6136134 +0.36521676 +0.43919942 +0.33232304 +0.51073956 +0.9655301 +1.0148821 +0.8726425 +0.30961013 +0.747004 +1.1461548 +1.3142052 +0.889127 +0.45464084 +0.5808323 +1.0770975 +1.3939735 +0.9165097 +0.6586972 +0.57355326 +0.9547619 +0.9447146 +0.66483366 +0.30041847 +0.3404827 +0.5929992 +0.7068603 +0.41881943 +-0.11529228 +-0.06013718 +0.029292889 +0.2176899 +0.14616063 +0.14816451 +0.13036805 +0.1793373 +0.3953 +0.51387286 +0.35285914 +0.06709124 +0.2171802 +0.6583215 +0.5220034 +0.44539294 +0.054360673 +0.18225458 +0.47989392 +0.5178179 +0.4576618 +0.16889913 +0.27844474 +0.32638916 +0.39993882 +0.119894765 +0.67456526 +1.4996389 +1.7681378 +1.6962894 +1.266272 +0.73875403 +1.6141837 +1.7386745 +1.671539 +1.1571932 +0.546496 +1.1523583 +1.2499596 +1.2602416 +0.7421503 +0.19625238 +0.6587611 +0.66948915 +0.43528196 +-0.008682725 +0.05109705 +0.13888682 +0.24387836 +-0.13002548 +-0.3703551 +0.06102093 +0.0076322197 +-0.035532437 +-0.029681634 +-0.057815406 +0.20116982 +0.27798048 +0.22556874 +0.3058461 +0.039763346 +0.10804575 +0.42170766 +0.3397586 +0.44702667 +0.19944976 +0.12492277 +0.2690411 +0.31178012 +0.307435 +0.09525637 +0.31001845 +0.20959602 +0.30736595 +0.2639023 +0.07473994 +-0.20428133 +0.123462535 +0.08172282 +0.0273528 +0.012557347 +-0.050085112 +0.15972462 +0.4576377 +0.26537335 +0.05294297 +0.1920879 +0.43903905 +0.44806978 +0.24177204 +0.15497287 +0.004198166 +0.24119955 +0.23940569 +0.30403528 +0.10443368 +-0.03242823 +-0.009877937 +-0.056617204 +-0.034309167 +-0.30718032 +-0.21831672 +-0.33697575 +-0.06903099 +-0.21208347 +-0.26106125 +-0.03470626 +-0.17156434 +-0.034266062 +-0.11911982 +-0.06517054 +-0.0014468514 +0.13053921 +-0.021993743 +0.08158244 +-0.048275527 +0.073179156 +0.11620164 +0.18908599 +0.090895034 +-0.13516097 +-0.041694365 +0.19145414 +0.06233252 +-0.015241079 +-0.08720653 +0.27016148 +0.68275934 +0.9259101 +0.87553996 +0.6730488 +0.5436024 +0.93307287 +1.284303 +1.215596 +0.7024047 +0.6535529 +1.0312322 +1.2054113 +1.1569601 +0.78507113 +0.46270427 +0.96070755 +1.0094548 +0.8725796 +0.584176 +0.2608554 +0.68085426 +0.6351991 +0.5974386 +0.44071475 +-0.14620513 +-0.051413815 +0.123140134 +0.3022954 +0.3937261 +0.14715014 +0.14558095 +0.37810993 +0.6081454 +0.4194721 +-0.048754267 +0.08287452 +0.5189599 +0.62214893 +0.7360417 +-0.06856284 +0.1070881 +0.296386 +0.6012432 +0.60254496 +-0.24324551 +0.14447688 +0.18799835 +0.46327543 +0.45924807 +0.20411673 +1.1002504 +1.4868475 +1.5346047 +1.0632775 +0.33373544 +1.1446538 +1.4786532 +1.4592378 +0.9056299 +0.22967416 +1.0249681 +1.2026587 +1.0556481 +0.6419271 +0.16762647 +0.475342 +0.64084166 +0.45603147 +0.19102122 +-0.17340069 +0.14535804 +0.13595402 +0.09039172 +-0.185116 +0.11963739 +0.3589415 +0.3841168 +0.5203414 +0.20129839 +0.20421675 +0.22073998 +0.4301539 +0.6149839 +0.42226243 +0.31898078 +0.31484243 +0.34544006 +0.5597543 +0.4067382 +0.12620181 +0.39053708 +0.38691083 +0.5219121 +0.62844783 +0.3108787 +0.46809235 +0.39197984 +0.38944077 +0.4951729 diff --git a/tools/para/conv2_b b/tools/para/conv2_b new file mode 100644 index 0000000..6e8fb4b --- /dev/null +++ b/tools/para/conv2_b @@ -0,0 +1,11 @@ +10 +-0.6072942 +1.0412933 +-0.34075898 +1.2761911 +0.16558713 +-0.11275745 +-0.20701186 +1.0942192 +0.511572 +0.07464832 diff --git a/tools/para/conv2_w b/tools/para/conv2_w new file mode 100644 index 0000000..13c4094 --- /dev/null +++ b/tools/para/conv2_w @@ -0,0 +1,544 @@ +6 +10 +3 +3 +-0.18567735 +0.31230295 +0.10601954 +-0.14635935 +0.17529164 +0.23833705 +-0.07737787 +-0.26470512 +-0.016763074 +0.0732159 +0.15613954 +0.24339953 +0.21809842 +0.10773516 +0.40015697 +0.08531675 +0.25792578 +0.29302046 +-0.14973466 +-0.13794622 +-0.3174705 +0.06396363 +-0.1582382 +-0.2843077 +-0.25538033 +-0.23979947 +-0.2003432 +-0.067921035 +0.008744139 +-0.12954548 +0.07350555 +0.016850626 +-0.13139062 +0.07412223 +-0.07210239 +-0.042953018 +-0.3169445 +0.009288535 +0.30465534 +-0.4208047 +0.07115591 +0.26925838 +-0.38791 +0.06488703 +0.400365 +-0.5090438 +-0.05041841 +0.28737134 +-0.32649037 +0.2732965 +0.3234882 +-0.14768949 +0.19571733 +0.46035185 +-0.1308439 +-0.28924602 +-0.4150856 +-0.1394865 +-0.14277102 +-0.028665107 +0.063959725 +-0.08086398 +-0.42271927 +-1.0998808 +-1.7531674 +-0.6868419 +-0.4679067 +-1.1683141 +-0.3862623 +0.1865768 +-0.7758855 +0.18598925 +-0.2777104 +-0.5689085 +-0.53544736 +0.06992068 +0.09683173 +-0.05572889 +0.497631 +0.5235087 +0.412554 +0.35491413 +0.20174716 +0.14414282 +0.21999303 +0.14763339 +0.15525024 +0.13345838 +-0.07630705 +-0.007321237 +-0.17791471 +0.067984045 +0.07404319 +-0.2620913 +-0.020879569 +-0.09856246 +-0.27126157 +-0.19668914 +-0.45068544 +0.06535956 +0.19665721 +0.4605025 +0.0834005 +0.26365396 +0.42590958 +0.041509036 +0.28209603 +0.23930955 +-0.16162594 +-0.22635049 +-0.26243812 +-0.12631208 +-0.22097321 +-0.20312756 +-0.1772115 +-0.33603805 +-0.30561772 +0.008207564 +0.07136626 +-0.216243 +0.16515563 +0.04111277 +-0.1260301 +0.14099488 +0.10370603 +-0.010030857 +-0.27448004 +-0.011123834 +0.22102898 +-0.25228068 +0.039984487 +0.24022454 +-0.12004822 +0.10729556 +0.22277792 +-0.2681527 +0.1929927 +0.35833898 +-0.1897413 +0.2386225 +0.59820104 +-0.27273512 +0.1098645 +0.36686987 +-0.43986773 +-0.18380699 +-0.43966547 +-0.009675484 +-0.25631252 +-0.29056635 +0.0712151 +-0.18025662 +-0.48891056 +-0.47694656 +-0.88816905 +-0.06483537 +0.013368553 +-0.70404077 +0.28231522 +0.33836752 +-0.22945245 +0.25680065 +-0.0012361507 +-0.52792823 +-0.2579657 +0.3255992 +-0.0019560119 +-0.046853587 +0.24827203 +0.34998816 +0.27723187 +0.31715482 +0.34362832 +0.12269884 +0.13557787 +-0.114973396 +0.07401403 +0.069110855 +-0.187023 +-0.036038406 +0.012674593 +0.36098468 +0.42171153 +0.048450485 +0.28105047 +0.4715788 +-0.023357779 +-0.057762705 +-0.073359944 +-0.16736583 +0.12476493 +0.0062710703 +-0.021589287 +-0.13475952 +0.030259239 +-0.036233522 +0.06367138 +-0.07908364 +0.36171123 +0.056995805 +0.26451215 +0.18291938 +0.06195444 +0.23869722 +0.10497623 +0.09330571 +0.29085782 +-0.2596862 +-0.031500176 +-0.013901459 +0.023374349 +0.016828336 +0.11964698 +0.026195215 +0.035629973 +0.12736408 +-0.42047524 +-0.045428358 +0.4764139 +-0.594475 +-0.14393432 +0.3904298 +-0.18805574 +-0.08113497 +0.5267287 +-0.4067696 +-0.32341024 +-0.29679683 +-0.10745416 +0.08389849 +0.14507549 +-0.024750415 +0.4222244 +0.16702761 +-0.008214667 +0.03591805 +0.08528825 +0.12195521 +0.41446808 +0.46344396 +0.37176162 +0.40626523 +0.08781661 +-0.8886079 +-1.0024366 +-0.86886346 +-0.49839306 +-0.8621685 +-0.642396 +-0.13097173 +-0.7362578 +-0.22594142 +-0.07626368 +-0.5901063 +-0.3290703 +0.14976943 +-0.06745293 +-0.0820076 +0.5327264 +0.4384248 +0.6160922 +0.24003918 +0.24436 +0.22210835 +0.21770608 +0.124687046 +0.0470902 +-0.14859878 +-0.321342 +-0.08767322 +0.20693085 +0.42665282 +0.33726025 +-0.020886194 +0.44385502 +0.01808433 +-0.118666425 +-0.15688846 +-0.31219846 +0.20918387 +0.021502182 +0.33103526 +0.24867874 +0.21629289 +0.013217075 +0.08715608 +0.054708257 +-0.15127313 +0.1508026 +0.24620876 +0.44316766 +0.17231683 +0.1236346 +0.26164678 +-0.08726074 +-0.052426733 +0.33535057 +0.36311948 +0.41015378 +0.34961388 +0.09574385 +0.5627171 +0.4841079 +0.36436325 +0.62349635 +0.651723 +-0.4531835 +0.15029465 +0.57511115 +-0.45798486 +0.19631258 +0.3225775 +-0.103153236 +0.19025934 +0.48245525 +-0.09091705 +-0.094119325 +-0.38689196 +0.14930637 +0.09523474 +-0.04373269 +0.3126633 +0.08655161 +-0.082390875 +-0.053303 +0.31841794 +0.3719926 +0.15074554 +0.40985286 +0.33657342 +0.20797513 +0.24987732 +0.39347094 +0.83306986 +0.86048186 +0.5689052 +0.72829825 +0.89263994 +0.8195005 +0.61129767 +0.78122336 +0.61171514 +-0.319987 +-0.25968623 +-0.11498821 +0.23861922 +0.088788316 +0.2950782 +0.62382466 +0.8079981 +0.61313707 +0.077279635 +-0.032932185 +0.0890238 +0.029694919 +0.12197181 +-0.042123534 +-0.29403502 +-0.36851963 +0.09636119 +0.04346845 +0.43912384 +0.3536572 +0.066943154 +0.4024961 +0.47593385 +0.0759621 +0.39561898 +0.22179781 +-0.35304305 +-0.20236854 +-0.008968132 +-0.09802803 +0.054423235 +0.23025425 +-0.015376655 +0.008936614 +0.2355261 +0.0014180358 +0.17833155 +0.19288565 +0.28466016 +-0.02708328 +0.05748906 +0.115661204 +-0.08906293 +0.06937998 +-0.12015559 +-0.11914039 +-0.15230455 +-0.30971813 +0.12253699 +-0.1287006 +-0.11642937 +-0.03524333 +0.106573164 +-0.46892896 +0.048909124 +0.35770398 +-0.48432148 +0.06230857 +0.35268116 +-0.6384595 +0.054048087 +0.33101568 +-0.7891181 +-0.5678995 +-0.32257825 +-0.30838996 +-0.019490078 +0.20418139 +0.2235779 +0.43282986 +0.33755836 +-0.43536973 +-0.18715984 +-0.017235223 +-0.22174615 +0.009737464 +0.18385953 +0.3702021 +0.1722581 +0.31182298 +-1.5388889 +-1.4710528 +-0.9808655 +-1.2328979 +-1.391655 +-0.9775159 +-0.53418314 +-1.0619466 +-0.14114031 +-0.38471037 +-0.91709787 +-0.6730362 +-0.3246664 +-0.50130564 +-0.29241592 +0.2488604 +0.29896885 +0.42214942 +0.23901664 +0.071325876 +0.0730879 +0.3215266 +0.37580463 +0.17601205 +0.082663685 +-0.14512439 +-0.02447424 +0.036292106 +0.190385 +0.24941531 +-0.15101732 +0.16009882 +0.022328991 +-0.13642876 +-0.2557106 +-0.23009326 +-0.2648493 +0.035393387 +0.058671933 +-0.06313441 +0.085322335 +0.037474677 +-0.09684385 +0.021198915 +-0.23987578 +0.49218395 +0.45345736 +0.4600616 +0.27070585 +0.23068464 +0.37693858 +0.32365304 +0.2629329 +0.38881606 +0.25656843 +0.3796918 +0.45741585 +0.08370856 +0.29546905 +0.55899864 +0.16390188 +0.43054807 +0.6232953 +-0.6125586 +0.042835608 +0.42402682 +-0.4055307 +-0.039988685 +0.42992234 +-0.26697057 +0.10284304 +0.4822276 +-0.32137555 +-0.38547745 +-0.33756226 +0.12396629 +0.018000755 +0.0040020915 +0.09871851 +0.19964874 +-0.049439877 +-0.054510776 +0.20413962 +0.49790758 +0.3678443 +0.47925648 +0.5145687 +0.46790117 +0.4268048 +0.23691703 +0.7796671 +0.6537224 +0.6620804 +0.6199029 +0.6739477 +0.5245343 +0.7053961 +0.5178989 +0.678157 +0.015971098 +-0.09368621 +-0.1418303 +0.2623539 +0.27078906 +0.26214978 +0.450224 +0.5519793 +0.589996 +0.0695408 +0.11883035 +0.16186124 +-0.00019518172 +-0.10749374 +-0.07061164 +-0.37467608 +-0.33476043 +-0.19680664 diff --git a/tools/para/conv3_b b/tools/para/conv3_b new file mode 100644 index 0000000..f58168b --- /dev/null +++ b/tools/para/conv3_b @@ -0,0 +1,15 @@ +14 +0.55702305 +1.1578506 +0.4233094 +1.0468913 +0.102127574 +-0.11887622 +0.7552765 +0.8270396 +-0.037355777 +0.863297 +0.42967162 +0.36658964 +0.751224 +0.5695708 diff --git a/tools/para/conv3_w b/tools/para/conv3_w new file mode 100644 index 0000000..952ad98 --- /dev/null +++ b/tools/para/conv3_w @@ -0,0 +1,1264 @@ +10 +14 +3 +3 +-0.097023204 +-0.1495231 +0.1364873 +0.25937936 +-0.13060097 +0.00831474 +-0.13315511 +0.19178571 +0.08588348 +-0.0014706226 +-0.17489296 +0.091514744 +-0.0076565924 +-0.08337503 +-0.12227583 +-0.13612531 +0.0014344024 +-0.22348347 +0.043316107 +-0.016802946 +-0.043206003 +-0.016900407 +-0.0728793 +-0.20264268 +0.12178755 +-0.0016094144 +-0.3531906 +-0.2450514 +0.01057229 +-0.06414014 +0.016339466 +-0.068876535 +0.14855385 +-0.19133876 +-0.3906823 +-0.07893236 +-0.082690835 +-0.47346908 +0.0143203465 +0.030784026 +-0.061881587 +0.17440927 +0.029723953 +0.119560465 +0.0862793 +0.058154576 +0.007928954 +0.07937437 +0.0038332527 +0.1654886 +-0.11568109 +0.024893058 +0.2162106 +-0.007807102 +-0.0024298665 +-0.060153816 +0.37924248 +-0.017607754 +-0.59470385 +-0.30190596 +0.096488506 +-0.09993832 +-0.18534295 +-0.22045188 +-0.13964884 +-0.15928143 +-0.11534416 +0.097607546 +-0.13055298 +0.11083039 +-0.001397327 +-0.017079586 +-0.23613934 +-0.0062474567 +0.103244886 +-0.01774652 +-0.017083831 +-0.03628152 +0.07083096 +0.021812882 +-0.22821279 +0.050535448 +-0.007845225 +0.015736906 +0.012989196 +0.2572788 +0.14351185 +-0.3302984 +-0.23884663 +-0.12834294 +-0.20320202 +0.18692417 +-0.15589367 +0.0057594436 +0.03971879 +0.09530203 +0.097847775 +0.05010765 +-0.00020084143 +0.11856239 +-0.18166289 +0.005088174 +-0.11842006 +-0.02396277 +0.0462247 +-0.06532988 +0.2038884 +-0.09198231 +0.106768444 +0.10770816 +-0.113549896 +-0.18768413 +-0.10643294 +0.13285929 +-0.29124907 +-0.00012889615 +-0.03681322 +0.06045871 +0.19264019 +-0.108608775 +0.016352529 +0.16148663 +-0.16176058 +0.020807577 +0.13458297 +-0.0145744765 +0.06389475 +-0.11940692 +0.15078051 +0.15319191 +0.26979017 +0.02129686 +-0.23244439 +0.029692648 +0.19926417 +-0.018395538 +0.050344612 +0.09692804 +0.048061874 +0.047622494 +-0.05227484 +0.09311953 +0.013401298 +-0.0067252982 +-0.07066434 +0.098561086 +-0.12493364 +0.06754662 +0.16446532 +-0.14863582 +0.18516186 +0.18825029 +-0.08462654 +0.120163955 +0.27854046 +0.23811089 +0.18148676 +-0.01450529 +0.09014534 +0.10135436 +-0.052717242 +0.023656752 +0.21361451 +-0.10163172 +-0.14008524 +0.11763825 +0.17327371 +0.05366971 +-0.047230925 +0.14518005 +-0.07789014 +-0.06663291 +0.10147353 +-0.2821237 +0.0042498135 +0.05211282 +-0.34689242 +-0.070674516 +0.068794325 +-0.09975126 +0.16456611 +0.23120092 +0.20937426 +0.016466197 +-0.08878468 +-0.16628656 +-0.02137105 +0.22408164 +0.119917884 +-0.14966427 +0.12414786 +0.062332865 +-0.110055424 +0.14861546 +-0.11719514 +0.04447678 +0.2818987 +0.29071116 +-0.22132382 +-0.05501792 +-0.022707535 +-0.07071263 +0.008992878 +-0.08570476 +0.038934793 +-0.17097172 +-0.22985378 +0.06459093 +0.05076795 +0.33815306 +0.018629935 +0.1715852 +0.19788656 +-0.20556661 +-0.0428628 +0.006471021 +-0.24527635 +-0.092688665 +0.07140533 +-0.07966861 +0.11049841 +0.12022714 +-0.04468629 +0.06418083 +0.3694679 +0.15742813 +-0.1576005 +-0.10547636 +-0.066666394 +0.1975813 +-0.026302528 +0.028226564 +0.18635933 +0.0073691267 +0.21619746 +0.12537883 +0.04324477 +-0.1474639 +0.111142926 +0.010780364 +-0.093536824 +0.22337809 +-0.028957864 +-0.11197862 +0.025180642 +0.062070895 +-0.08893919 +-0.020816464 +0.020798732 +-0.043530542 +0.09318486 +0.10533212 +0.07358281 +0.0130145205 +-0.02790083 +-0.06948842 +0.12266433 +0.023286887 +-0.2805415 +-0.22069883 +0.12025936 +-0.19713865 +0.11470305 +0.2679845 +-0.10595275 +0.0976354 +0.08799877 +0.020286757 +0.019154612 +0.06859335 +-0.118125424 +-0.010479923 +0.024940807 +-0.18058713 +-0.03787624 +-0.017912693 +-0.013879783 +-0.020215308 +-0.109140344 +-0.62145936 +0.0037408022 +-0.022165578 +-0.20858762 +0.20396043 +0.14458297 +-0.23469478 +-0.012624207 +0.21723324 +-0.50344276 +0.011987437 +-0.007436009 +-0.49365842 +0.03688841 +0.25816214 +-0.2705862 +0.07603054 +0.17336774 +0.19662222 +0.018145865 +0.23311344 +0.07521607 +0.039340205 +0.055560216 +-0.09947219 +0.0055481195 +0.093161285 +-0.26063725 +0.10936279 +0.20235305 +0.052734163 +0.12858199 +-0.0889009 +-0.04813291 +0.07126923 +-0.05505227 +0.12435499 +-0.38558182 +-0.44597545 +0.26862648 +-0.26168233 +-0.15969412 +0.12671378 +-0.20048484 +-0.1470506 +0.28055826 +-0.08793292 +-0.0935391 +0.010031637 +0.007559708 +0.1703836 +0.14718507 +0.0850763 +-0.07993024 +-0.04306974 +-0.124915615 +-0.34718645 +0.10214205 +0.01856865 +-0.43155482 +0.16323122 +0.050004024 +-0.29790002 +-0.09918129 +-0.06449967 +0.030678198 +-0.14095245 +0.035393447 +-0.042701725 +0.03349335 +-0.013788477 +0.108506106 +-0.092909805 +-0.021295467 +0.106211774 +-0.15742652 +-0.11410613 +0.2257067 +-0.20597091 +-0.095465824 +0.11063734 +0.22211608 +-0.04912567 +0.05320651 +0.032913495 +-0.005208409 +-0.06521287 +0.21908686 +-0.06871501 +-0.14377111 +0.4175114 +-0.046221018 +-0.4132721 +0.33421335 +-0.015126865 +-0.5447795 +0.105133444 +0.09335549 +-0.28271356 +0.2007974 +-0.015485636 +0.081704065 +0.0738451 +0.16416276 +0.16485074 +0.12564567 +-0.01397196 +0.18831976 +0.18818404 +0.3104741 +0.2375163 +0.111849114 +0.18809573 +0.3861758 +0.36586717 +0.07348019 +0.34842965 +0.10392641 +0.12571271 +-0.024207441 +0.2653074 +0.05825653 +0.06944823 +0.017388567 +-0.0049548387 +0.15708405 +0.053299412 +0.24413715 +0.36268032 +0.21380834 +0.10944847 +0.09779111 +0.22663157 +0.3658022 +0.15970816 +-0.16104223 +-0.01862738 +0.23962493 +-0.26831388 +0.1403397 +0.15003756 +0.14702244 +0.15799315 +0.31089818 +0.0065844944 +-0.024479473 +-0.012340771 +0.14544356 +0.25013837 +-0.012315251 +-0.21271601 +-0.14218262 +-0.023166813 +0.11641666 +0.2251171 +0.16634567 +0.2639092 +0.23526569 +-0.017637746 +0.2272236 +0.19077303 +0.3376953 +0.11723406 +0.13524687 +-0.056053028 +0.27679354 +0.24619573 +-0.1352821 +0.16952834 +0.31854582 +0.3420059 +0.029459108 +0.11197359 +0.032752402 +0.026911935 +-0.096447 +-0.032459125 +0.08720061 +-0.18610775 +0.16188347 +0.10839227 +0.22436015 +-0.060589768 +0.15368016 +0.13000706 +-0.19763593 +0.34313828 +0.07634582 +-0.4084249 +-0.18974838 +0.019724213 +-0.0066015134 +0.2486773 +0.12055299 +0.17836872 +0.1593752 +0.2173654 +0.05810101 +0.15562257 +-0.02104096 +0.51332986 +-0.26426384 +0.24251637 +0.2338325 +-0.051129684 +0.11938796 +0.15528718 +0.35988373 +0.21853915 +0.17959438 +0.19336781 +0.21021393 +0.005328473 +0.12821132 +0.15391523 +0.18135372 +0.093645975 +0.075745605 +-0.43893766 +0.22864887 +0.17496145 +-0.4542814 +0.20652719 +0.3185568 +-0.23537864 +-0.035577748 +-0.31326237 +0.10350337 +0.37941694 +-0.23556201 +-0.20907278 +0.5665124 +0.33860514 +-0.021696474 +-0.33211228 +-0.94648564 +-0.6344483 +-0.5494643 +-1.6669084 +-1.211805 +-0.35571423 +-0.90837806 +-0.34847397 +0.09074367 +0.1916834 +0.17467941 +0.40807286 +0.53618777 +0.25267625 +0.27593789 +0.55307096 +0.09252944 +0.16834119 +-0.34546235 +-0.57458323 +-0.05635484 +-0.49211907 +0.008176642 +0.14774376 +-0.095474616 +0.09113742 +-0.6761853 +-0.00893107 +0.25583673 +-0.906691 +0.19078614 +0.07157844 +-0.25443074 +-0.023413079 +0.0866289 +0.091855034 +0.40554258 +0.50118065 +-0.23038216 +0.18728046 +0.09653222 +0.12063527 +0.58114725 +0.15148729 +0.15814021 +-0.046093553 +0.12273455 +-0.13431652 +-0.8929948 +-0.021477876 +0.17744507 +-0.6301387 +-0.06453038 +0.25060004 +0.25413215 +0.5138127 +0.1530638 +0.2831867 +-0.030930383 +0.04074428 +0.11082299 +0.10412351 +0.14600955 +0.22052106 +0.32204327 +0.20824736 +0.2515695 +-0.28940693 +0.15411772 +0.07741556 +-0.25081095 +-0.30389884 +-0.5566423 +-0.33409622 +-0.35402408 +-0.15257072 +-0.12051842 +0.12875776 +0.111978896 +0.12768063 +0.15427202 +0.069957055 +0.058839448 +-0.25107878 +-0.40834135 +-0.33538273 +-0.6016089 +-0.9769711 +-0.6017867 +-0.22856042 +-0.574089 +0.46158975 +-0.21944372 +0.15970501 +0.013191441 +0.22877158 +-0.0520841 +-0.20908403 +-0.44057015 +-0.34143764 +-0.13559668 +-0.27342337 +0.18926686 +0.15835766 +0.13421713 +0.40399835 +0.33231297 +-0.12976089 +-0.040026695 +0.0992887 +-0.33160713 +-0.06582177 +0.029900568 +-0.420597 +-0.11967832 +-0.17502837 +-0.47469392 +-0.21352632 +-0.10738651 +-0.5869425 +-0.5831875 +0.0684915 +-0.097849995 +-0.57073355 +0.04322959 +0.07609557 +1.3074361 +0.49850935 +-0.19489962 +0.5184676 +0.4406722 +-0.24901588 +-0.13971746 +0.11549759 +-0.6515532 +-0.27841634 +0.2137273 +-0.49828276 +-0.27054167 +0.20579118 +-0.56596476 +-0.31457427 +0.2326429 +-0.3956233 +-0.08184416 +0.07998966 +-0.28751498 +-0.4510371 +-0.11089314 +-0.41867346 +-0.06659609 +0.2794311 +0.026859991 +-0.2530836 +-0.44506902 +-0.20409718 +-0.41369203 +-0.49481103 +-0.36027476 +-0.41232577 +-0.10174036 +-0.14023918 +-0.5056126 +-0.15845619 +-0.27442917 +-0.50304663 +0.28754026 +-0.7266008 +-0.4516886 +-0.077472456 +0.13263817 +0.37682983 +-0.05497095 +-0.39720848 +-0.12527356 +0.037994925 +-0.30093855 +-0.04671506 +0.16033931 +0.1715352 +-0.322519 +-0.22754563 +0.1931055 +-0.28692168 +-0.05468054 +-0.052580543 +-0.21739309 +-0.02824265 +0.17534742 +0.1713034 +0.20305856 +0.025283234 +0.31362566 +0.035489805 +0.12906866 +-0.11917657 +-0.23646823 +-0.2589989 +-0.2557984 +0.050854925 +-0.27326536 +-0.38949257 +0.10642827 +-0.008023658 +-0.005255634 +0.1575498 +0.7353432 +0.29807386 +0.13263391 +-0.11602542 +0.17941718 +0.4768557 +-0.15606679 +0.023842553 +0.12483115 +-0.050642464 +-0.4760518 +-0.52966017 +-0.38808706 +-0.20704247 +-0.20897494 +-0.002013546 +0.06317177 +-0.050235614 +0.014685832 +-0.19110295 +-0.43092135 +-0.11504639 +-0.6483069 +-0.35878614 +0.5577397 +0.24937451 +0.061980065 +-0.075705126 +0.2998023 +0.6084455 +-0.18507496 +0.20193517 +0.29937452 +-0.401817 +-0.15249243 +0.1013203 +-0.007455662 +-0.16855633 +-0.06659958 +-0.24162918 +-0.15293805 +-0.005760649 +0.14398998 +-0.12123878 +-0.015082602 +-0.022244098 +-0.15595998 +0.17598511 +-0.22718436 +-0.16395032 +0.108564146 +-0.034488715 +-0.022462776 +0.021805137 +-0.02918744 +0.08878193 +-0.17182037 +0.010287584 +-0.06689311 +-0.3108005 +0.3763063 +-0.113082536 +0.29371303 +0.12694018 +-0.12948343 +0.053720295 +-0.019644465 +-0.16264619 +-0.0036689092 +-0.44992033 +0.078002684 +0.12748583 +-0.50301933 +-0.06390764 +0.23212582 +-0.34424776 +0.1571261 +0.2528508 +-0.080231674 +0.2895845 +0.101598985 +0.08328059 +0.16852827 +0.26169288 +0.01204411 +-0.06972381 +0.010850667 +-0.17618622 +-0.39484006 +-0.124593645 +0.092992365 +0.08568046 +0.10646561 +0.101312436 +-0.18355757 +-0.061809313 +0.07751927 +0.19933449 +0.09190736 +0.15273738 +-0.079994544 +-0.18484691 +0.2625817 +0.07991481 +-0.17181407 +0.26781622 +-0.069479294 +-0.1259438 +-0.060057096 +-0.15157945 +0.14331365 +0.07731599 +0.049380783 +-0.19155635 +0.09271344 +-0.07077307 +-0.108428806 +-0.16335957 +0.1868142 +-0.33346394 +-0.049190324 +0.12592344 +-0.39422596 +0.265286 +0.51010406 +-0.35285303 +-0.22850989 +0.20767342 +0.057193603 +0.0028245556 +0.008024173 +0.161635 +0.025592422 +0.056146037 +0.13375616 +0.09163975 +-0.3356557 +0.55158305 +-0.2269002 +0.20159444 +0.19770049 +0.07379083 +0.23981272 +-0.46957272 +0.075481504 +-0.0979471 +-0.08335995 +-0.16566664 +-0.24544361 +-0.025923772 +0.26673466 +-0.06736217 +0.13722311 +0.14459293 +0.1448078 +-0.56284225 +0.18961616 +0.13737227 +-0.48243776 +0.09295384 +0.29386657 +-0.35539335 +-0.11759298 +0.030402664 +0.47463462 +-0.21586056 +-0.32850823 +0.36732912 +0.5964336 +-0.4826444 +-0.5341514 +-0.25945413 +-0.048120502 +0.09412871 +-0.5650685 +-0.0055811596 +0.8371938 +-0.70117414 +-0.24384181 +0.5472357 +0.19285943 +-0.30775854 +0.4691951 +0.51301587 +-0.63073385 +0.67530036 +-0.095432185 +-0.8884955 +0.6394983 +-0.056168135 +-0.8360367 +-0.33332497 +-0.2303855 +-0.49322176 +0.49038434 +-0.12984627 +0.5044888 +0.87796724 +0.103842005 +0.47279882 +0.4387 +-0.08928065 +0.43159777 +0.19011424 +-0.39106977 +-0.34368217 +-0.47471845 +0.6333627 +0.16448472 +-0.27291605 +-0.11428683 +-0.35392487 +-0.22599636 +0.20352283 +-0.050140433 +-0.40255213 +-0.18238035 +-0.5449153 +-0.83065504 +-0.11418991 +0.14206098 +0.5473787 +-0.24891584 +0.14530727 +1.0513381 +0.34465685 +0.28033432 +-0.24910794 +0.6395176 +-0.19020404 +-0.073397286 +-0.2151511 +-0.5796491 +0.14986064 +0.032844372 +0.6069235 +-0.64182246 +0.43877843 +0.37256506 +-0.36681187 +-0.36320436 +-0.09169252 +0.42121992 +-0.26942265 +-0.37693432 +-0.104186945 +-0.004261937 +0.01515068 +-0.14142008 +0.34876025 +0.37160587 +0.14324355 +0.6687166 +0.43827012 +0.08621965 +0.17209539 +0.16623856 +0.24078734 +-1.0485768 +-0.7747418 +-0.21679233 +-0.4400064 +0.32014027 +0.24892847 +-0.015251684 +0.37125173 +-0.5881099 +0.41010332 +-0.53190416 +-0.26231128 +-0.9353654 +-1.0194669 +-0.55011684 +0.16089025 +0.16872367 +-0.26958743 +0.7701208 +1.0933168 +0.6017869 +0.16602598 +0.12896058 +0.08543481 +0.08484388 +0.07465886 +-0.0704214 +0.020531734 +0.15687339 +-0.1405068 +0.21905655 +0.2938467 +-0.21353433 +-0.8249207 +0.36483106 +0.13703045 +-0.3623389 +-0.811849 +0.089423046 +-0.22693473 +-0.104451 +-0.006680019 +-0.16278313 +0.26958233 +0.34629482 +0.12659544 +0.13328148 +0.1873693 +0.031881936 +0.0023882815 +-0.22703272 +-0.13885948 +-0.715448 +-0.43389928 +-0.054624666 +-1.0384396 +0.13844715 +0.122782595 +-0.02918981 +0.066174746 +-0.43449518 +-0.40259987 +-0.6308672 +-0.28724584 +0.58147645 +-0.0416399 +0.07898638 +-0.28538835 +-0.07448697 +0.055248465 +0.24845955 +-0.10330376 +0.035823092 +0.12274193 +-0.120187186 +-0.010405983 +-0.2826596 +-0.28527528 +0.13096622 +-0.12970518 +0.16354865 +-0.10512549 +-1.3268256 +0.22253768 +-0.4781191 +-0.4704977 +-0.6975272 +-0.41945457 +0.13999394 +-0.4419666 +-0.16468358 +0.33503088 +0.099407144 +-0.09718584 +-0.162684 +-0.40048763 +-0.19261804 +-0.5460178 +-0.68585575 +-0.03353994 +-0.6655922 +-0.14895311 +-0.06634952 +0.1462898 +0.016399028 +0.18455878 +0.1207178 +-0.2121059 +-0.0035570853 +0.20604813 +0.25876203 +0.07394562 +0.36627537 +0.3052054 +0.113498375 +0.046525802 +0.110766225 +0.029417206 +0.039170388 +-0.1488412 +-0.13624294 +-0.14816707 +-0.10630808 +0.17466389 +0.22423646 +-0.15022972 +-0.17391245 +0.31243914 +0.009799279 +0.26799095 +0.19224785 +0.040119834 +0.09472737 +0.063275844 +-0.7423925 +0.25840572 +-0.24519563 +-0.764729 +-0.0020736814 +-0.0049537322 +-0.1261377 +-0.3309771 +-1.5382233 +-0.71171284 +0.34278142 +-0.06810888 +-0.17564349 +-0.013037599 +-0.08766073 +-0.027190175 +-0.0366165 +0.057747938 +0.2668348 +0.020860253 +-0.114079274 +0.24341695 +0.007018511 +-0.0709406 +0.14875975 +-0.0010499399 +-0.06428816 +-0.07999458 +-0.42053834 +0.00206846 +-0.1285349 +0.05887897 +0.1311333 +0.26498005 +-0.053033322 +-0.041062247 +-0.06935383 +-0.15248519 +-0.016439239 +-0.039283387 +-0.09905475 +0.0033013488 +-0.27521315 +0.038575783 +0.080299124 +-0.16585143 +0.28909922 +0.28963766 +-0.104563855 +-0.08161769 +0.042912297 +0.19735445 +0.114631206 +0.04823204 +-0.11105391 +-0.05945565 +-0.13440552 +-0.28720626 +-0.051712267 +0.22376713 +-0.39579585 +0.18491085 +-0.045474213 +-0.071762055 +0.09087675 +-0.037321 +0.038493123 +-0.049034875 +-0.22706151 +-0.13859522 +0.118751794 +0.16854906 +-0.096294135 +0.16529652 +0.1659462 +-0.029377287 +-0.013058757 +-0.10158143 +0.09555832 +0.0067405975 +-0.23201759 +-0.28959453 +-0.050982863 +0.005623227 +0.060364764 +-0.16540937 +-0.1941712 +0.042916603 +-0.081165925 +0.12726568 +0.070731744 +-0.0673 +0.05838299 +0.13500908 +-0.22423165 +-0.27948853 +0.03852578 +-0.17661257 +-0.004184696 +0.067526154 +0.022826748 +-0.063852936 +-0.18462916 +-0.13779578 +0.081017084 +0.0032973005 +0.03416071 +0.1409028 +0.30908415 +-0.11991292 +-0.18314403 +-0.049140505 +0.02361837 +-0.15174568 +0.08943249 +-0.2924508 +-0.13510536 +0.042506468 +-0.008810119 +0.104831584 +0.045045536 +-0.076588586 +0.16809049 +-0.28590646 +-0.021656595 +-0.22165819 +0.0045240573 +-0.14376862 +0.06598172 +0.05731412 +0.015601339 +0.036357187 +-0.16379233 +0.057838086 +-0.06446945 +0.031901207 +-0.15297873 +-0.27575397 +0.0555658 +0.10037337 +-0.08075868 +0.055190016 +-0.15341058 +-0.04459123 +0.1278704 +0.041193057 +-0.103251986 +0.1055609 diff --git a/tools/para/fc1_b b/tools/para/fc1_b new file mode 100644 index 0000000..10cc38a --- /dev/null +++ b/tools/para/fc1_b @@ -0,0 +1,61 @@ +60 +-0.193765 +-0.23972291 +0.07138973 +0.32630488 +-0.12837179 +0.15837212 +-0.171342 +0.15245913 +0.2655143 +0.5132081 +-0.36182725 +0.5721853 +1.1356937 +0.478751 +-0.19061308 +-0.4349855 +-0.037231974 +0.82266986 +0.021297721 +0.27819484 +-0.3700498 +-0.080103956 +0.118309975 +-0.120765805 +-0.21436372 +0.38247055 +0.9884826 +-0.4042391 +-0.21405952 +-1.1451919 +-0.07339987 +0.63600576 +0.39354753 +-0.14708714 +0.5753427 +-0.06053154 +0.6068468 +-0.24616803 +-0.18896966 +-0.06904445 +-0.137959 +-0.75066173 +-0.20227952 +0.17195949 +-0.13245444 +-0.10060697 +0.40073013 +-0.9563751 +0.031663556 +0.38514042 +-0.061627824 +0.14056061 +0.7515243 +0.7903934 +0.8401122 +0.29314804 +0.2987165 +0.39764544 +0.3022464 +-0.29335007 diff --git a/tools/para/fc1_w b/tools/para/fc1_w new file mode 100644 index 0000000..9222cea --- /dev/null +++ b/tools/para/fc1_w @@ -0,0 +1,33602 @@ +560 +60 +-0.013122083 +-0.005119514 +-0.004498063 +-0.010372358 +-0.0015462063 +-0.011947364 +-0.0047815265 +-0.01490322 +-0.0021117302 +-0.003158708 +-0.028844357 +0.0007332383 +-0.00535964 +0.002677766 +-0.002323955 +0.027012631 +0.01770751 +0.0039659264 +0.0046408596 +-0.016773658 +0.021172449 +-0.011845055 +-0.00024291639 +-0.007883366 +0.00049876224 +-0.011196645 +-0.013644056 +0.00246652 +-0.018202873 +0.029779235 +0.005734963 +0.014479881 +-0.00485894 +-0.015360083 +-0.00081844436 +0.01065602 +0.00091932877 +0.011258744 +0.004926638 +-0.004714697 +-0.014142091 +0.028732195 +-0.0031009032 +0.0043770247 +0.00629723 +0.007353461 +-0.011361701 +0.023230793 +0.0055751465 +0.0022116553 +0.0076656924 +-0.0100302445 +-0.016917638 +-0.007913446 +0.00075267965 +-0.0041150106 +0.0028203542 +-0.020047765 +-0.0013008399 +-0.013284281 +0.0063241962 +0.013540426 +-0.016872559 +0.013790404 +0.010345312 +0.0012572468 +-0.00744697 +0.007866437 +-0.0015246255 +0.0057859104 +0.009027036 +0.023734171 +-0.016207987 +-0.014149621 +-0.009598185 +0.013885112 +-0.023081921 +0.021984585 +-0.03798563 +0.03767296 +-0.0009493301 +-0.011070969 +0.008072672 +0.008034388 +9.7783406e-05 +-0.02289274 +0.011781768 +0.02765866 +0.0073120673 +-0.014273695 +-0.007259331 +-0.02140959 +-0.004299485 +0.0027303814 +0.011325519 +-0.013147384 +0.01904766 +-0.018983144 +-0.0042754696 +0.024354978 +0.0055331164 +0.011685832 +0.006440181 +0.016274769 +0.028505271 +0.024401406 +0.003530756 +0.010892767 +0.0058791894 +-0.009850829 +0.01025582 +0.021365412 +0.014559754 +-0.01839908 +0.0021719832 +0.014552756 +-0.0023389014 +0.009489694 +-0.012128824 +0.008567788 +0.0007990397 +-0.0028701632 +0.043467786 +-0.016195403 +-0.022216974 +-0.008305051 +0.009733877 +-0.0033886286 +0.0138222175 +-0.009752907 +0.01573515 +0.006901447 +0.027683249 +0.01430649 +0.013923864 +-9.099578e-05 +-0.0037941409 +0.018755985 +0.008959538 +-0.013427874 +0.0033100448 +0.010469684 +-0.012831348 +-0.017948406 +0.010193892 +-0.027743924 +-0.028137695 +-0.0040168175 +-0.026269417 +-0.010031991 +0.022337548 +-0.018567864 +0.009176048 +0.002527241 +-0.019547835 +0.015515414 +-0.00763674 +-0.013613188 +0.0037119887 +0.011232775 +1.1605379e-05 +0.0031736447 +-0.00053766294 +0.0071392767 +-0.0021169903 +-0.009346254 +-0.010594545 +0.014300648 +0.0019246393 +0.03723515 +0.008921528 +0.013290516 +-0.0073400596 +-0.014627877 +-0.011608368 +-0.028956272 +-0.013021879 +-0.009320922 +-0.0020638367 +0.0031630588 +0.0150821395 +-0.022239918 +-0.00036069888 +0.0328063 +0.0011441127 +0.0075507145 +-0.005949596 +-0.00378084 +-0.002400779 +0.0041533643 +-0.022360055 +-0.0010273212 +-0.020017713 +0.015425999 +0.02894521 +-0.030515097 +-0.0040309653 +0.016308017 +-0.006346201 +-0.00025293024 +-0.0018141067 +-0.029753596 +0.0015638955 +-0.00966631 +-0.005402545 +-0.0085886745 +-0.0066336417 +0.0013690982 +-0.01264378 +0.0061308546 +0.002518419 +-0.0019402972 +-0.010954852 +0.0026530675 +0.021332256 +0.0027914469 +-0.021020276 +-0.000828664 +-0.0175082 +0.014887974 +-0.014072418 +0.0040543345 +0.007427866 +0.040523242 +0.024300404 +0.001005887 +0.008914555 +0.017148837 +-0.0047303024 +-0.006979387 +0.010728241 +-0.034236383 +-0.014886146 +-0.0043999115 +-0.019115567 +-0.008233184 +0.0069902404 +-0.02001607 +0.002080264 +0.011187861 +0.0026393838 +0.005749902 +-0.024315028 +-0.02591255 +0.0064963405 +-0.015054179 +-0.0010233094 +0.017739445 +-0.021697484 +0.03217539 +0.010124252 +0.0071543274 +0.008835599 +-0.010455472 +-0.021367645 +-0.006434204 +0.0054113474 +-0.027495157 +0.0057376297 +-0.0023209315 +-0.018724306 +-0.0028298295 +-0.010789574 +-0.011296759 +0.00021267172 +0.018320393 +0.0028675245 +0.015267389 +0.012962332 +-0.0057809404 +-0.012155594 +-0.008178983 +-0.0026867513 +0.018116605 +-0.013373101 +0.016407201 +-0.011541172 +-0.021735774 +0.030027237 +0.004991614 +-0.017894775 +0.008999507 +0.0017219435 +0.020357883 +-0.012187193 +0.011125833 +0.003955708 +0.018713472 +-0.011965142 +0.027931483 +-0.005412323 +0.005503742 +0.016278138 +0.004522227 +-0.0009288418 +-0.029901858 +-0.0079341475 +0.017971229 +0.0020477015 +-0.002020915 +0.0063079474 +0.019822655 +-0.0051121013 +-0.01622213 +-0.015234675 +-0.030225968 +0.016983913 +0.0065429946 +0.008545224 +-0.013597753 +0.011828813 +-0.022371614 +-0.008252311 +-0.006013451 +-0.0025117854 +-0.0011986364 +-0.008709023 +0.0065832697 +-0.00172017 +-0.021109892 +0.028601883 +0.006300022 +0.00040365153 +-0.0067943875 +-0.026197005 +-0.011906527 +-0.036343753 +0.022408286 +-0.020405699 +0.013465545 +-0.0072671366 +0.014480593 +-0.004341908 +0.01982188 +-0.0021757067 +0.0098036295 +0.0016452693 +-0.010363597 +0.005747673 +-0.0077436334 +-0.012232356 +0.044243347 +-0.014591 +0.032023244 +0.016368806 +0.013030642 +0.009471331 +0.02740884 +0.00845589 +-0.0057972353 +0.022988657 +-0.023574075 +-0.012090559 +-0.009346648 +0.015676891 +0.0005102552 +-0.0037129 +-0.01694054 +0.005696908 +0.01021436 +-0.013741566 +0.012834406 +-0.0061874986 +0.017174656 +-0.0075104097 +-0.015386256 +-0.00036866698 +0.004281764 +0.0085461475 +0.0011765393 +-0.017898904 +0.030723706 +0.00021981786 +-0.022969468 +-0.0026359507 +0.017206712 +-0.02131945 +0.032602977 +-0.01548759 +0.019433482 +-0.010901777 +-0.044469852 +0.0076151104 +0.0027924143 +0.00526498 +-0.002040591 +0.021929877 +0.03815285 +0.0065268097 +0.016718695 +-0.017358601 +-0.018245615 +-0.023750981 +-0.007268345 +0.02220759 +-0.01660713 +-0.009044221 +-0.028452829 +-0.00079899863 +0.022254184 +0.0024635536 +0.0015937287 +0.00072413293 +0.019035596 +0.031414278 +0.0013339431 +0.0019282677 +0.005145247 +0.0084991725 +0.00011466162 +-0.011876089 +-0.024770565 +-0.031942893 +-1.350051e-05 +-0.0119290855 +0.030864298 +0.0026446234 +0.026030537 +-0.010045946 +0.00878484 +0.005806474 +0.015787775 +0.011409073 +-0.0115384 +-0.009314899 +-0.008391768 +0.0078054857 +-0.01488133 +0.023827013 +0.0043019312 +-0.00074493675 +-0.01659076 +-0.0016047746 +-0.025758443 +0.0017163522 +0.03910773 +-0.008658483 +0.0011271454 +0.006362727 +-0.016918842 +0.020275598 +-0.020858543 +0.0006920234 +-0.0058412347 +0.027022729 +-0.024501786 +-0.001849401 +-0.004950382 +-0.007837712 +0.0048690382 +0.0016162541 +-0.014532057 +0.01034324 +0.018607084 +-0.009201787 +-0.008541691 +0.0064992495 +-0.004922753 +0.0037021558 +0.0077876095 +0.007485677 +0.008004569 +0.00035292233 +-0.02112903 +-0.017877953 +-0.022848137 +-0.017359365 +0.016838202 +0.03162347 +0.011957675 +-0.0047839824 +-0.024375482 +0.0013459779 +-0.022658342 +0.00067073497 +-0.007018796 +-0.006399949 +0.0054218154 +0.005769655 +0.01786061 +0.009193869 +0.0043337727 +0.0048944037 +-0.008392957 +-0.0036451863 +-0.012179099 +0.0072991815 +0.004955378 +0.01848178 +0.012636607 +-0.00096140057 +-0.00068160123 +0.013698821 +0.008137215 +-0.032585062 +0.0029213037 +0.006128923 +0.011447266 +-0.01194151 +-0.0004412616 +-0.008316327 +0.013348097 +0.013314367 +0.010071076 +0.0030154148 +-0.0068845334 +0.002107744 +0.00419078 +-0.010576121 +-0.0012764023 +-0.006039677 +0.018535297 +0.011139251 +0.010521975 +-0.011099777 +-0.02892943 +0.007528074 +0.001441695 +-0.0011969492 +-0.0013474544 +-0.025906505 +-0.018757876 +-0.013356584 +-0.0043810783 +-0.024407303 +-0.005402459 +-0.00020869184 +-0.008909093 +0.010830742 +-0.009305871 +0.00782623 +0.006466927 +0.023536038 +-0.0015052422 +-0.00463907 +0.0154139055 +-0.013268704 +0.018959552 +0.010009398 +0.010969315 +-0.009983599 +0.008204034 +-0.009554803 +0.031134007 +-0.0068881637 +0.01865647 +0.019457914 +-0.008806822 +-0.0025644165 +-0.006719752 +-0.018369626 +-0.00078001345 +-0.00016214832 +-0.029785626 +-0.016581772 +0.04169289 +0.0010626614 +0.004100702 +-0.0024715865 +-0.0028881987 +0.009583637 +-0.015670788 +-0.0069858846 +0.007820773 +-0.012026378 +-0.00504339 +0.017473912 +0.021498594 +-0.013253261 +-0.00465914 +-0.016904105 +-0.02337442 +-0.023702532 +0.0060077836 +0.024355255 +0.011665001 +-0.017787497 +-0.0054339822 +-0.0050291303 +-0.000408291 +0.0025877953 +-0.010921226 +-0.005131841 +-0.016911868 +0.012111531 +0.00045545032 +-0.0035363934 +0.023460727 +0.009512854 +0.012762519 +0.0116609605 +-0.016894115 +0.005318345 +8.604689e-05 +-0.008155604 +-0.01617082 +0.006618292 +-0.02365871 +-0.0049762577 +0.011895385 +0.008973219 +0.0008179435 +-0.010868948 +-0.031220892 +-0.003982644 +-0.007942183 +0.0016159669 +-0.003966932 +-0.00886101 +0.0056597767 +0.0067146146 +-0.00583454 +-0.0066442583 +-0.0019710504 +-0.021951556 +0.027753871 +-0.0066696294 +-0.03075205 +-0.01602804 +-0.004494369 +-0.0067823515 +0.018747939 +0.0074978378 +0.006256331 +-0.010699635 +0.012920927 +0.009547181 +-0.019953795 +0.0065703904 +-0.010078674 +-0.002572023 +0.007624435 +0.0044790697 +-0.023406895 +-0.028779209 +0.0036616365 +-0.0022152707 +0.008211224 +-0.015371337 +-0.013712036 +-0.000814124 +-0.002650514 +-0.015561319 +-0.015140601 +-0.028055932 +-0.009569177 +0.022177922 +-0.0009309174 +0.005152219 +-0.014146967 +0.013181103 +0.010091614 +0.02313987 +0.018558694 +-0.009914781 +0.009455412 +-0.006211641 +-0.0051141265 +-0.009327715 +0.0056362837 +-0.022308217 +0.0055270893 +0.0091102505 +-0.010449196 +0.000591906 +0.0003102215 +0.04666795 +-0.016841678 +-0.017101357 +-0.026326908 +-0.03623739 +-0.0072295386 +0.008160032 +-0.004126047 +-0.018502705 +-0.018749405 +-0.0039585093 +-0.025701875 +0.013001225 +0.004082864 +-0.0004453568 +0.0034301514 +-0.00030039166 +-0.020270083 +0.007938025 +0.03541898 +0.0072702956 +-0.0070628454 +-0.0026289506 +0.0049466696 +0.0016126751 +0.0037813596 +-0.0039786156 +-0.014515571 +0.010263454 +-0.008242862 +-0.009020567 +0.010181126 +0.0016038793 +-0.016193546 +-0.014194373 +0.009633626 +-0.006178892 +0.016721558 +-0.020553494 +-0.006801845 +0.02292621 +-0.0033010836 +-0.00166486 +-0.00075441884 +-0.009886825 +-0.005051983 +0.0077521587 +0.0077773505 +-0.00053881045 +0.011787551 +0.004515002 +-0.019202296 +-0.0056005926 +-0.007912364 +-0.0006610454 +-0.018729612 +-0.012827029 +0.027547425 +-0.0027051163 +-0.0042680455 +0.025066203 +-0.010955046 +0.017256085 +0.0056437263 +-0.0064799255 +0.025797278 +-0.002414591 +-0.0126145035 +-0.0039218985 +-0.008123871 +-0.01751606 +0.008690565 +-0.009477565 +0.028321087 +0.00049403147 +-0.046230745 +0.0043416494 +-0.0032091872 +-0.0022159785 +0.008977489 +0.019667108 +0.014729957 +0.010831342 +0.013930706 +-0.029854823 +-0.0243206 +-0.01810248 +-0.008780813 +0.03394307 +-0.0071277595 +-0.025817258 +-0.013484745 +-0.0102773495 +0.0059312237 +0.0069765314 +0.008061895 +0.013394546 +-0.010561945 +0.0075643165 +0.00086674717 +0.015879301 +-0.0053726886 +-0.017191725 +-0.012033192 +-0.004912471 +0.020892743 +-0.013997919 +0.012443787 +-0.006228048 +0.010785368 +0.015583846 +0.0051881904 +0.004064889 +0.0026641688 +-0.019946534 +0.020340009 +-0.008008191 +-0.022989076 +-0.0014197436 +0.01693489 +0.01467293 +-0.004823364 +0.018929916 +-0.016532354 +0.021588665 +-0.03588402 +-0.006136511 +-0.02355624 +-0.0085711125 +0.0524796 +-0.002935378 +-0.0147366095 +-0.0007349205 +-0.028879652 +0.020268492 +0.0055391775 +-0.006028754 +-0.016106034 +-0.015089077 +0.0040214653 +0.0049826982 +0.0037695896 +0.00514299 +-0.00093432574 +-0.005096355 +-0.002718305 +-0.038583655 +0.0024224208 +-0.031584803 +0.008998752 +-0.012753313 +-0.028297788 +0.010193192 +0.014517687 +0.015200745 +0.00546941 +0.018796878 +-0.03971774 +0.02809853 +-0.008632156 +-0.024910519 +0.003502904 +0.008304305 +0.0015192248 +0.028828308 +0.02683344 +-0.0030825175 +0.00665721 +-0.010122585 +-0.027034601 +-0.010292113 +-0.012721886 +-0.007929735 +-0.011686858 +-0.030995673 +-0.020835746 +-0.0104093235 +-0.0066539138 +-0.0075068045 +-0.014676409 +0.0031764994 +0.0070791603 +0.011248995 +-0.013630026 +-0.00051671383 +-0.0027489974 +-0.00874839 +0.00024012814 +0.023023056 +-0.009915018 +-0.0037992876 +-0.0014990688 +0.0004871222 +0.009002539 +-0.003034682 +-0.037627324 +-0.007397737 +-0.009102575 +-0.017732535 +-0.0011714757 +0.0047234576 +-0.009115533 +-0.016562453 +0.018125825 +-0.006378616 +-0.016501978 +-0.00016549419 +-0.01636667 +0.010728213 +0.018284535 +-0.020714503 +-0.0021581156 +-0.016377632 +-0.01515481 +-0.0055408203 +0.028660981 +-0.0013848157 +-0.0060303374 +-0.0014249604 +-0.0010662737 +0.00968117 +0.03525646 +-0.002686144 +-0.013311639 +0.005529035 +-0.002153218 +0.019506654 +0.022752265 +-0.008517483 +-0.0070478474 +-0.007719033 +-0.01687158 +-0.00330276 +-0.0077875243 +-0.0151779875 +0.0028873105 +-0.0149484165 +0.02778204 +0.014746595 +-0.007522134 +-0.0014212205 +0.0028227204 +-0.030028503 +-0.039764125 +0.021121465 +0.019206401 +-0.028930487 +0.03093214 +0.015468579 +-0.008845028 +-0.0054247314 +0.045905624 +-0.03467628 +-0.017469438 +-0.0030092392 +0.0002467392 +0.0020501951 +0.0049054003 +0.020936929 +-0.01915237 +-0.0075582503 +0.040123884 +0.0051602777 +-0.0041634645 +-0.012682003 +-0.014303927 +-0.028507337 +0.003490528 +0.0002817013 +-0.011736438 +0.009128345 +0.009152361 +-0.0045262803 +-0.00704073 +-0.011507869 +0.011897181 +0.00027744676 +0.007947387 +0.02749908 +-0.0053070653 +0.022256223 +-0.005754126 +0.0053861155 +-0.009343602 +0.023933372 +-0.033060074 +-0.007917274 +-0.0041856146 +-0.011949344 +0.0124129 +-0.0024331696 +-0.005795036 +-0.024566527 +-0.012622554 +-0.015626514 +2.1005964e-05 +0.010368165 +-0.005680429 +0.010361188 +0.017007783 +-0.008740755 +-0.010393678 +-0.0021793528 +0.0031977626 +0.021707809 +-0.028401649 +0.013147302 +-0.01750399 +-0.015804403 +-0.00400666 +-0.0028563167 +0.0024770463 +-0.0017515097 +-0.018003639 +0.015157707 +-0.006942258 +-0.0011174339 +-0.0049982807 +0.011589768 +-0.0027780433 +0.01703952 +-0.0001369695 +0.017601922 +0.0072484864 +0.016890636 +-0.00796789 +-0.0023020632 +0.023333425 +-0.009523976 +0.010204101 +9.882143e-05 +0.011483175 +0.011432394 +-0.011668319 +-0.014836803 +0.004173954 +0.012563975 +0.0071348012 +0.009663059 +0.00028185337 +-0.00051263586 +0.012046794 +0.011752629 +0.0021254413 +-0.0050411527 +-0.00011363332 +-0.01753438 +-0.020936387 +0.012352284 +-0.0072558215 +-0.0059944964 +0.0016083914 +0.009943433 +0.010208295 +-0.047089223 +0.0041553318 +0.0013445723 +0.013214059 +0.023778133 +-0.009582166 +-0.01268209 +0.0035982984 +-0.021544123 +-0.02206764 +0.002622185 +0.004579969 +-0.007700008 +0.014896706 +0.0034073093 +-0.015234375 +-0.0011631163 +-0.008839739 +0.009503126 +-0.016711531 +-0.0012293245 +0.009546258 +0.0012326246 +0.0072622644 +0.01588904 +-0.027007503 +0.004528822 +0.008933932 +0.025677616 +0.015328387 +-0.00154916 +-0.0135862 +-0.022554426 +0.029938418 +-0.0013599978 +-0.0079951035 +0.013941389 +0.015156934 +-0.006748513 +-0.00883957 +-0.016675957 +0.024887366 +0.0019058571 +0.037720572 +0.024446916 +0.006708591 +0.0068995943 +0.008240488 +0.00226446 +0.0202181 +0.001968133 +-0.015451728 +-0.008788731 +-0.02883151 +-0.014124543 +-0.015127111 +-0.017642915 +0.007382343 +-0.0033668752 +-0.0040499093 +0.009338097 +0.0019424316 +-0.001108458 +-0.0059076287 +0.005033321 +0.015023128 +-0.0099920705 +0.014615967 +-0.0066368813 +0.007597826 +0.01328474 +-0.005531639 +-0.0031237933 +0.00038158614 +0.012745775 +-0.013532372 +-0.0058462527 +-0.0040183966 +0.0066116853 +8.972535e-05 +-0.011390606 +0.012828537 +0.0062144333 +-0.0025305187 +-0.010381466 +0.01002186 +0.016679881 +-0.009883299 +0.0068938574 +-0.025927126 +-0.0035233728 +-0.018742025 +0.021493109 +-0.014774771 +0.0034224591 +-0.0047997725 +-0.012727111 +-2.0452413e-05 +0.011282424 +0.014362074 +0.0042763413 +0.014631013 +-0.0036473714 +6.341179e-05 +-0.020799216 +-0.0102049 +0.0016766613 +0.0075253607 +0.0005022949 +-0.011149101 +-0.007925821 +0.0123619195 +0.0041800984 +-0.001571981 +-0.0150541505 +0.005354147 +0.00062707963 +0.006418866 +0.019958738 +-0.006588649 +0.02209541 +0.010970073 +-0.007300431 +-0.018243197 +-0.010239301 +-0.012821232 +0.02562644 +-0.020024791 +0.0062274276 +0.0076035843 +-0.030504456 +-0.01682249 +0.01801415 +-0.009867261 +-0.00027596936 +0.024665287 +-0.0009748556 +-0.022505747 +0.0042433324 +-0.018034516 +0.0041223434 +-0.0115327975 +-0.0007107145 +0.0029272693 +0.014972594 +-0.018664131 +-0.024383936 +0.009814625 +0.008033651 +0.029153384 +0.021594102 +-0.017400589 +-0.014397103 +0.0076698107 +0.006632161 +0.019841475 +0.008214593 +-0.020855915 +-0.023400098 +-0.01653223 +0.00083440536 +0.036258366 +-0.004863726 +-0.009595165 +-0.004647895 +0.011310628 +-0.009195918 +0.017776577 +0.02279118 +-0.010693369 +0.0016370785 +-0.0114486925 +-0.021603907 +0.008278164 +-0.018460596 +-0.016241703 +0.00025936103 +-0.01743669 +0.001316867 +-0.0004100592 +-0.059465334 +-0.0043766187 +-0.03318215 +0.006201133 +-0.008054341 +-0.022543808 +0.004690449 +-0.009666838 +0.005798204 +6.0114486e-05 +0.00018200718 +0.016799074 +-0.004400218 +0.009719701 +-0.018958466 +0.022528034 +-0.0064869034 +0.02625589 +-0.0015380722 +-0.038194533 +0.009901565 +-0.03321985 +0.006418674 +-0.009173233 +0.0066207163 +-0.043723427 +-0.010494858 +0.045960654 +-0.0034745582 +-0.003693053 +-0.010875293 +-0.021834303 +-0.014159422 +0.022448462 +0.0036377301 +0.0030354888 +0.036355715 +-0.0058024586 +-0.026982937 +0.0039085513 +0.0014292881 +0.007349254 +-9.477051e-05 +0.016071955 +0.02559784 +0.00041339698 +0.0071044243 +0.009952279 +0.018926932 +0.023991236 +0.012555096 +-0.005992307 +-0.0032755935 +-0.0031961906 +-0.006158897 +0.024858823 +0.0015400572 +0.02173133 +0.0037676608 +-0.010077693 +0.032158047 +-0.00011978501 +-0.0033874365 +-0.002632291 +-0.012083335 +0.031122873 +0.023274114 +-0.02217841 +-0.019448034 +0.001607712 +-0.012818306 +-0.039260205 +-0.013016209 +-0.01601542 +-0.017932065 +0.02988132 +0.0007344986 +-0.036626328 +0.009723864 +-0.012001797 +0.019362789 +-0.011834398 +-0.010699146 +-0.022402447 +0.010227592 +-0.0166318 +0.021077037 +0.0040160557 +-0.0027651635 +0.007685681 +0.020756682 +-0.00678388 +-0.004311806 +0.008109457 +0.003163791 +-0.0114969555 +0.0023330501 +-0.0026142332 +0.0007315909 +-0.009274974 +0.005875694 +-0.03303303 +-0.011005336 +0.018978601 +0.0060920618 +-0.025166592 +0.005276635 +0.03511775 +0.015650794 +-0.0028365627 +-0.0085761985 +-0.01080577 +0.024022786 +0.0012537321 +-0.0010657023 +-0.032237414 +-0.018543933 +0.001441689 +0.008372175 +0.02160998 +0.02059323 +-0.0006213044 +-0.024109531 +-0.02536877 +-0.018479286 +-0.029887168 +0.009273889 +0.0057060565 +0.027155325 +0.014299585 +0.0007404716 +-0.0012329898 +-0.0019478762 +0.019104458 +-0.03732893 +0.0020656553 +0.012881787 +-0.00042218756 +0.003886966 +-0.033852857 +-0.023509957 +-0.00622413 +0.017766695 +0.012764526 +-0.0057764654 +-0.004514386 +-0.007006158 +0.011494086 +-0.008119029 +-0.01135929 +-0.0145160165 +0.021945754 +0.009068927 +-0.0075973775 +-0.009529935 +0.0007457428 +0.013383041 +0.0010886589 +0.013904968 +-0.012671956 +-0.022394765 +-0.004296758 +-0.018587003 +-0.0040999437 +-0.029804422 +-0.007609115 +-0.0154527305 +-0.012430693 +-0.010818985 +0.017608006 +-0.005969272 +-0.006563428 +-0.014808181 +-0.0015453214 +0.016687224 +0.00916321 +-0.009091741 +0.029574122 +0.0070153764 +-0.030812446 +-0.021163445 +-0.020595858 +-0.0038240692 +0.0028642903 +-0.012958041 +0.010687636 +0.028000478 +-0.01751256 +-0.004183428 +0.009516652 +-0.032122903 +-0.0042734505 +-0.01995172 +0.003900802 +-0.020958088 +0.033146348 +-0.0025892074 +0.0026983998 +0.028994761 +0.010944391 +0.009382535 +-0.005201324 +0.005727693 +-0.004298866 +0.0021267696 +0.00887797 +0.011865172 +-0.01336289 +0.0020528517 +-0.01238468 +-0.0053286343 +-0.00541963 +-0.018487409 +0.006091892 +0.044305 +0.0002794797 +-0.006307661 +0.01926535 +-0.01143979 +-0.018564036 +0.0028189067 +-0.021494253 +-0.0064568585 +-0.015223728 +0.008358201 +0.02602257 +-0.004503051 +0.0015153744 +0.008275408 +0.024291057 +-0.0030262065 +0.015829705 +-0.007644913 +0.021526303 +0.0006460423 +-0.016516283 +0.010634448 +-0.007303309 +0.012500899 +-0.008675816 +0.016014121 +0.0017540073 +-0.01947832 +-0.0408642 +0.013999005 +-0.01731454 +-0.015113279 +0.009090408 +-0.0007522045 +0.004423677 +-0.002294326 +-0.00425041 +-0.014985903 +-0.0012376306 +-0.03559604 +0.022059772 +-0.0016768315 +-0.02509014 +-0.01274794 +-0.017680898 +-0.03235382 +-0.0112642 +0.020169428 +0.007575595 +-0.0054481262 +0.026144946 +-0.009359791 +0.00073882804 +-0.014809967 +-0.0019776544 +-0.00029193048 +0.015350451 +0.0071879816 +-0.037893094 +-0.026321456 +0.017122105 +0.02646602 +0.018534826 +-0.0050072027 +-0.011831955 +-0.02926832 +0.005252886 +-0.011500255 +-0.019832466 +-0.0053788577 +-0.01644255 +0.0024635182 +-0.0011833011 +-0.021958709 +-0.015837282 +0.009241246 +0.005746536 +0.0067852647 +0.009327148 +-0.0039926735 +0.005054284 +-0.014354867 +0.022816708 +0.014985398 +-0.023469705 +0.0028201493 +0.0002443288 +-0.018565044 +-0.012679252 +-0.0102461055 +0.001273939 +0.0376128 +-0.02100605 +-0.007637281 +0.015231249 +-0.037404552 +0.009148774 +-0.013712077 +0.029839216 +-0.02086355 +-0.016113853 +-0.012140329 +-0.011157412 +-0.0030884175 +-0.018268464 +0.019169195 +0.015041319 +0.009841574 +-0.0037552249 +-0.01098269 +0.03311294 +0.028102193 +-0.008430714 +0.0056101508 +-0.0117911715 +-0.023761123 +0.0036979925 +-0.022481428 +-0.0195098 +0.02062908 +-0.00791494 +-0.0063846367 +0.019470982 +0.003552058 +0.0023754635 +0.015203366 +-0.0054366207 +0.008920715 +0.0058849086 +-0.028745715 +0.01622122 +-0.0033891979 +-0.028509997 +-0.030479306 +-0.001651148 +-0.001618438 +0.021145845 +0.006303399 +0.011294828 +-0.021783296 +0.0017311709 +0.0053753904 +-0.0036149847 +-0.013071554 +-0.0024478307 +0.008578531 +-0.009622709 +-0.0012436017 +0.026101463 +0.0076294616 +-0.0134780025 +0.0030903302 +0.005087786 +0.0087697655 +0.0036171917 +-0.030637365 +0.021300089 +0.011400436 +-0.014704833 +-0.01752336 +0.00709969 +-0.021786015 +0.009167399 +-0.015158878 +-0.0007330557 +-0.000102877966 +-0.052258108 +0.006712477 +-0.003189035 +0.0021993963 +-0.017869608 +0.030188864 +0.02403378 +0.011144411 +-0.0031587295 +-0.01103123 +-0.017844388 +-0.008938295 +-0.0024817558 +0.01015369 +-0.016603762 +0.00039353574 +-0.007942986 +-0.0220849 +0.022427289 +0.0044514933 +-0.0131895 +0.0016304269 +0.0143736005 +0.022275986 +-0.015166476 +0.0032149758 +-0.0009434911 +0.008139387 +0.0030035172 +-0.0056894636 +0.005403851 +-0.025255691 +-0.00986646 +-0.013939372 +0.010990632 +0.0017882576 +0.02737386 +-0.009370338 +0.013089843 +-0.0032949937 +-0.019731168 +-0.0012736282 +-0.036491554 +-0.0057576336 +-0.00017836688 +-0.0100332415 +0.0048157587 +0.0018504225 +-0.010324824 +-0.0036616207 +-0.013903531 +-0.017723477 +-0.025861464 +-0.02147532 +0.0690404 +-0.0077717085 +-0.016704757 +-0.0028343436 +-0.009630786 +0.018774718 +0.020429265 +-0.019529574 +-9.492419e-05 +0.0038084064 +-0.027956739 +-0.00652819 +-0.0112431925 +-0.01115799 +-0.00078469253 +0.003332866 +0.028841726 +-0.0041550286 +-0.00015865386 +-0.008760121 +-0.0044376138 +0.0045601144 +0.004059051 +0.011146798 +-0.01131461 +-0.019333016 +-0.036002062 +-0.011768414 +0.009573164 +0.014500397 +-0.004241748 +-0.0033494493 +0.043697525 +-0.010965063 +0.0093298135 +-0.0075083384 +0.0172846 +0.004955994 +0.016965719 +0.012848345 +-0.010815772 +-0.009329512 +-0.0057763197 +0.007499406 +-0.03437504 +-0.018813426 +-0.011646715 +0.002213801 +0.022254141 +-0.004126294 +-0.0014388135 +0.0035008104 +-0.032530133 +0.026758268 +0.00821433 +-0.044699486 +-0.006558514 +0.0075775213 +-0.03642473 +0.038297392 +0.028131738 +0.008985784 +0.007864994 +0.005081507 +0.009379492 +0.027901182 +-0.0070101274 +0.0033373577 +-0.027840653 +-0.021767097 +0.016475365 +0.0103139365 +0.015397237 +0.00029034086 +0.0047983094 +0.005644613 +-0.028868468 +-0.017331887 +0.022587508 +0.008725926 +0.011295044 +-0.034430463 +-0.013095709 +-0.017341318 +0.0053592855 +0.0071145245 +0.01811699 +-0.006995586 +-0.0005144041 +-0.0006115175 +0.0057546003 +-0.0058603995 +0.02171489 +0.014500086 +-0.008668443 +-0.015042093 +-0.035844035 +-0.003468772 +-0.007745997 +-0.01637508 +-0.013189922 +-0.001655956 +-0.042200547 +-0.019737562 +0.015690368 +0.010346156 +-0.00027679672 +-0.0018069773 +0.00639256 +0.0065433146 +-0.016629057 +0.04181653 +0.0029187973 +-0.010993296 +-0.022416309 +0.025031814 +-0.019863399 +-0.03476707 +0.0154495975 +-0.0012837641 +-0.008460995 +-0.011787513 +0.017125668 +-0.010764387 +-0.038468514 +-0.012132023 +-0.017646706 +-0.010169582 +0.03207626 +0.026340226 +-0.02684716 +-0.020504976 +0.015476922 +-0.002254744 +0.0118729705 +-0.0135987075 +-0.0416273 +-0.024336942 +-0.0028374428 +0.01819508 +0.008774913 +0.0023599474 +-0.0064456565 +-0.013948672 +-0.00292746 +-0.0032646842 +0.040372342 +0.0006655015 +-9.129331e-05 +0.007717019 +-0.00037547617 +0.0011525429 +0.0022237306 +0.014197856 +-0.009626859 +0.025983682 +-0.010280831 +0.002659979 +0.025897637 +0.003376505 +-0.0042555816 +-0.0056538503 +0.011935838 +0.004452707 +-0.017770804 +0.038454093 +-0.0058695255 +-0.010114225 +0.002228165 +0.007232423 +0.040378433 +0.02068094 +-0.0069590146 +0.0134003125 +0.015374242 +-0.020979125 +-0.05086791 +-0.008455972 +0.0042772475 +-0.009424646 +0.00072292524 +0.0011279096 +-0.02521762 +0.023884611 +0.0041566803 +-0.006789985 +0.00013445862 +-0.012049795 +0.0008332631 +0.00828967 +-0.008260249 +0.010966393 +-0.0060685035 +-0.002930581 +0.00681372 +-0.009326454 +-0.012094348 +-0.004506246 +0.00846141 +-0.0039932965 +-0.010934425 +-0.0013518694 +-0.015248638 +0.0092944205 +-0.02399837 +0.017759426 +0.028466271 +-0.0010232538 +0.01878378 +0.0124461865 +0.0046436894 +0.008260611 +0.009423468 +-0.0080914935 +-0.019685188 +-0.004522986 +0.0014401665 +0.023949368 +-0.008218308 +-0.022468561 +-0.006644235 +-0.0021356114 +0.0016672759 +-0.004545341 +0.015595187 +-0.028243931 +0.016471304 +-0.0052226763 +-0.007947367 +-0.0073712207 +-0.031997435 +0.029879821 +-0.017099218 +0.00450825 +-0.01477942 +-0.012351768 +0.023810677 +0.029992463 +0.0019962317 +-0.014512495 +0.0012176152 +0.0053108167 +-0.023135433 +0.011209741 +-0.02396348 +-0.010152059 +-0.023902722 +0.0075901863 +-0.01575319 +0.043523513 +-0.008003624 +0.0063724825 +0.007555859 +-0.019658782 +-0.008421979 +0.0069938153 +-0.0025470282 +-0.025591988 +0.0010407184 +0.02341683 +-0.0041614035 +0.032421365 +-0.004800688 +-0.021037962 +-0.0020881728 +0.0078163175 +-0.0162416 +0.003796842 +0.009356583 +0.021087585 +-0.0038779033 +-0.000545836 +0.006413127 +0.03189608 +0.034999374 +-0.002119619 +0.023544207 +-0.018019462 +0.011350461 +-0.04157119 +0.0037494402 +-0.0140652945 +0.029712887 +0.005156045 +-0.016460225 +0.008027501 +-0.012246205 +0.015146729 +0.0042249407 +0.019690208 +-0.0031946828 +-0.014127951 +0.012478023 +0.028924912 +-0.0041817585 +0.03741179 +-0.012180649 +-0.009012426 +0.0093672285 +0.008917826 +-0.028168106 +6.841667e-06 +0.024291161 +-0.018747492 +0.013791763 +0.0026054117 +0.0021012737 +-0.0007730689 +0.0029210623 +-0.014377143 +-0.010858208 +-0.016448155 +-0.000785519 +0.00097232603 +-5.5900586e-05 +0.004528336 +-0.0072814017 +0.018326955 +-0.011768591 +-0.017796895 +-0.027463254 +-0.020878714 +0.01355129 +0.0013068501 +0.006017945 +0.0037131265 +0.042946808 +0.0064845397 +-0.01333344 +-0.022325203 +0.015685892 +-0.0066819265 +-0.00941212 +0.0073349397 +-0.054938655 +0.0044556004 +0.0035345482 +-0.014145361 +-0.027994942 +0.010083677 +0.005217889 +-0.003973235 +0.014667496 +0.015893681 +0.0077445675 +0.01273683 +0.0023488686 +-0.005771816 +-0.025461014 +0.003287852 +0.0038822421 +0.024606997 +-0.018359834 +0.028648928 +0.023577623 +-0.052671373 +-0.017726794 +0.012338508 +0.0022992382 +0.0023796426 +0.022068042 +0.012181434 +-0.03071121 +0.011677324 +0.004871953 +0.0052870237 +0.0050796587 +-0.008532718 +-0.035413023 +-0.008374351 +-0.01894276 +0.00960106 +-0.010238524 +0.007731509 +0.016486969 +0.015834691 +-0.006264978 +-0.010221548 +-0.0054122177 +-0.042048108 +-0.009146179 +-0.027983984 +-0.017371576 +0.010517686 +-0.0020632904 +0.023980241 +0.018432066 +-0.008474064 +-0.0022099926 +-0.0015730782 +0.011540183 +0.008473175 +0.043353148 +-0.0049278224 +-0.038273323 +-0.015763566 +-0.011535578 +0.01612579 +-0.023758087 +-0.027142346 +0.01912156 +-0.005691427 +-0.028322926 +-0.019448917 +0.0038695892 +-0.020958455 +0.023426786 +-0.016844373 +-0.011675193 +-0.0013558619 +-0.03694335 +0.026831433 +-0.01935485 +-0.010083848 +-0.009906299 +-0.00045515303 +-0.018420406 +0.006236211 +0.009206842 +-0.010143069 +6.955949e-05 +-0.011987393 +-0.01825631 +0.005537647 +-0.012833273 +0.008205769 +-0.028606193 +0.016251275 +-0.020283997 +0.02898392 +-0.027113423 +-0.01967389 +0.030948075 +-0.006734727 +0.018686797 +0.010495467 +-0.02411844 +-0.024183702 +0.022772618 +0.015934613 +0.014533015 +0.05270759 +-0.010925911 +-0.032922056 +-0.008230848 +0.005763938 +0.01966305 +-0.007972181 +0.012409039 +0.020705808 +-0.013402942 +-0.0005537334 +0.010619468 +0.0317613 +0.037011165 +0.003545019 +-0.008911675 +0.006965747 +0.016356448 +-0.043396786 +0.014364917 +-0.009809562 +0.0017951847 +-0.02956008 +-0.001279277 +0.041391514 +-0.0079044625 +-0.029760515 +0.002149405 +-0.011435932 +0.02718638 +0.0036074608 +0.020822963 +-0.0061649284 +0.0036250432 +-0.012437177 +-0.03183349 +-0.031317696 +-0.006459511 +-0.035154823 +0.029137997 +-0.0057982425 +-0.024989707 +0.0015365136 +0.016193314 +0.013663193 +0.011313419 +-0.021555372 +0.004645447 +-0.015993688 +-0.012591872 +0.023872929 +-0.017358508 +0.0027028485 +-0.0059186495 +-0.005338531 +0.029109042 +0.035163004 +-0.010547084 +-0.034870416 +-0.016920224 +-0.026980847 +0.014181894 +0.025996057 +-0.0044268467 +0.010259004 +-0.018287996 +-0.019352034 +0.014017332 +0.03415394 +-0.0045658858 +-0.006526088 +0.013065591 +-0.007074182 +-0.02615044 +-0.013847478 +-0.028072353 +0.016285019 +-0.017175075 +-0.0107859885 +-0.044549163 +-0.018242465 +-0.026385924 +0.054959968 +0.036792036 +0.009033333 +-0.015382986 +-0.01860849 +-0.015190819 +-0.02374468 +0.010466972 +0.01980049 +0.0073620523 +0.008483399 +0.021977618 +-0.027826399 +0.021785818 +-0.012322439 +0.012969459 +-0.032956187 +-0.0050367964 +0.004718245 +-0.0011706473 +-0.0011447901 +0.011440857 +-0.028795132 +-0.014977081 +0.0052940203 +0.02591206 +0.002652794 +0.030416913 +0.03826987 +-0.013810071 +-0.005227074 +-0.029470071 +-0.0068191593 +0.018924253 +0.015239173 +-0.01806484 +0.009766967 +-0.011495695 +0.026166089 +0.0029096066 +0.015169988 +-0.01260282 +-0.0116871605 +-0.009454795 +-0.007240768 +-0.0034351551 +-0.013454601 +-0.018960917 +-0.0015827892 +0.003881434 +-0.01936719 +-0.0070275846 +-0.008153494 +0.00515406 +0.022472477 +0.002823387 +-0.004939646 +-0.000907364 +0.0033983872 +0.0041166525 +0.021624858 +-0.004964684 +-0.04259008 +0.01730727 +-0.012672517 +-0.0034534745 +-0.0057399445 +-0.0037847296 +0.020785732 +-0.015418173 +-0.0062999376 +0.0032764084 +-0.02426695 +-0.0136259645 +-0.00057478587 +0.0028819102 +-0.007856341 +0.012234897 +-0.006576764 +-0.0014103855 +0.009644923 +-0.007553269 +0.007361068 +-0.00065847085 +0.010923131 +0.015493576 +-0.0049191057 +0.042851947 +-0.011000245 +0.0023228424 +-0.0051742536 +-0.01909507 +0.0065558422 +0.00015153651 +-0.028888673 +0.020727381 +0.03670836 +0.0026581814 +0.028512785 +0.016918665 +-0.03348949 +-0.0066251378 +0.009847367 +-0.019032074 +-0.0020982428 +0.0076566716 +0.018201284 +0.010794773 +0.0063852784 +-0.012948605 +0.006869076 +0.01136876 +-0.013523776 +0.03630953 +0.0016957269 +0.027153974 +-0.052083824 +0.016859114 +-0.015203049 +0.012634005 +-0.026815634 +-0.030082375 +0.014464465 +-0.010079207 +-0.0016590706 +-0.05396154 +-0.015601099 +-0.01672332 +-0.004252959 +0.021245511 +0.006226473 +-0.009531361 +0.0049709007 +-0.011640256 +-0.01111461 +-0.0030580356 +-0.0056602005 +0.009655477 +-0.0022530952 +-0.01332807 +0.004049559 +-0.0133530265 +0.0013254272 +0.0040448555 +0.011090227 +0.03188616 +0.019777281 +0.052005798 +-0.011611186 +0.0008172887 +-0.029222304 +-0.0009882303 +-0.0096440865 +0.025632847 +0.012524952 +-0.01896798 +-0.03908482 +0.05137125 +0.008234876 +0.0118565075 +0.004023728 +-0.008262431 +-0.010333751 +0.0069332263 +-0.009377363 +-0.013641569 +0.0011828421 +-0.010584521 +0.004704978 +-0.0030889893 +0.0031500412 +-0.04147505 +0.0031281584 +-0.026282517 +-0.024784796 +-0.0003493917 +0.018392025 +0.025270049 +-0.009185721 +-0.00864909 +0.0027500736 +-0.023167618 +0.025379192 +-6.9890164e-05 +0.019547435 +0.009132251 +-0.0073192734 +0.015445852 +0.016828438 +0.013882565 +0.01295734 +0.0108549055 +-0.008164787 +-0.003912933 +-0.036823317 +0.013750141 +-0.004372403 +-0.025958424 +-0.018843716 +0.022208842 +-0.016547197 +0.012525896 +0.013677751 +0.016432637 +-0.0075779874 +0.003965828 +-0.03492579 +-0.00857995 +0.026772814 +-0.029578993 +0.0021773914 +-0.0075818826 +-0.016617116 +-0.019060459 +0.009171999 +-0.013511815 +0.0071685533 +-0.029919337 +-0.037940964 +0.009534045 +0.025515882 +0.0113440445 +0.008390451 +-0.0071625602 +-0.000745533 +0.0015513591 +-0.019199204 +0.006342418 +0.009167044 +-0.026561486 +0.0010952782 +-0.029396418 +0.023459135 +-0.010052377 +0.020733073 +0.010918012 +0.026370743 +-0.000706828 +0.015165017 +-0.021856315 +0.012984435 +-0.006300148 +-0.024740398 +-0.0073041385 +-0.02192086 +-0.005649669 +0.0017379834 +-0.008624786 +0.010595217 +-0.0060539274 +0.0103995465 +-0.00986197 +-0.040529795 +0.021620216 +0.007965066 +0.01703433 +-0.030030867 +0.013310931 +-0.012704308 +-0.0031640902 +0.023507403 +-0.033180933 +0.011668205 +-0.039107725 +-0.010877366 +-0.021702372 +0.009872896 +-0.026218027 +0.018538792 +0.030280314 +0.011902535 +0.0054383855 +-0.029108582 +-0.013484261 +-0.006718486 +0.0080582835 +0.00072507764 +-0.0040491624 +0.023813868 +-0.030606735 +-0.012555036 +0.0032254981 +0.01953919 +-0.0037863743 +-0.0018020157 +0.0030190197 +0.034387197 +0.0032260902 +-0.0039429083 +0.008674021 +0.013998255 +0.023039918 +0.0028035743 +-0.004496287 +-0.014252921 +0.012365352 +-0.03777084 +0.013611653 +-0.00687206 +0.04271261 +-0.023775179 +0.0004020056 +-0.010151527 +-0.02441044 +-0.021023255 +-0.01807494 +-0.016034644 +0.025860768 +0.009772292 +0.011087944 +0.024022805 +-0.011557749 +0.026768591 +-0.02462632 +-0.0040811435 +-0.014641341 +0.0022372494 +0.07408169 +0.0033767438 +-0.021104956 +-0.023691619 +0.0014383881 +0.0019688264 +0.009852025 +-0.0011965531 +0.028698279 +0.018863231 +-0.00093825714 +-0.0015822522 +0.0009597842 +-0.017834546 +0.008495778 +0.030642318 +0.0116472095 +0.008014795 +0.011238823 +-0.028132703 +-0.0009720255 +0.0054565575 +-0.0186449 +-0.015786676 +-0.00994965 +-0.010144538 +-0.03283696 +-0.0067295334 +0.007688326 +0.011846702 +0.00524601 +0.0021057404 +0.050707463 +0.0036965364 +-0.017549936 +-0.0064212517 +-0.005532439 +0.023109468 +-0.017876992 +0.012658019 +0.029878458 +-0.0111111915 +-0.02012599 +0.007513503 +-0.027002087 +-0.026541602 +-0.0045132325 +-0.0016316219 +0.026156433 +-0.007638846 +0.0052549653 +-0.011346892 +-0.013326074 +-0.026073785 +0.030462341 +-0.035858322 +-0.0043884227 +-0.003515087 +0.023037214 +-0.0010114983 +0.0071515003 +-0.010075792 +-0.011559903 +0.037871093 +-0.018569505 +0.020189643 +0.018121079 +-0.022018857 +-0.037945677 +-0.000104091705 +0.04324893 +0.011792888 +-0.0015008491 +0.024043074 +-0.019536084 +-0.008964627 +-0.0051516835 +-0.004034189 +-0.017755052 +0.0080150785 +-0.03719002 +-0.038554225 +-0.018460436 +-0.011030727 +0.0037470593 +0.010425152 +0.02272655 +0.015491877 +0.015041201 +-0.0061995154 +-0.00012871249 +-0.0063561345 +-0.0024948022 +0.0017778059 +-0.0019040214 +-0.015435893 +0.0076243402 +-0.026040839 +0.012206193 +-0.05505098 +0.006437736 +0.017684538 +-0.0034397594 +-0.025692608 +0.030050945 +0.061798606 +0.015446571 +0.0053726863 +0.0064289686 +0.0075936164 +-0.008532845 +0.03700041 +-0.010595171 +0.002440384 +-0.001153229 +-0.0012687851 +-0.028680915 +-0.02061902 +-0.00045661116 +0.01370515 +-0.004910896 +-0.00582837 +-0.01102279 +-0.015095463 +0.007777309 +0.0013078094 +-0.024577694 +-0.033570528 +0.04029333 +-0.0047821747 +-0.0027739513 +-0.012448035 +0.0045815483 +-0.024543557 +-0.0062328856 +0.002972439 +-0.034163307 +-0.025145033 +-0.01107972 +0.024897145 +0.016766327 +-0.029036116 +-0.007240742 +-0.014987934 +-0.00026829814 +0.003923175 +0.02790102 +0.019609787 +0.009518376 +-0.008263043 +0.03542088 +-0.015721837 +0.0066232164 +-0.029063834 +-0.018150868 +0.015065337 +-0.023451336 +-0.016235135 +0.011285051 +-0.033808995 +-0.012335209 +0.010302233 +-0.005578212 +-0.029175995 +-0.010307106 +0.035427842 +-0.026934136 +-0.021231527 +-0.0028391355 +-0.019736156 +-0.03303282 +0.0062654503 +-0.008639263 +0.018722035 +0.029924802 +0.025809938 +-0.012882499 +-0.040752776 +0.041526467 +0.000444482 +0.01461859 +0.00061758683 +0.0028405632 +0.020920364 +-0.0065409993 +0.039408408 +0.059223987 +-0.03445138 +0.0056045684 +-0.015411123 +-0.036770023 +0.01110214 +0.0045193955 +0.03831751 +0.0018905179 +-0.011202287 +0.0028318015 +-0.010930831 +-0.005378269 +-0.068180025 +-0.009345329 +-0.027469829 +0.02451426 +0.063446745 +-0.005731635 +0.0010839654 +0.019828267 +-0.0019380341 +0.0062092934 +0.015778618 +0.04404525 +-0.0028324458 +0.020399114 +0.003932644 +-0.025993427 +-0.0014312337 +-0.03084887 +0.006666821 +-0.046547942 +-0.020665277 +-0.004012433 +0.026833171 +-0.06864922 +-0.011833966 +-0.0055429684 +0.033753302 +0.017708922 +-0.006821296 +-0.032450706 +-0.0144284405 +0.016921286 +0.031729 +-0.0024638795 +0.006439798 +0.011260054 +-0.04571652 +-0.0069089825 +0.0016626922 +-0.0050493362 +-0.018770637 +0.0007854967 +0.01013363 +-0.036888264 +0.010968487 +-0.008782782 +-0.0042457217 +-0.03982009 +0.010656354 +-0.019648662 +0.014642341 +0.004588577 +0.03123893 +-0.0051243016 +-0.017160919 +-0.014976768 +0.009014162 +0.0030543841 +-0.02043426 +-0.010606215 +0.03996044 +-0.0070636575 +0.040461574 +0.0031868361 +-0.03396936 +-0.01383292 +0.010281051 +-0.004499435 +-0.0059108143 +0.0059942156 +-0.0004455851 +0.004263028 +-0.013013389 +0.0096024815 +-0.01247206 +0.009834961 +-0.032893572 +0.022094015 +0.043194935 +0.0011720981 +-0.047091443 +-0.011764257 +-0.018498028 +0.025288455 +-0.018967427 +-0.008173794 +-0.020438466 +-0.020637322 +0.021014774 +0.013865987 +0.024626574 +0.01594032 +-0.0013717985 +0.006536053 +0.004893516 +-0.022674857 +0.054935493 +-0.014988344 +-0.029359857 +0.0016508445 +0.034063 +-0.018715644 +-0.0035380407 +0.027785236 +-0.017421206 +-0.020241333 +-0.017133275 +-0.015193143 +0.0024752333 +0.028991375 +0.020562293 +-0.014260449 +-0.03913582 +0.016640175 +0.008092684 +0.011769319 +-0.021792578 +-0.037027035 +0.016770909 +-0.0013332623 +0.0029686405 +0.005537665 +-0.03903523 +0.0016552344 +-0.0154786855 +0.0058667297 +-0.013636823 +0.04022573 +0.0154459225 +0.0077136788 +-0.0114065 +-0.007952832 +0.010929312 +0.021098882 +0.011158322 +-0.026191933 +0.006074307 +-0.021842388 +-0.038600348 +-0.015143803 +0.026685841 +9.891704e-05 +-0.011065877 +-0.0048923604 +0.021791194 +-0.018063607 +-0.030258683 +-0.018269079 +-0.008226451 +-0.008142465 +0.015360466 +-0.045015 +0.021776328 +-0.0045732073 +0.031208044 +-0.021576919 +-0.008297917 +0.0014329383 +-0.007998201 +0.023326932 +-0.00476551 +-0.010551045 +0.016897548 +-0.022430934 +-0.005435827 +-0.029896045 +0.054730758 +0.009178252 +-0.014428697 +-0.016703289 +-0.007484969 +-0.013137377 +0.0009863328 +0.0401024 +0.0032775444 +0.011643482 +-0.0048894733 +-0.010090918 +0.0001419943 +0.0035378244 +-0.03966584 +0.0124319615 +-0.042123765 +0.00073675567 +0.021593066 +0.015564012 +-0.010467781 +0.043293204 +0.010567076 +-0.00055088574 +0.02830658 +0.022023963 +-0.014669601 +0.022732962 +0.018734796 +-0.052903693 +-0.0026021341 +-0.033979412 +-0.020338088 +-0.035950843 +-0.039374832 +0.002615369 +-0.0056975717 +-0.022768024 +-0.024969138 +-0.031166257 +0.043638267 +0.009123018 +-0.0116773695 +-0.009874647 +-0.015557885 +-0.0030020187 +0.024598947 +-0.010509924 +-0.0053281104 +0.0071177552 +-0.0069777765 +-0.027012786 +-0.015428487 +0.0026290417 +0.0029472846 +-0.0034275665 +0.0048837382 +-0.021887787 +-0.0013104181 +-0.013362893 +-0.024607945 +-0.026897911 +0.0013559052 +0.0005299116 +0.040323135 +-0.02995353 +-0.0008858514 +0.017498046 +-0.011632446 +0.009563619 +0.02526166 +-0.038264282 +-0.026580518 +0.0042178812 +0.017392254 +-0.0094312 +0.028262297 +-0.026211565 +-0.034247953 +-0.015624732 +0.0019086614 +-0.0065360004 +-0.006571616 +0.01204981 +-0.0075638723 +-0.0011540141 +0.016273644 +0.019533502 +-0.0077968314 +0.004716207 +-0.012499358 +-0.020650694 +0.042555675 +-0.010685918 +-0.03492341 +-0.009104041 +-0.013135027 +-0.0054058605 +-0.010460856 +0.0031256748 +-0.00010328944 +-0.035637643 +-0.015786184 +-0.007608477 +0.008272144 +0.0011761812 +-0.021051442 +0.035543084 +-0.004082355 +-0.006950574 +0.03263745 +-0.018662345 +-0.02913689 +0.004135008 +-0.015732292 +0.008940974 +-0.0069080414 +-0.012823238 +0.007120522 +0.013306279 +-0.0032927806 +0.053811252 +-0.023485566 +0.006201053 +-0.009277662 +-0.045655254 +0.01936456 +-0.010566636 +0.012307275 +0.013095526 +-0.0064064963 +0.008176425 +0.02169181 +-0.011652319 +-0.068078026 +-0.028574936 +-0.053192884 +0.0035739143 +0.057227496 +0.005195182 +0.016123306 +0.0080352845 +0.0034860594 +0.021103866 +0.05060509 +-0.012002144 +0.0054566236 +0.014645828 +0.007785539 +-0.050690282 +-0.001316456 +-0.024541868 +0.019153653 +-0.039222464 +0.020851495 +-0.004327905 +0.013247154 +-0.06365645 +0.052754167 +0.0010556183 +0.043003432 +-0.016048398 +0.0009651991 +-0.016702654 +-0.017371543 +-0.009470989 +-0.00794264 +-0.0018989492 +0.01992692 +0.015995394 +0.018533433 +0.0004904311 +-0.038376693 +0.006393176 +0.00064848986 +-0.017415565 +0.002096302 +-0.009282308 +-0.005268315 +0.038041297 +0.005127008 +0.018172638 +0.016231218 +0.010269606 +0.006395477 +-0.019373937 +0.004527449 +-0.00645754 +0.0019985542 +-0.016104555 +0.009490858 +-0.007028303 +0.009634916 +0.010021581 +-0.051658537 +0.028378023 +-0.030941283 +0.01561917 +0.02694535 +0.00039422174 +0.00041457673 +-0.018600008 +-0.0072885845 +0.00078724325 +-0.0054544513 +0.022269176 +0.0064884787 +0.02869885 +-0.009656266 +-0.052823976 +-0.00058867614 +-0.029748287 +0.0054282877 +-0.014519964 +0.014844763 +0.014104863 +0.012821789 +-0.08038386 +0.010996103 +-0.0106049245 +0.0046395594 +0.039249945 +9.1463655e-05 +-0.008318526 +-0.017387282 +-0.02197671 +0.04124428 +-0.03322752 +-0.0077978666 +0.0062827133 +-0.05944828 +-0.017817669 +0.013656682 +-0.011366167 +-0.017490637 +0.0036874344 +-0.01211428 +-0.0266823 +0.0047906074 +-0.038284753 +-0.007708424 +-0.011902781 +0.016340258 +0.0037884573 +-0.00012151013 +0.03843037 +-0.013365826 +-0.004769845 +-0.02834591 +-0.0032982393 +0.0038074583 +0.01930551 +-0.0387769 +0.0069510285 +0.05775148 +0.0026625737 +0.010099637 +-0.0053881076 +-0.05040323 +-0.024008688 +-0.007998095 +0.0060130684 +-0.0131444605 +0.016635954 +0.0047534704 +-0.011436089 +-0.011548703 +-0.0032174177 +0.0029763167 +0.03526413 +-0.0114022745 +0.0373699 +-0.01921409 +0.017651783 +-0.054197323 +-0.004047573 +-0.015311119 +0.009034432 +-0.024426593 +-0.016923256 +0.009071579 +-0.01244327 +0.014527597 +0.0032203875 +-0.01622415 +0.001398317 +-0.0039958614 +0.0132520925 +0.0051379204 +0.008144212 +0.009239581 +-0.014586518 +-0.015814628 +-0.018371252 +0.022154607 +0.0007435826 +-0.014222864 +-0.0052597937 +-0.02432341 +-0.010531108 +-0.03825119 +-0.009899066 +0.009523877 +0.030432492 +-0.014530454 +0.01709681 +-0.011535195 +-0.026467228 +-0.018512258 +-0.00509879 +0.0031549972 +-0.012544136 +0.0030169033 +-0.0368356 +-0.0004562876 +0.0113620665 +-0.04402674 +-0.006936194 +-0.03269728 +0.020934125 +0.00016335466 +0.012672072 +0.0015724617 +-0.010000235 +-0.0025343501 +0.010768382 +-0.0030507958 +0.007341342 +-0.002053135 +-0.048082106 +0.0051070377 +-0.0064735855 +0.011160411 +0.0076823286 +0.010210807 +-0.005585144 +0.013870924 +-0.0345367 +0.012879242 +0.012744653 +-0.025192315 +0.0048665013 +0.012852565 +-0.0036108226 +0.019177476 +-0.031918276 +-0.018647147 +-0.003789996 +0.013572904 +-0.007936491 +0.009017998 +0.017639913 +0.022931138 +-0.004420094 +0.0033457193 +0.009075828 +-0.00079609046 +0.031678356 +0.0017720601 +-0.02286087 +0.025617834 +-0.018651633 +0.0030789357 +-0.031102395 +-0.007251756 +-0.025899034 +-0.020342039 +0.020959318 +0.0011142219 +-0.014440452 +-0.004585739 +0.028562427 +0.0037324328 +0.030683253 +0.011461594 +0.009934646 +-0.016957697 +-0.0018586217 +-0.028009957 +-0.007111534 +-0.020340579 +0.008475876 +-0.004138132 +0.0017240683 +-0.00970202 +-0.028978145 +0.014747636 +-0.010910368 +0.021547547 +0.030019673 +0.008604579 +-0.025597317 +-0.03259175 +-0.0053734304 +0.043418042 +-0.0033557455 +-0.00039843813 +-0.020180538 +0.033397906 +-0.027172267 +-0.058802683 +0.018116843 +-0.025570134 +-0.02203301 +-0.0009922378 +-0.041757144 +0.009253601 +-0.011441662 +0.0037303478 +0.0013695459 +-0.044753548 +0.019829601 +0.019556139 +0.009010473 +-0.02068874 +-0.008103868 +0.011842899 +-0.012804888 +0.011989521 +-0.03826358 +-0.009646077 +-0.030451454 +0.0093254205 +-0.038147096 +0.023757674 +-0.0024595424 +0.015988054 +0.031366576 +-0.019025179 +0.0059692324 +0.0021905426 +0.0032896332 +-0.03375991 +0.0015495799 +0.018341646 +-0.0028200077 +0.043424744 +0.018095156 +-0.0032614195 +-0.012397853 +0.001219335 +0.006841147 +-0.006062908 +0.011072537 +0.01701775 +-0.011950996 +-0.0031767075 +0.014075853 +0.025649913 +0.029409228 +-0.008574348 +0.006197581 +-0.006617683 +-0.008133185 +-0.062465973 +0.0013351706 +-0.0042625624 +0.026091218 +-0.018349715 +-0.04808849 +0.015465421 +-0.014339958 +-0.013514838 +-0.012845083 +0.007873304 +-0.006762294 +0.032367036 +0.013900346 +0.005094435 +0.00084636384 +0.05259777 +-0.04664121 +-0.03151951 +-0.011441186 +-0.0047708875 +0.034947116 +-0.01754437 +-0.02044008 +-0.0030596708 +-0.022422513 +0.01159111 +0.011542139 +-0.010372351 +0.02265194 +0.0020091867 +-0.018760283 +-0.027685668 +0.024290888 +-0.011897905 +0.011802335 +0.012864409 +-0.008167279 +0.019895379 +0.011073718 +-0.012037953 +0.008683761 +-0.03844622 +-0.023542643 +-0.01204249 +-0.004008093 +-0.0052050166 +0.052498806 +-0.005642921 +0.026828546 +0.0061763832 +0.007966297 +-0.004832169 +0.018373126 +0.011491182 +-0.022323884 +-0.0017910525 +-0.0180417 +-0.0151423 +-0.016136628 +0.022986103 +0.012819466 +0.0038091785 +-0.027912013 +0.010293769 +0.005244409 +-0.055050116 +0.0018816532 +-0.016468367 +-0.0116533805 +0.0066921636 +0.01736851 +-0.0063408446 +0.006953308 +0.0054657757 +-0.01198044 +-0.024452176 +-0.0033875387 +0.021612572 +0.0036177966 +-0.007552968 +-0.009098845 +0.014225012 +-0.0020840857 +0.018633997 +-0.0018395981 +0.024646295 +-0.0073861633 +-0.014679301 +-0.027559705 +-0.022007978 +0.047010835 +-0.002955353 +0.040370125 +0.010637212 +0.012868642 +-0.008226024 +0.026023367 +-0.0026436765 +-0.001459882 +0.016364891 +-0.008896433 +-0.015265435 +0.029292306 +0.005543039 +-0.0009997162 +-0.0070231296 +-0.008067915 +-0.0008831404 +0.007675276 +0.00805622 +-0.013212688 +-0.009088627 +0.008507693 +0.020661958 +0.018328924 +-0.007925226 +0.023280919 +-0.035747707 +0.0052524656 +-0.052473634 +-0.013613001 +-0.004239821 +0.023796264 +-0.012528617 +-0.02707028 +0.034340713 +-0.008509976 +0.015538249 +0.024876794 +0.0072400835 +0.011143397 +0.008589791 +-0.02910939 +-0.0053933077 +-0.000316401 +-0.017011117 +0.0076906164 +-0.010303252 +0.023306875 +0.009878426 +0.02246074 +-0.02182685 +0.014127987 +0.026688164 +0.005214973 +-0.010374035 +0.007649946 +-0.024207605 +0.013922205 +-0.025307829 +0.0133867785 +-0.014208615 +-0.018209262 +-0.0032012293 +0.011071699 +0.022564817 +-0.0010197321 +-0.006346814 +-0.025695592 +0.005873373 +0.005675484 +-0.040473703 +-0.024919922 +-0.007153108 +0.0012451962 +0.006865676 +0.011154538 +0.004688083 +0.0030442134 +0.004016717 +0.054711092 +-0.016796693 +-0.0023871895 +-0.017878903 +-0.006802541 +-0.014361563 +-0.01684093 +-0.025945159 +-0.020417565 +-0.058365226 +-0.003278067 +0.017865872 +0.009022316 +-0.001963084 +0.01086217 +-0.07097579 +-0.02907943 +-0.0045368033 +-0.0014721618 +0.011671777 +0.015618821 +-0.021370891 +-0.009068019 +0.02909197 +-0.038356446 +0.014166091 +0.007974064 +0.015139628 +0.03724408 +-0.014194975 +-0.017125323 +-0.00030506527 +-0.00517785 +0.005010101 +-0.016631749 +0.025106048 +0.0052945483 +-0.011584946 +-0.01046331 +-0.04473353 +-0.041798458 +0.011921735 +0.024721619 +-0.010868413 +0.009824701 +0.0021685483 +0.036298584 +0.0101762405 +-0.0017767057 +-0.016471686 +0.012408984 +-0.019249734 +0.032525245 +0.0058162673 +-0.004767533 +-0.01051641 +-0.0036505326 +-0.007612387 +0.0006761972 +0.009167161 +-0.013898105 +0.00059683516 +0.00916508 +0.004707637 +0.043581538 +-0.010051625 +-0.008236509 +-0.03691368 +-0.018720904 +0.0358884 +-0.009490855 +0.021415329 +-0.016524246 +0.015082752 +-0.03697959 +0.040362395 +-0.023240373 +-0.0061256657 +-0.0039886446 +-0.031020556 +-0.033670954 +0.035125732 +-0.011087164 +0.0042277416 +0.009935985 +-0.032964487 +0.008238503 +-0.028282527 +0.02839432 +-0.012622503 +-0.010245191 +0.0034492644 +-0.015353115 +-0.015342504 +-0.002389242 +0.0022218542 +0.023550734 +0.009586753 +0.0012863858 +-0.010410579 +-0.0355185 +0.012747731 +-0.011827844 +-0.0064950404 +-0.0022772704 +0.021016877 +-0.0005083872 +-0.0138747655 +0.0042535863 +0.011149111 +-0.0026081428 +0.016563773 +-0.01521378 +0.02385656 +0.00016503064 +8.938214e-05 +-0.022076067 +-0.004576191 +0.014076914 +0.008409751 +0.03030387 +-0.0041919705 +0.0023043489 +-0.026034962 +-0.019847363 +-0.008675186 +-0.018370157 +0.038412854 +-0.003998679 +-0.0142013915 +-0.01651319 +-0.0025873238 +-0.0017442547 +0.00065123185 +-0.0015939771 +0.003932887 +-0.028228577 +0.0054386174 +0.03922738 +0.0028471565 +0.011700575 +0.012913261 +-0.0014788556 +0.018960303 +-0.034397934 +0.009361455 +-0.0010593152 +-0.026365904 +-0.009270223 +0.018247442 +0.027475776 +-0.012732486 +0.01694707 +0.0040016375 +-0.0025954116 +-0.0063047605 +-0.024345184 +-0.012874834 +0.022348844 +0.0021131362 +-0.003831005 +-0.0011999946 +0.009141736 +0.011407857 +0.016758928 +-0.018689135 +-0.034010746 +-0.0021235268 +-0.019780844 +0.03068289 +-0.0009528639 +-0.0490881 +-0.002995322 +-0.017343402 +-0.010853935 +0.00017880916 +0.03387942 +-0.0063891956 +-0.021766696 +-0.01315398 +0.023661034 +0.0062021464 +0.025036149 +-0.008755513 +-0.040754598 +-0.0029808695 +-0.0025836204 +-0.042928465 +-0.014000379 +-0.01921884 +-0.0016281034 +0.0013306888 +0.023214074 +0.011764604 +0.0070957784 +-0.025189135 +-0.02736116 +-0.013727276 +-0.009069087 +-0.002659445 +-0.026607513 +0.022046061 +-0.0020845744 +0.017162237 +-0.018992886 +-0.0034143548 +-0.013882375 +-0.011947765 +-0.0069812657 +-0.012118989 +-0.001497579 +0.006605838 +-0.01747912 +-0.0062525366 +0.010175575 +0.028602073 +0.00365382 +0.009782908 +0.0065410067 +0.0033107256 +0.0046336474 +-0.017573277 +0.015047203 +-0.009591888 +0.019440914 +-0.01842289 +0.0039465027 +-0.0033141708 +-0.0078030676 +0.0024213076 +0.0014677307 +-0.033915434 +0.055627618 +0.0038308995 +8.157287e-05 +-0.0078009022 +0.023338139 +0.010881322 +-0.007201206 +0.011847553 +-0.022829836 +-0.011780962 +0.015665973 +0.012328783 +-0.028495234 +-0.0066019814 +0.010309491 +-0.023573464 +0.00647984 +0.033046108 +0.014762973 +-0.012052452 +-0.013248865 +0.00018623561 +-0.03093652 +0.029037392 +0.0092588 +-0.026310338 +0.013854323 +-0.006874892 +-0.018144835 +-0.0076037515 +-0.01783896 +0.0043432615 +0.010029782 +-0.0018367212 +0.009231534 +-0.043539077 +0.02259565 +0.008827413 +-0.004268582 +5.782413e-06 +-0.022908527 +-0.035464857 +0.009084516 +-0.018257132 +0.012658302 +-0.015757566 +0.009258297 +0.00055987755 +-0.0024468882 +-0.022489514 +0.009273397 +-0.026835438 +0.0038719524 +-0.0009794836 +-0.033996355 +-0.025071857 +0.0011406437 +-0.031188091 +0.0081667155 +-0.029874196 +-0.012984305 +-0.005565811 +0.0051215333 +-0.013926022 +0.018388268 +0.0077486476 +-0.0046545938 +0.012414118 +0.053382263 +-0.014629641 +0.0311695 +-0.03684417 +-0.038137425 +0.005512037 +-0.0421328 +-0.012608201 +-0.028145978 +-0.054073952 +0.0050971634 +-0.0010208171 +-0.016780159 +-0.008372333 +0.032440335 +-0.04841225 +-0.009199021 +0.0016051182 +-0.0012543214 +0.017504867 +-0.034501564 +-0.028908808 +0.023932938 +0.0220486 +-0.038665082 +0.03271151 +-0.009913116 +0.023350935 +0.016234944 +-0.020632528 +-0.006835942 +0.017201431 +0.012881281 +0.0014872036 +0.00026669394 +0.012179964 +0.003692215 +0.022316901 +-0.019904787 +-0.017743183 +-0.03992833 +-0.016119588 +0.009403591 +-0.026159326 +0.014582551 +0.0049584117 +0.008405272 +0.011835513 +0.020432957 +-0.045407206 +0.018747441 +-0.03052681 +0.04452798 +0.03003561 +0.009559228 +-0.007153675 +0.018808058 +-0.0014688831 +0.010747295 +0.026629696 +-0.03077042 +0.012900554 +0.015125365 +0.022799445 +0.009063265 +-0.008436102 +-0.025160434 +-0.042857345 +-0.035794914 +0.038259324 +-0.0030177003 +-0.0037158935 +-0.057072274 +0.017555457 +-0.018061336 +0.0059269047 +-0.03118506 +0.021937894 +0.026973175 +0.008626191 +-0.02923551 +-0.02491359 +-0.011525711 +0.0030885728 +0.004864317 +0.033547886 +-0.020392383 +-0.0468498 +-0.009068225 +0.024020204 +-0.00937601 +-0.011368626 +-0.0004838845 +-0.0355542 +0.013158026 +0.015313597 +0.0046887854 +0.011993098 +-0.009301596 +0.0030387018 +-0.036735397 +-0.022092234 +0.014474931 +-0.012330488 +-0.011238486 +-0.0062356903 +-0.04209184 +0.00033683094 +-0.0053987177 +-0.031990975 +0.016082078 +-0.027469497 +0.0111136185 +-0.015717046 +0.021490462 +-0.012712768 +0.01989344 +0.0014446009 +-0.0031741143 +-0.0025762827 +0.006487583 +-0.01778534 +0.016733581 +-0.01951178 +-0.010160817 +0.0122623565 +-0.028576447 +-0.026304662 +-0.019934598 +0.02285889 +0.029431248 +0.004343351 +-0.023112474 +0.010335649 +0.0015131868 +0.014656733 +0.014337511 +0.0018930022 +-0.015747745 +0.0062894076 +0.026868457 +0.019274447 +-0.023535103 +0.007224311 +0.024156488 +-0.052687608 +-0.009293121 +0.0032524196 +-0.017118124 +-0.02853802 +0.0014905971 +-0.012644741 +-0.028834488 +0.00073832035 +-0.013533949 +-0.030357167 +-0.008284155 +0.0102772955 +-0.013915197 +0.005678149 +0.011500436 +0.014483485 +-0.014858059 +-0.027406912 +0.00482042 +0.009879083 +0.019505838 +-0.0035060712 +-0.0031649151 +0.029215466 +-0.0020743227 +0.03149895 +-0.03789826 +-0.07122593 +-0.0024478112 +0.0326627 +0.010896294 +-0.018452168 +0.018858615 +0.00502697 +0.016025221 +-0.004669385 +0.008495762 +-0.0050739497 +0.023600971 +-0.0019022631 +0.044250365 +0.027065216 +0.0047730957 +-0.029879594 +0.0076592574 +-0.01462088 +0.011862478 +-0.01055501 +-0.019205702 +0.007718661 +0.012695562 +0.011964828 +0.010412702 +-0.009063494 +-0.0083485935 +-0.014284546 +0.0008145156 +-0.006220103 +-0.011841051 +0.016442282 +-0.0038029419 +-0.028786862 +-0.019325178 +0.03995975 +0.008085415 +-0.0135355 +0.006598877 +-0.005718812 +0.017619325 +-0.010383467 +0.004531892 +-0.00114395 +0.010366697 +-0.015563365 +-0.011417635 +-0.014601001 +-0.028202688 +-0.008283637 +-0.0061489763 +0.008895447 +-0.022770166 +0.004245503 +-0.03260401 +-0.016583622 +-0.01297534 +-0.04502247 +-0.011796122 +-0.0061152135 +0.013590716 +0.00091521634 +0.024947772 +0.0030035137 +0.015718691 +0.0021949694 +0.0075026616 +-0.0108266445 +0.026104081 +-0.009337358 +-0.057283465 +0.018559903 +-0.013622908 +-0.038960356 +-0.010267272 +0.010490233 +0.01288783 +0.01478893 +-0.025425931 +0.021103906 +0.0062670605 +-0.031777006 +0.01446768 +0.006111558 +-0.00616656 +0.021971095 +0.048329916 +-0.024976188 +-0.0048309574 +-0.008024336 +-0.0050995736 +-0.025317062 +-0.0041805124 +0.02694265 +-0.038071327 +-0.0023768134 +0.01181987 +-0.0036576437 +-0.020035803 +0.013893627 +-0.024621693 +-0.014350381 +-0.048164736 +-0.00041020886 +-0.01593642 +-0.003732945 +0.036774985 +0.010480265 +0.012837714 +-0.029750323 +-0.007901127 +0.0073040435 +0.03326184 +-0.0006729169 +-0.005639912 +0.062950164 +-0.0115573155 +0.019006507 +-0.026408456 +-0.061667122 +-0.013570272 +-0.004716094 +0.0018503638 +0.004295999 +0.006511196 +-0.028296094 +-0.027546871 +-0.003233575 +-0.0019053149 +0.007056981 +0.030063886 +0.00933232 +0.03246466 +0.04408153 +0.01427087 +0.0057990937 +-0.0001056996 +-0.01087809 +0.029701436 +-0.0006677606 +-0.019104844 +0.014162681 +0.023508303 +-0.020560633 +-0.02104954 +0.0030761878 +0.029655747 +0.032187857 +-0.0017802592 +-0.0020254655 +-0.006329292 +-0.027800562 +-0.0075703575 +0.014872133 +0.0053462335 +-0.01161875 +0.009845289 +-0.0039484655 +-0.045106433 +-0.015492515 +0.009636059 +-0.02751955 +-0.037645925 +0.023614103 +-0.012060439 +0.012034977 +-0.004083657 +0.021437556 +0.01227299 +-0.011315196 +0.011073821 +0.021954108 +0.0041133105 +-0.018375972 +0.008541022 +0.0444815 +0.0016267975 +0.03282982 +-0.011865562 +-0.046710193 +-0.007480289 +0.018091772 +0.0036688498 +-0.011195778 +0.0067144795 +-0.006130141 +0.0037518772 +0.004908236 +0.009928725 +0.009147073 +0.012662001 +-0.02389421 +0.015471571 +0.0343539 +0.00611775 +-0.050167795 +-6.717051e-05 +-0.014742609 +0.036089566 +-0.021619845 +0.009794135 +0.0072897696 +0.005444338 +-0.017083673 +-0.0121709285 +0.03209343 +0.036369115 +-0.004957687 +-0.027164001 +-0.004288622 +0.002264132 +0.01818113 +-0.051403087 +-0.0070541212 +-0.025263049 +-0.010382003 +-0.017360218 +-0.016966611 +-0.035630602 +0.0055762613 +-0.005831235 +-0.0312509 +-0.0022944186 +-0.02812821 +0.022855792 +-0.0073055085 +0.016366784 +-0.0054562064 +-0.020312972 +-0.013010721 +0.025086192 +-0.0051306207 +-0.017811615 +0.023525558 +-0.00804467 +0.006446148 +0.025552046 +-0.05146438 +-0.02589618 +-0.024186617 +-0.0065104207 +0.0018432231 +0.0759279 +0.0005134018 +-0.018737512 +0.01603624 +-0.0058147833 +-0.0066871676 +0.00629825 +0.0038693866 +-0.0030059353 +-0.026871882 +-0.008861599 +0.00727811 +-0.013287031 +-0.03393581 +0.0102311205 +0.020618627 +-0.036866296 +0.0017850144 +0.02007899 +0.0058681723 +0.007202499 +0.005357155 +-0.02660267 +-0.020767208 +0.014547115 +-0.0018627498 +-0.0012933692 +0.0148041 +-0.016112303 +-0.04459812 +-0.014163142 +0.023975188 +-0.00089759176 +-0.022957886 +0.0031614765 +0.019200226 +-0.014034956 +-0.011036517 +-0.01093656 +0.0006083535 +-0.029204084 +0.00776345 +-0.0044319844 +0.0054802606 +0.016229987 +0.016792629 +0.021748703 +0.0021501463 +-0.010635441 +-0.009688424 +0.014342201 +0.00022564607 +-0.003532767 +0.043355905 +-0.0010327009 +0.019640082 +0.023804907 +-0.014660723 +-0.013390282 +0.011052001 +-0.007079955 +0.0008472415 +-0.0035143616 +0.0053490214 +-0.018189274 +0.008452255 +-0.00070507545 +0.0016289148 +0.010181338 +-0.013304595 +0.015573933 +0.034540243 +-0.0023822095 +0.0044265855 +-0.0062635606 +-0.008113405 +0.019688612 +0.0011991294 +-0.023108268 +0.008767038 +0.012326104 +0.0024410354 +0.010014071 +-0.012761998 +0.0011996492 +-0.004183944 +-0.0028622209 +0.014227235 +-0.001067801 +-0.020920537 +0.012080135 +0.016771907 +-8.138985e-05 +-0.010884004 +0.008991875 +-0.0015320228 +0.023667468 +0.013950476 +0.0027287246 +-0.0072200783 +0.0028424389 +-0.026403539 +0.010233052 +-0.030003035 +0.029468779 +0.022024864 +-0.023610469 +0.005795775 +0.014777547 +0.009587757 +0.022742806 +-0.025039136 +-0.010880233 +0.008074833 +-0.008215076 +-0.008804377 +0.0061228587 +0.009072769 +0.002403333 +-0.0031574813 +-3.4948374e-05 +0.008889094 +0.0018234547 +0.014604659 +0.0011079299 +-0.021794308 +0.0068807895 +-0.038028084 +-0.004050098 +-0.0082562445 +0.006234338 +0.00080658897 +-0.014895198 +-2.243492e-05 +-0.022064261 +-0.017430117 +0.015323072 +-0.012935171 +0.034893688 +-0.036305375 +0.008455436 +0.015176009 +0.009484705 +0.029141398 +0.011045022 +-0.029745046 +0.006823853 +0.010354938 +0.010200338 +-0.026133705 +0.009604837 +0.02324871 +-0.021732723 +-0.016647436 +-0.0049151476 +0.0042551006 +-0.0015910149 +-0.0068005864 +-0.021806536 +-0.00047145964 +-0.023338767 +-0.01609441 +-0.0033925718 +-0.026891435 +-0.02588628 +0.013690593 +0.0030011327 +0.0044443556 +0.011128867 +0.0005645884 +0.029704796 +-0.002427581 +0.00015121803 +0.023379667 +0.0016973702 +0.025672479 +0.020444024 +-0.012450009 +-0.008729508 +0.015918462 +-0.0017793964 +-0.010662976 +0.0064435923 +0.0069179297 +-0.019948166 +0.007715539 +0.000727164 +0.0010334377 +0.044559963 +-0.010373234 +0.021197487 +0.033940926 +-0.006785755 +0.04188905 +-0.033456735 +-0.0074705207 +0.006880946 +0.019525342 +0.004743273 +0.016210908 +-0.0099991765 +-0.0036515289 +0.011861182 +-0.017428245 +-0.003966332 +0.045647364 +0.0068990667 +0.00060268433 +-0.007978296 +-0.020474654 +0.00059944275 +-0.0047193314 +0.01058265 +-0.021691393 +-0.015363599 +0.0056990497 +0.0017261957 +-0.0040445547 +0.007918367 +0.007932125 +-0.00017478256 +-0.021554403 +0.016855866 +-0.015899025 +-0.045144223 +0.0077398783 +-0.0018982317 +-0.030345872 +-0.033261865 +0.002043211 +-0.012552549 +0.019440707 +0.0069152024 +0.024469461 +0.0039956393 +-0.039085098 +0.036510363 +0.0066514565 +0.014669624 +0.0017647621 +-0.0091511635 +-0.0004980808 +0.0054176636 +0.0064955987 +0.02648036 +-0.01233937 +-0.013091918 +-0.024386799 +0.010826769 +-0.01589048 +-0.006664868 +-0.008142659 +-0.02602388 +0.013796146 +-0.0059548966 +-0.0030215078 +-0.015942903 +0.020557418 +0.032500315 +0.008863261 +-0.012775283 +0.010819423 +0.03207702 +-0.020798901 +0.017903099 +0.009656995 +-0.0025097898 +0.015446072 +0.0024330257 +0.0016765406 +-0.0072345263 +-0.010332029 +0.006694965 +0.004761175 +0.04866748 +-0.012553736 +0.006997265 +0.021885516 +0.015667772 +0.0041832966 +0.0072998046 +-0.0053577507 +0.005237335 +-0.015870657 +0.018477635 +-0.0147395125 +-0.0071930373 +-0.011011746 +-0.0052600913 +1.1514148e-06 +0.01814116 +0.018908631 +-0.004739741 +-0.0074763843 +-0.01609585 +-0.03263687 +-0.013948235 +0.009311369 +0.005546651 +0.0019619013 +-0.007621185 +0.016166627 +-0.014324589 +-0.022004 +0.02341971 +-0.028561598 +0.00048090395 +-0.010831307 +-0.028040685 +-0.0050325524 +-0.028492577 +-0.028102303 +-0.016694685 +-0.031326693 +0.0041402606 +-0.0043986845 +0.009437269 +-0.013879937 +-0.009847865 +0.03808349 +0.01301486 +-0.013809946 +-0.009294693 +-0.014413562 +-0.023350012 +0.029588608 +-0.0150438035 +-0.0025135332 +-0.030271307 +-0.017515294 +0.0012117751 +-0.017605409 +0.009468653 +-0.017487613 +0.013539758 +0.0043677036 +-0.013194018 +0.0025106918 +-0.016631113 +-0.0007722231 +-0.009944442 +-0.01693375 +0.011021429 +-0.0058088196 +-0.019421238 +-0.025975568 +0.013617539 +0.004929098 +0.021419445 +-0.011664215 +0.009763723 +-0.00055688317 +0.010115114 +0.018725926 +-0.0007000976 +-0.03271611 +-0.01792869 +-0.030753214 +-0.014832068 +-0.0018315166 +0.0315449 +-0.0058077504 +-0.0028196678 +-0.0018145404 +-0.0004493681 +0.0072103343 +0.0053275926 +-0.0029523242 +-0.008178457 +0.011137881 +0.028734298 +-0.02610216 +0.009011626 +0.018608931 +0.008493836 +-0.0055271066 +0.010077278 +0.014998585 +0.0023557357 +-0.010049444 +0.013972753 +-0.0099663865 +0.012005917 +-0.017578408 +0.01110304 +-0.017793274 +0.005162769 +0.0063841185 +0.022647066 +0.003396263 +0.044773288 +-0.001249332 +0.014444681 +0.0063675153 +-0.011391011 +-0.01766648 +0.020104388 +-0.0055002384 +0.030799916 +-0.0053049596 +-0.00065761775 +-0.016618794 +0.009112846 +-0.01310238 +-0.016704993 +0.0027437017 +0.0134712905 +-0.005542474 +-0.00069029507 +-0.021870539 +-0.017222827 +-0.0039405725 +-0.0011241254 +0.010556055 +0.011449893 +-0.052309133 +0.013517659 +0.004041188 +0.041870244 +-0.00027117407 +-0.0028760112 +-0.0025633571 +-0.007863221 +0.012742864 +0.019015953 +0.00017144381 +0.0028333275 +-0.0386473 +0.004445096 +-0.001130453 +-0.010248255 +-0.013259393 +-0.034792047 +-0.0030598352 +-0.0060554603 +0.0054771644 +0.0057477197 +0.005348179 +0.031341176 +-0.02877268 +-0.003308997 +0.008492445 +-0.010648657 +0.016620956 +0.014603933 +0.021127326 +0.020520354 +0.015742818 +-0.004853343 +0.048302297 +-0.019767212 +0.015296939 +0.008563247 +0.006501584 +-0.0050959014 +-0.0006772034 +-0.01961965 +-0.012391087 +-0.027802564 +-0.012905484 +-0.000784698 +-0.005310725 +0.01028442 +0.020441877 +-0.008993356 +-0.020952573 +0.0058265375 +-0.0061488026 +0.009668665 +0.0030312147 +-0.023226302 +0.006291253 +0.0143699385 +0.011492974 +0.002723058 +-0.010552648 +-0.020668937 +-0.012660195 +0.0024014178 +-0.009623503 +0.021224743 +-0.012158707 +0.0033761803 +0.03098063 +-0.012983277 +0.00091809133 +0.01932275 +0.0234872 +-0.00780851 +-0.0055724457 +-0.017471913 +-0.009629449 +-0.00027872357 +0.017536692 +0.007967532 +-0.0071861013 +-0.008968523 +0.015907887 +0.002746223 +-0.0337492 +-0.008313686 +0.036741786 +0.030688956 +0.021626035 +-0.00062843086 +0.004083483 +-0.009249177 +0.010348983 +0.009588419 +0.04261855 +0.007627302 +0.009598379 +-0.023500757 +0.060241636 +-0.0035288087 +0.010161619 +0.009874058 +-0.008607956 +0.008449989 +-0.0016124621 +-0.01197245 +0.008516904 +0.0064834645 +-0.01647801 +0.017985841 +-0.03168292 +0.003362999 +-0.020966513 +0.009818669 +0.011706245 +-0.026807072 +-0.018031243 +-0.012946133 +-0.01109454 +-0.018112563 +-0.041983426 +-0.027093101 +-0.022285938 +0.040560473 +0.00012566427 +0.037988115 +0.02732844 +-0.0018961803 +-0.022542976 +0.014893925 +-0.013049963 +-0.015760163 +-0.0039588725 +-0.045722924 +-0.0008640244 +-0.004539876 +-0.035388112 +-0.028534343 +-0.003177638 +0.0017500042 +-0.0052808872 +0.030441636 +-0.010154057 +-0.017214352 +-0.006369446 +0.008236028 +-0.013112639 +-0.027786084 +0.002823857 +-0.01884835 +0.009260133 +-0.023655893 +0.0017744452 +0.0033011404 +-0.022481857 +0.002364425 +-0.015290617 +-0.010336379 +-0.024346279 +-0.018654482 +0.005489961 +-0.027565815 +-0.006522266 +0.016200373 +-0.0026168744 +0.009870445 +0.020284984 +-0.016638283 +-0.006460103 +-0.006620024 +0.006493533 +-0.010817151 +0.02515663 +0.008297349 +0.013712971 +0.014422144 +-0.0016915794 +-0.01909047 +-0.009822535 +0.000366966 +0.0050958074 +-0.033606283 +-0.009247119 +-0.023108616 +0.036272056 +0.014357111 +-0.017318515 +0.008338791 +0.023175694 +-0.0072374786 +0.01210426 +-0.013821369 +0.002615931 +-0.007946175 +0.0007016219 +0.0141454665 +-0.008148263 +0.013569113 +-0.014548346 +0.014827301 +0.011796928 +-0.006276515 +0.015476976 +0.01144277 +-0.017938733 +-0.017186446 +0.034117304 +0.044961967 +0.00043487002 +0.00039959222 +-0.015239689 +-0.00025412164 +-0.0134363985 +-0.011896479 +0.011560689 +0.0038136658 +-0.019686038 +-0.023421124 +0.04315711 +0.021581603 +-0.01602119 +0.019835727 +-0.005178801 +0.008571806 +-0.01917285 +0.016780285 +-0.004483241 +0.008087902 +0.011770225 +0.034323934 +-0.009835527 +-0.019444918 +0.010374022 +-0.0077351625 +-0.008215438 +-0.029060055 +-0.0008633117 +-0.028112024 +-0.012548544 +-0.017003553 +-0.042048395 +0.0028044325 +-0.011343233 +0.009539399 +0.0059516975 +0.048893772 +0.024718905 +-0.0040970366 +-0.009583977 +0.022761865 +-0.017730994 +0.0032655818 +-0.009502059 +-0.048453823 +0.0017793106 +-0.011864193 +-0.024273006 +-0.015466787 +-0.012409066 +0.0067715263 +0.002819561 +0.021653788 +0.0015384967 +0.010773624 +-0.0031562205 +-0.004368746 +-0.013629296 +-0.004828271 +0.0071985032 +-0.0015350196 +-0.005693108 +-0.0019076968 +-0.01461878 +0.020079575 +-0.021209655 +-0.03705945 +-0.01264058 +-0.037030626 +-0.015948424 +0.01053315 +0.02581712 +-0.015345797 +-0.00874159 +0.027803514 +-0.011942226 +-0.0011856226 +0.013517568 +0.008895395 +0.005905158 +-0.017165618 +-0.0005904629 +0.008308972 +0.0027238138 +0.006005944 +0.019384984 +0.004649688 +0.007381473 +0.009249473 +0.018848129 +-0.0045209774 +0.029782422 +-0.011026491 +-0.011029339 +-0.0203271 +-0.0014179222 +-0.0014018033 +-0.0008701198 +-0.009933673 +-0.019944767 +-0.0026156958 +-0.0065257517 +0.01917293 +0.0066145994 +-0.0005837684 +-0.007568013 +0.021017458 +0.03876908 +0.02442416 +-0.041968994 +-0.0045669866 +-0.01321648 +0.01553513 +-0.009584932 +-0.007946946 +0.029153312 +0.014530798 +-0.00095803174 +-0.011884709 +-0.017190013 +-0.033113282 +0.015069971 +0.00195542 +-0.00790868 +0.017352449 +-0.01491505 +0.009400447 +-0.031480685 +0.014884913 +0.013904139 +-0.01116519 +-0.0013767761 +-0.015635923 +-0.013233883 +0.0051980326 +-0.019297332 +-0.007079263 +0.020707026 +0.008441312 +0.010525869 +-0.019542981 +-0.010983975 +-0.0059945704 +-0.008116828 +-0.008307025 +0.0076530166 +-0.03519927 +-0.013466446 +0.0061367564 +0.0026947688 +0.016185397 +0.013496788 +-0.035427734 +-0.0333536 +-0.027253056 +-0.0023115075 +-0.0036891298 +-0.006445957 +0.00591881 +-0.0032200618 +0.032812722 +-0.006256796 +0.029806983 +-0.025249276 +-0.0076307524 +-0.0151704205 +-0.0126109645 +0.024438418 +0.011337427 +-0.03299529 +0.01982198 +-0.0072511164 +-0.0008014252 +0.007644423 +-0.0068631433 +-0.0032067331 +0.0015338195 +-0.026078055 +-0.024084335 +0.018563349 +-0.011712623 +0.00043112916 +-0.021542754 +-0.020552285 +-0.009534979 +-0.0014411381 +-0.0020770298 +0.004073276 +-0.0072118808 +-0.009388589 +-0.007393171 +-0.012434612 +-0.018097792 +0.00017898939 +0.0022204514 +-0.013422853 +-0.002701925 +-0.001821642 +-0.0065297536 +-0.010063814 +0.013713894 +-0.016708052 +-0.021813534 +0.02257516 +0.026163727 +-0.0070801023 +0.018238757 +-0.008704658 +-0.018384287 +-0.010827101 +-0.0048930487 +-0.016031543 +-0.017055096 +-0.0027723154 +0.009377939 +0.013683781 +0.06433566 +-0.0011603561 +0.00015577728 +0.008045451 +-0.0010901474 +0.0136979725 +-0.005445307 +-0.00068842433 +0.0042458903 +-0.018052636 +-0.01607766 +-0.023929605 +-0.02001681 +-0.016722586 +0.0007227818 +0.01634561 +-0.010639526 +0.013513397 +0.016741157 +0.030739052 +0.025874378 +0.0065335394 +-0.015365923 +-0.013940604 +-0.032096192 +0.035986587 +-0.004956335 +-0.0030500882 +0.004748511 +0.0013301767 +0.01956799 +0.023345834 +0.02834733 +-0.009589967 +0.0127072055 +0.0023656248 +-0.0070295623 +-0.01588687 +-0.0071335915 +-0.017108249 +-0.013427526 +0.01744722 +-0.012612037 +0.0021103187 +-0.028729761 +-0.0005483723 +0.009758099 +-0.012022742 +-0.031842355 +-0.0062000677 +-0.026373256 +-0.009652026 +0.0036567464 +-0.0095320195 +0.00026072777 +0.03016709 +-0.017509477 +0.006005835 +0.0050575314 +-0.008893575 +-0.024854343 +-0.009952314 +0.008651159 +-0.026164485 +-0.0055369544 +0.006466619 +-0.00072635757 +0.029648092 +0.010451803 +0.003064993 +-0.0198403 +0.02213658 +-0.005944941 +0.00430826 +0.0025492434 +-0.00643867 +0.008852393 +-0.023672517 +-0.0017780775 +0.0071330084 +0.0037528842 +0.0040139556 +-0.010292052 +-0.017714322 +0.018334422 +0.0005206169 +-0.019322058 +-0.009171589 +-0.02627248 +-0.03672832 +-0.007225391 +-0.0020868347 +-0.018371634 +-0.001276045 +0.018833546 +0.009159122 +0.02278931 +0.013011911 +-0.019171083 +0.01665362 +0.015046113 +-0.009932497 +0.012791639 +0.017924 +0.024963763 +0.019761551 +-0.024911715 +-0.018624146 +-0.026456185 +0.0025086245 +0.022640835 +-0.029727086 +-0.0027722707 +0.0049875313 +-0.014311111 +-0.007831338 +0.01829865 +0.008362104 +-0.014413261 +0.0053902427 +0.0132166445 +-0.0013219867 +0.0022612337 +0.019168906 +-0.02238437 +-0.004356921 +0.009590624 +-0.031417944 +-0.013962577 +0.025539724 +0.026390832 +0.004623462 +-0.019934105 +0.013463338 +-0.0074762045 +-0.013584187 +0.015455136 +0.0019941423 +0.01658275 +-0.025929831 +0.009323177 +0.010121171 +-0.00078934093 +0.015754057 +0.0018725574 +-0.0036867699 +0.003351038 +-0.0054668235 +-0.0015667727 +0.0054264083 +-0.025741871 +0.0065922746 +-0.0064065563 +-0.0067469375 +-0.0018295235 +0.011563169 +-0.006653573 +0.0074778055 +-0.027694004 +0.0141191995 +0.00081258646 +0.029221587 +-0.0002853283 +0.0048087924 +-0.015290767 +-0.024302084 +-0.0058044703 +0.005197373 +-0.0024771239 +0.008139207 +0.0048807287 +0.003449464 +0.022073483 +0.008638767 +-0.013709625 +0.035372764 +-0.04577296 +-0.011696435 +-0.013578565 +-0.01889092 +-0.026456175 +-0.017487796 +0.013730126 +0.024484491 +-0.0036324323 +0.013394758 +0.021316998 +0.01647262 +0.0034587132 +0.0008928681 +0.028830655 +0.016494645 +0.007174926 +0.001973803 +-0.0036207684 +-0.0060246275 +0.024425862 +0.032377042 +0.003413781 +0.0013289911 +-0.035089727 +0.028176898 +0.010169721 +0.006748951 +-0.009448799 +0.02043663 +-0.00086055347 +0.009922662 +-0.009754861 +-0.02177027 +0.003278754 +-0.019899083 +0.0031908962 +-0.008810901 +-0.0019920468 +-0.011474275 +-0.005380361 +0.01480682 +-0.02534967 +0.017813979 +0.018247893 +-0.01736937 +0.009125929 +-0.0342737 +-0.014687436 +0.015393351 +0.00039272255 +-0.0022693914 +-0.017388849 +-0.0034215837 +0.007339542 +-0.0027833236 +0.0100202495 +0.001411999 +-0.02479732 +-0.026789952 +-0.01997677 +-0.019295799 +-0.0070635974 +0.012818489 +0.0031009617 +-0.0063101514 +0.005293368 +0.01959109 +0.021348983 +0.0030869201 +0.008626071 +-0.025362534 +-0.003651329 +-0.010544043 +0.032853253 +0.01198651 +-0.008247333 +0.011429161 +-0.009098098 +-0.0074314275 +0.013531197 +0.024649508 +0.00426436 +-0.002738998 +-0.0057839365 +0.0029667155 +-0.021813907 +-0.012868842 +0.005261552 +-0.0037242204 +-0.01130052 +0.026295794 +0.0028947557 +-0.0115097845 +-0.0027968157 +0.0021078808 +-0.006597732 +0.0017545618 +0.052768882 +-0.0014413232 +0.0030482928 +0.0029647916 +-0.0044041458 +-0.011370273 +0.001297264 +-0.006837095 +0.008610623 +0.0056908694 +0.0127271945 +-0.008681635 +-0.0027437224 +-0.010219559 +-0.005744678 +-0.00057939335 +0.022396632 +-0.004856736 +-0.010237481 +0.0018615628 +-0.018705133 +-0.003888749 +0.022434281 +0.015500788 +-0.006965519 +0.0066058324 +-0.015585488 +0.004157872 +-0.0309919 +-0.0060945395 +0.016009722 +-0.017208017 +0.01600933 +-0.005203539 +0.00896404 +-0.018913496 +-0.030457523 +-0.0019628445 +0.00088511076 +0.013797033 +0.0080533475 +-0.0065095304 +-0.014531906 +0.0035381857 +-0.005848878 +-0.00038553216 +0.007797634 +-0.022477249 +-0.021840358 +-0.020399703 +-0.0003169292 +0.03415188 +0.011382871 +0.0072359 +0.0066380836 +-0.006612278 +-0.0072875954 +-0.020821206 +0.016120836 +-0.011170283 +0.020281075 +0.0134598855 +-0.012250856 +-0.015960842 +0.002943478 +0.026177892 +-0.010948586 +0.021685138 +-0.0032417155 +-0.021555353 +-0.021138923 +-0.03497127 +0.02984975 +-0.036887135 +0.0023146283 +-0.0071065626 +0.013779027 +0.008376186 +-0.0023724039 +0.02412281 +-0.004751328 +-0.002155087 +-0.008586189 +-0.007385967 +-0.0066751903 +-0.0064160097 +0.00039933107 +0.00018499367 +0.002764369 +0.010149812 +0.0026683228 +-0.005896391 +0.025859745 +0.018439688 +0.019306455 +-0.004238241 +0.02177407 +-0.028754476 +0.008592922 +-0.024486186 +0.0067332336 +-0.01117839 +0.005144518 +0.019092545 +-0.010637547 +-0.013105863 +-0.024852512 +0.034785055 +0.00997913 +0.0016084074 +-0.023957564 +0.0013753026 +0.0029716874 +0.008840924 +-0.015252086 +-0.006505938 +0.012501029 +0.012678343 +-0.0021858201 +0.017892243 +0.007763362 +-0.0063830316 +0.016166372 +0.018765451 +-0.01975868 +0.0013105309 +0.0011885478 +-0.018404068 +0.02220932 +-0.0218653 +0.029875832 +-0.02499057 +0.003949978 +-0.003870419 +0.006740373 +0.0036569608 +0.00015271446 +-0.00013604532 +0.00038706668 +0.014979327 +0.0029082303 +-0.02527042 +-0.025691286 +-0.0377257 +0.027040938 +0.0022408452 +0.004642132 +0.0022023867 +-0.005289756 +0.021562329 +-0.001494447 +-0.019468365 +0.011733504 +-0.0101549355 +0.0041190437 +-0.021211829 +0.019793801 +-0.01858994 +-0.008958629 +0.004134075 +-0.026216853 +9.963173e-05 +0.03313633 +0.014652132 +0.0003168218 +-0.01781159 +-0.0066690007 +0.004651914 +0.0068946197 +0.012097598 +-0.007247571 +0.009927107 +0.03788819 +0.0060679363 +0.0044989134 +0.028534621 +0.017802263 +0.009764658 +0.0028408365 +0.009530772 +-0.021354817 +-0.0011569194 +-0.0065653548 +-0.011942515 +0.020899002 +-0.009557304 +0.01861849 +0.010934997 +-0.0102353 +0.018187141 +0.0034555672 +-0.010878191 +-0.0012276066 +0.009363451 +-0.0045626266 +0.0031324357 +-0.007993705 +0.007529749 +-0.0023787823 +-0.021950124 +0.0114277415 +-0.03070706 +-0.013327414 +0.008412401 +-0.0017692131 +-0.0068515143 +0.014037975 +-0.00229842 +0.02676822 +0.006265814 +0.000111677226 +0.021888869 +0.013772979 +-1.439098e-05 +-0.036175504 +0.0009532225 +0.008730437 +-0.016006978 +-0.0034434057 +-0.034638863 +0.011122531 +-0.020554744 +-0.008810288 +0.017747534 +0.0051763128 +-0.00884083 +-0.015631719 +0.02018702 +0.03592214 +-0.0065817465 +0.015876213 +0.009873386 +-0.01671538 +0.0128304735 +-0.019360255 +0.0042149606 +-0.032774694 +0.007846096 +0.00042353055 +0.010748799 +-0.019087393 +0.0035368644 +0.011627061 +0.023501653 +0.0002533799 +-0.018966364 +-0.0038542252 +-0.01074045 +0.019265676 +-0.014338196 +0.0047109136 +-0.011740125 +-0.0034954294 +-0.0010884859 +0.011656322 +-0.0025019445 +0.02118622 +0.0027518724 +-0.013049503 +0.007265646 +-0.01674721 +-0.020336019 +-0.017964704 +0.0032419339 +0.0071949386 +-0.008794865 +0.00991725 +-0.0015045434 +-0.027630214 +-0.026378054 +0.0024337228 +-0.022460122 +0.0038725035 +-0.011433304 +0.007971435 +-0.0050503234 +-0.0112507595 +-0.032535225 +-0.02529512 +-0.017883452 +0.014708478 +0.0037628766 +-0.0025224672 +0.00903111 +-0.008556088 +-0.008502438 +0.007544834 +-0.019254947 +0.011348347 +0.013066603 +-0.004400473 +0.0029116473 +0.002128723 +-0.011091425 +0.02511638 +-0.0057690917 +0.008888756 +-0.012098129 +-0.009823774 +-0.012380205 +-0.034284487 +0.0036738063 +-0.018521141 +-0.017776094 +0.027810836 +-0.011138747 +0.004483004 +0.0070688245 +-0.01161277 +-0.017622769 +-0.004630994 +0.0022974713 +-0.023231424 +0.012100049 +-0.02018598 +-0.006981377 +-0.03200566 +-0.0073205563 +-0.0079810405 +0.00720188 +0.012927571 +0.004049193 +-0.008052355 +-0.011750859 +-0.0011457122 +0.013270628 +0.039768234 +-0.016442705 +0.0016782613 +0.0003282557 +-0.008455744 +0.012202125 +-0.011081767 +-0.01067562 +7.765552e-05 +3.646112e-05 +-0.007202959 +-0.007504479 +0.020656627 +-0.022717092 +-0.014149617 +-0.0020756137 +-0.013216659 +0.006497794 +0.019949852 +-0.011188108 +-0.010265765 +0.008695717 +0.013709962 +0.005526503 +-0.020807054 +-0.010254523 +0.022584973 +-0.031653184 +-0.015721388 +0.0130703235 +-0.037824206 +0.004332253 +-0.02446903 +0.023575258 +0.011845015 +-0.0071160463 +0.005590355 +0.016003966 +-0.025894541 +-0.0139538245 +-0.0064102733 +-0.026369277 +0.018006861 +0.02063178 +0.050190557 +-0.012793728 +-0.010610066 +0.0121133365 +-0.0036921632 +0.0046839444 +-0.00036864862 +-0.00057820213 +-0.014363565 +-0.026269043 +-0.01975929 +0.007533294 +-0.0031633591 +-0.008471732 +-0.008060012 +-0.010377535 +0.017121837 +0.01432814 +-0.021814588 +-0.0074305497 +-0.0034253665 +-0.025300758 +0.031109834 +0.012984113 +-0.012297631 +-0.007015621 +0.00034744717 +-0.036461614 +-0.020130957 +-0.026951117 +0.0016933122 +-0.014763058 +0.03749001 +-0.019355394 +-0.0064789136 +-0.026013656 +0.00058019825 +-0.029852958 +-0.0024448324 +-0.009013228 +-0.024152577 +0.010291971 +-0.011518792 +0.030163137 +-0.0067315837 +-0.01075414 +0.023937097 +-0.010104552 +0.007997828 +-0.014932574 +0.039969537 +0.010520993 +-0.000683974 +-0.00014402592 +0.019199355 +-0.007445204 +-0.008424035 +0.006479144 +-0.008154457 +-0.0011442008 +-0.028243031 +-0.004134771 +0.018025752 +-0.010693649 +0.028198425 +-0.014694267 +-0.00408311 +-0.015931107 +0.0069398866 +-0.003909412 +0.0030460665 +0.0030632087 +0.018402588 +-0.014021015 +0.008271692 +0.0091708 +0.016788047 +0.004548456 +-0.013010984 +-0.0040176115 +0.018087573 +-0.012756508 +0.017251419 +-0.009974078 +-0.0011294854 +-0.016352743 +0.0006511466 +-0.009010183 +0.013228367 +-0.022083987 +0.023790615 +-0.0124993175 +0.0007718687 +-0.008578583 +0.009021572 +0.013769647 +0.013713756 +-0.021201868 +0.0048101684 +-0.038703416 +-0.03433297 +0.014452548 +-0.0065338826 +0.0064787157 +0.015829928 +-0.015687475 +0.020787774 +-0.022718329 +0.009144168 +0.011142182 +0.015016657 +0.0022134471 +-0.021138841 +-0.021614097 +0.013554226 +0.012164957 +0.0013994923 +-0.00015900018 +-0.0043335333 +-0.01641581 +-0.029318059 +-0.026299926 +0.02304505 +-0.033046696 +0.009438139 +0.006293833 +-0.01664958 +-0.018970383 +-0.012731837 +0.006034013 +0.0016656332 +-0.055514168 +-0.00989668 +-0.029620145 +0.0014951744 +0.000134686 +0.014059332 +-0.0038073263 +-0.0050824927 +0.006400125 +0.032701757 +-0.018148417 +0.023917006 +-0.016377704 +-0.01074281 +-0.0038220296 +0.0055946284 +-0.049377564 +0.0020080402 +-0.021511119 +0.013826815 +-0.0012381217 +-0.008965974 +0.0055955374 +0.011286471 +-0.0065003918 +-0.0047819377 +-0.015153667 +-0.006940446 +0.012186475 +0.0017868514 +0.012564583 +0.01460528 +-0.024406347 +0.0006402405 +0.007825615 +0.009154774 +0.01503649 +-0.0013318023 +-0.010299365 +-0.019165674 +0.008353016 +-0.013282235 +0.013887582 +0.002105876 +0.0005735353 +-0.007444243 +-0.007862197 +-0.008370032 +0.018953687 +0.007836018 +-0.003049837 +-0.01086053 +-0.0016683452 +-0.008565784 +0.0119868815 +0.009315099 +0.021537254 +0.0097807115 +5.569306e-05 +0.008425101 +-0.0016470749 +0.004880179 +-0.003436993 +-0.0037039283 +-0.02214864 +0.038303856 +0.006655498 +0.050695587 +0.006297363 +-0.004444662 +0.017072616 +0.0074653146 +0.0038008136 +0.011469812 +-0.0062073534 +-0.013596132 +-0.009352229 +0.0019809876 +0.0041874065 +-0.005141005 +-1.831066e-05 +-0.00015208132 +-0.0070127053 +-0.0021932 +0.009427838 +-0.0023716928 +-0.024350427 +-0.008615726 +-0.0049208784 +0.028688459 +-0.000112977534 +-0.012450482 +0.024963403 +0.014368149 +0.01835606 +0.02281174 +-0.022999689 +0.008410493 +-0.050771907 +0.00012552539 +-0.011454118 +-0.025904039 +-0.010453074 +0.021495756 +0.0072347336 +0.009503194 +0.02071984 +-0.0041586077 +-0.023308702 +0.0011500004 +-0.0091858 +0.006635342 +-0.023459092 +-0.006271743 +-0.0017243343 +0.011553069 +0.0060566072 +0.02289064 +-0.0056560463 +0.01986658 +-0.017983586 +-5.8934427e-05 +0.011006106 +0.0017621232 +0.017776823 +0.0078066657 +-0.0051480373 +-0.0010275985 +-0.015269034 +0.0046133744 +0.015217769 +-0.01334024 +-0.0030115873 +0.024317928 +0.0028415415 +0.0069438447 +0.029551737 +-0.0060302736 +-0.037736874 +-0.0045173783 +-0.006937384 +-0.032113083 +0.006852652 +0.014762203 +-0.0018290919 +0.0074861166 +0.014121229 +-0.02927846 +0.0039653867 +0.0046856897 +0.0062351767 +-0.019758334 +-0.0056332964 +-0.016075464 +0.0046053873 +-0.025497926 +0.006158368 +-0.008023294 +0.019703792 +0.03162651 +-0.021007895 +-0.0032585773 +0.021867933 +-0.02072069 +0.01718457 +0.042794693 +-0.003341803 +0.01934901 +0.001437435 +0.0012028647 +-0.019489203 +-0.0019577825 +-0.019271575 +-0.022620976 +0.016958898 +0.007941758 +-0.013254817 +-0.004714302 +-0.023621984 +-0.016649667 +-0.006743497 +0.022946745 +0.02279615 +0.0023996818 +0.005340155 +-0.0034357398 +0.0062320465 +-0.010485895 +0.008164812 +-0.016231665 +-0.0013768929 +-0.006284446 +-0.008626887 +-0.03041153 +0.015166558 +0.001307355 +-0.0024676938 +-0.020615926 +0.021827037 +0.009153346 +-0.010917286 +0.010207411 +0.007901932 +-0.014668167 +-0.0140404655 +0.011310106 +0.00078750163 +0.004220001 +0.009781522 +0.0029694042 +-0.009300144 +0.0071155615 +-0.00072098215 +-0.006473638 +0.0113105755 +-0.012042765 +-0.011735888 +0.014130107 +-0.009130028 +0.0021629534 +0.011858004 +-0.0056065856 +0.013053051 +0.0067659547 +0.002962254 +0.009903879 +0.011921378 +-0.008532466 +0.016505223 +-0.0012833521 +-0.020691691 +0.006055008 +-0.014297052 +-0.012813079 +-0.0051761097 +0.0059869178 +0.013316066 +0.009889747 +-0.001340036 +-0.0014499129 +0.011051521 +0.0024951373 +0.0058923797 +-0.007883353 +-0.0017526178 +-0.0076100165 +-0.0013907637 +0.008321288 +0.0010874753 +-0.020349005 +0.0015290828 +-0.0056924373 +0.020585615 +0.0047087516 +0.004344661 +-0.0074172327 +0.001591456 +0.025887603 +-0.0024443488 +-0.023180127 +-0.005372774 +-0.003936533 +0.020507922 +0.0037315034 +-0.006187932 +-0.021799933 +0.023710571 +0.0014228526 +-0.013120557 +-0.0036824958 +0.031987455 +-0.010651843 +0.030958239 +-0.014791324 +0.006823891 +0.0013425706 +0.008295214 +-0.012081851 +0.005156832 +0.011066047 +-0.021276338 +-0.008111996 +0.03193122 +-0.0060036574 +0.00074079446 +0.024313757 +-0.0042114127 +0.016927224 +-0.018352447 +0.015715633 +-0.016264582 +0.00200335 +0.0036827736 +-0.016687553 +0.012347282 +0.004810628 +-0.011702992 +0.0053552124 +0.016392734 +-0.012958574 +-0.020202635 +-0.008535184 +-0.026121115 +0.011730649 +0.021257296 +-0.015327546 +0.019901957 +-0.018728783 +0.0011604594 +0.016582096 +-0.012911309 +-0.015328296 +-0.004646252 +0.0037374306 +-0.013078376 +0.031592153 +0.0041118865 +0.0032469425 +-0.010762743 +-0.022213181 +0.00027223036 +0.037343584 +0.004239526 +-0.008077458 +-0.01808385 +0.0044229804 +0.010290177 +-0.019245144 +-0.014410797 +0.0021527812 +-0.005173012 +-0.0056987624 +0.009106203 +-0.009284069 +-0.004805091 +0.0032188827 +0.014429136 +-0.0032195246 +-0.020437537 +0.06048917 +0.007476195 +0.0030882177 +0.012660718 +-0.0038680008 +-0.005126954 +0.006632741 +-0.005913183 +0.0030583758 +0.004951579 +-0.008919938 +0.013508492 +0.0010610217 +0.009251385 +0.012655582 +-0.018163675 +-0.0034008522 +-0.011200641 +0.005291099 +-0.00040524034 +-0.006769835 +0.012480143 +-0.004109409 +0.0056417123 +-0.007963627 +0.016452303 +-0.006218255 +0.0013685562 +-0.06932553 +-0.011664525 +0.014855637 +-0.020173589 +0.012762262 +-0.009933917 +-0.0055280277 +0.0001405428 +-0.0062693 +0.015781417 +-0.012006329 +0.013979235 +0.05186817 +0.01573159 +0.010074045 +-0.005319728 +-0.011427434 +-0.00084629987 +0.0023149273 +-0.016357625 +-0.014874778 +-0.020103954 +-0.0016799853 +0.00059820997 +-0.0024598865 +0.009540432 +0.0232188 +-0.012716784 +0.0076559028 +-0.011274302 +-0.0010323124 +-0.011017735 +0.017364984 +-0.00812217 +0.0043400214 +-0.02505209 +0.01993168 +0.011423951 +-0.003112749 +0.032825936 +-0.005661876 +-0.022568297 +-0.003123439 +-0.0004951709 +0.013171284 +0.0070412667 +0.012332936 +-0.013846286 +-0.013120397 +-0.0022422185 +-0.00019562672 +-0.0030730374 +0.030040536 +0.011027038 +0.014635211 +-0.005898029 +0.0019536705 +0.00022958644 +0.0072527677 +-0.009636301 +-0.004759823 +-0.005863907 +-0.005362374 +-0.014416341 +0.008290555 +0.008650992 +-0.00037369775 +-0.009587532 +-0.007727224 +-0.00933294 +0.013607206 +0.0025891585 +0.006369746 +-0.003026828 +-0.00033047094 +-0.0018454273 +0.02963928 +0.010300619 +0.0056645307 +0.023369985 +0.0060466924 +-0.005131699 +-0.0035282616 +0.048677836 +0.008329586 +0.008931283 +-0.024025323 +0.004580741 +-0.005929807 +-0.0053957016 +-0.006356251 +0.020596176 +0.00315574 +-0.011693879 +0.01495923 +0.024609512 +-0.013218533 +0.0043532304 +0.018081 +-0.0190885 +0.0027884867 +-0.016032908 +0.0132631445 +-0.02859619 +0.009073532 +-0.0081069525 +-0.004272836 +-0.00047303064 +-0.002328643 +-0.004480506 +-0.008757816 +0.0060333475 +-0.008706685 +-0.02023753 +-0.019729983 +-0.016884591 +0.016856048 +-0.00016121707 +-0.005838364 +0.00996012 +-0.03372419 +-0.00498542 +0.0045836074 +-0.023597272 +-0.0032664533 +0.0052015 +0.0016726989 +0.012291333 +0.013827101 +-0.020014042 +8.9478945e-06 +-0.00050123554 +-0.014070228 +-0.008055991 +0.03662764 +0.022088537 +-0.0015930601 +0.009560656 +0.009423601 +-0.0029836523 +0.010527705 +-0.0046262057 +-0.014929604 +0.023166709 +0.011818284 +-0.0017785088 +0.0051535526 +-0.0008527011 +0.00037774708 +-0.005634704 +0.01874396 +0.016807728 +-0.011181778 +0.007822718 +-0.004148766 +-0.00036568072 +-0.00041952537 +-0.001932244 +-0.008668731 +-0.007678458 +-0.009386118 +0.028557664 +-0.015580262 +0.005404426 +0.008948062 +0.037845198 +-0.002383152 +-0.0106227975 +-0.007039731 +0.015809987 +0.0011527704 +0.008026177 +0.025616402 +-0.023164961 +0.008297066 +-0.013469018 +-0.002203732 +-0.017549133 +-0.0051630954 +-0.0010480474 +0.0104668 +0.021635383 +0.010324408 +0.0053013954 +0.0066921203 +-0.011014291 +-0.022925224 +-0.0027141082 +-0.005184984 +-0.010709756 +0.0152184935 +-0.014841323 +0.005054292 +-0.0069556856 +-0.012834957 +-0.00060903374 +0.01027363 +0.0038860855 +-0.012457923 +0.029911779 +0.008321714 +-0.009867563 +-0.008660335 +-0.0044824253 +0.006400952 +0.01224147 +-0.01718577 +-0.02550766 +0.016410256 +0.008580857 +0.010339609 +0.0009287248 +-0.004515194 +0.008299539 +0.025860308 +-0.0013007036 +-0.021957794 +-0.0069180313 +-0.0023310122 +-0.009157665 +0.016448887 +0.0031702614 +-0.0016485363 +-0.0028767558 +-0.020202037 +-0.03426948 +0.011685618 +0.018449582 +0.03170378 +-0.008058898 +-0.014255906 +0.013535096 +-0.014047742 +0.0018029516 +-0.028475681 +0.0348483 +-0.008450165 +-0.017547771 +-0.0023756155 +0.0019307211 +-0.02356714 +-0.008294426 +0.0074080206 +-0.012960436 +0.011719292 +-0.0020752759 +0.0141331535 +-0.008206098 +-0.037792724 +-0.020392869 +0.009815744 +0.0077316514 +0.006525346 +0.02182814 +0.020127418 +-0.0052059 +-0.025247429 +-0.008981856 +-0.018209634 +-0.0017052011 +0.022181015 +-0.0061837593 +-0.023516413 +-0.0001331995 +-0.008289596 +-0.03931966 +0.01043972 +-0.0059618843 +0.0012841587 +-0.0126062445 +-0.013567699 +-0.0052096434 +-0.0051293112 +-0.00044649656 +-0.0064786933 +-0.022042371 +0.0032385204 +-0.010867386 +0.012004391 +-0.013409208 +0.007370788 +0.01651483 +-0.02191408 +0.0056408723 +-0.005065107 +0.004952552 +-0.02265638 +0.008087802 +-0.038282026 +-0.0078070066 +0.010639038 +-0.0045752716 +-0.017643886 +0.00064020377 +0.019704556 +-0.006918088 +0.0043813135 +-0.016175438 +0.025635937 +-0.00792063 +0.07416404 +0.032090634 +0.01223347 +0.0032552637 +0.020234982 +-0.0018076209 +-0.01921785 +-0.0053365505 +0.0006634642 +0.006693099 +0.004183402 +-0.028693225 +-0.0077990717 +-0.014531118 +-0.0025763623 +0.0008368794 +-0.0048943954 +0.013427173 +-0.0031954302 +0.0069183735 +-0.0016595423 +0.014909126 +-0.018635169 +-0.028741002 +0.0018613983 +-0.024835045 +-0.039552484 +0.0053469026 +-0.020351658 +0.0033242307 +0.0001351526 +-0.008662722 +0.014398152 +-0.011943314 +-0.0025045269 +0.014567206 +-0.037383214 +0.0033669947 +0.0065940153 +-0.03875408 +0.0074219755 +0.011691356 +0.014580171 +-0.009912626 +-0.01941208 +-0.0143395765 +0.0049739853 +0.0061557977 +0.029309595 +-0.011187938 +-0.006797661 +-0.028718857 +-0.0058757407 +0.000384605 +0.0016523869 +0.016906777 +-0.007796259 +-0.02723599 +0.01069639 +0.014098968 +-0.015401768 +0.01286363 +-0.010756825 +-0.0002134516 +0.027524937 +0.0054536755 +-0.020684645 +-0.00013119352 +-0.01501759 +-0.018266348 +-0.026335755 +0.01604676 +0.009886388 +0.0065678377 +0.027309282 +-0.016700564 +-0.025417117 +-0.024548179 +0.0076232436 +-0.033066537 +0.001419423 +-0.0018993366 +-0.031150037 +-0.004915068 +-0.0036633308 +0.009464054 +0.0019083222 +-0.019704722 +-0.002862052 +0.009962729 +0.011990738 +-3.137409e-05 +0.0126788765 +0.017673213 +0.027099049 +0.011660664 +-0.00019663069 +-0.017183656 +-0.0455684 +-0.003674668 +-0.006219104 +-0.011684431 +0.0028833048 +0.0069156126 +0.0087334085 +0.0063626394 +0.027752599 +-0.0150545845 +0.006422587 +-0.012792102 +-0.013083933 +0.015153349 +-0.00077376235 +-0.0083028255 +0.011016606 +-0.040851425 +0.010398418 +0.001138519 +0.0061664972 +0.007498379 +-0.035181675 +-0.00898459 +0.009294608 +0.001112661 +0.0037334277 +-0.011741288 +0.0122326445 +-0.013169775 +-0.018038291 +-0.019212138 +-0.0011859493 +0.008509386 +0.023931438 +0.019987144 +-0.0030441128 +-0.021935504 +-0.009278007 +-0.022711497 +-0.021798413 +0.018242849 +0.0056278175 +-0.009337748 +-0.02915292 +0.012581524 +0.0065104333 +0.015119378 +0.009415258 +0.0023502966 +0.021172795 +-0.0041881674 +0.012171918 +0.020948408 +0.009106963 +-0.008596813 +0.008762694 +0.0024731387 +-0.0027336385 +-0.00035417764 +0.007868557 +-0.018740103 +0.004202827 +-0.024618762 +-0.004919496 +-0.011131748 +-0.01180706 +0.009876006 +-0.02307916 +0.001936594 +-0.0009874228 +-0.0015627677 +-0.0066168145 +0.014465534 +-0.012294114 +-0.04035648 +-0.018292366 +-0.035861365 +0.027365822 +0.006562406 +0.002390214 +0.010447573 +-0.010607543 +0.0006974542 +0.010292441 +-0.008477252 +0.0018138322 +-0.017191304 +-0.02223657 +-0.011358793 +0.029152527 +-0.010411131 +0.012741029 +-0.011282157 +-0.010492758 +0.0036060438 +0.009630078 +-0.001906133 +-0.002115725 +0.017185068 +0.0026651027 +-0.0143064605 +0.007794095 +-0.005115749 +-0.017678987 +-0.001553433 +0.0014622143 +-0.05075698 +0.007666131 +0.013331825 +0.01184274 +0.0106166685 +0.0022021816 +-0.0041774134 +-0.018040614 +0.013698889 +-0.020583259 +-0.022520585 +-0.031038908 +-0.01250636 +0.01042444 +0.0006252206 +-0.0012512212 +-0.003972617 +-0.013371511 +0.008986756 +-0.011362608 +-0.010465089 +-0.00063048356 +0.018374044 +-0.03528406 +-0.006081823 +-0.0036484355 +-0.004694838 +-0.006038668 +0.014597808 +0.0015355216 +0.008472037 +0.00061944034 +-0.043670096 +0.022118138 +0.0057452368 +0.0843568 +-0.005562091 +-0.015484455 +0.02882566 +0.0112360325 +-0.01211968 +0.005874925 +-0.0017321015 +-0.01430584 +0.007965946 +-0.002394041 +0.010291342 +-0.013456501 +-0.016944677 +0.00789619 +0.005518686 +0.010260344 +-0.013185024 +0.012260826 +-0.004934159 +-0.029239532 +-0.00027236747 +-0.0060876645 +-0.031112349 +0.005049619 +0.016692465 +-0.0012460105 +0.00925005 +0.03055265 +-0.012228168 +0.0015552473 +0.008090113 +0.024493726 +0.03640934 +0.026426613 +-0.019908546 +-0.0010944895 +-0.007273365 +-0.0059219184 +0.011142986 +-0.012432156 +-0.009944688 +0.007561378 +-0.02271 +0.011774297 +-0.022627572 +0.020834282 +0.010870134 +0.026665159 +0.01878811 +-0.012746054 +0.0031179762 +-0.0042222966 +0.023519386 +0.0033676636 +0.002140993 +-0.01119786 +-0.014459277 +0.00892485 +-0.0053206887 +0.0036766708 +-0.0012121617 +-0.004659375 +0.008639295 +0.021233799 +-0.0038646597 +0.018344605 +-0.0069584143 +0.002818686 +-0.0270762 +0.018677361 +0.006128325 +0.017594729 +0.010917124 +0.019556914 +0.008639783 +0.0080955485 +-0.0013330191 +-0.011657846 +0.0011997205 +0.028868776 +0.009409988 +-0.015740043 +-0.016829694 +0.015930941 +0.0083057 +0.025001638 +0.008324711 +0.002531299 +0.012811716 +0.021333722 +0.018160127 +-0.008238762 +-0.020603085 +0.010559615 +-0.010992891 +0.0023753718 +-0.012896998 +-0.008753019 +0.005158627 +0.00093973905 +-0.0031279728 +-0.03673818 +0.0079315845 +0.010938057 +0.012329311 +-0.016360922 +0.008446771 +-0.03824598 +-0.013304695 +0.011243494 +0.006563948 +0.0041531036 +-0.0041857744 +-0.008510541 +0.0025348926 +0.04411648 +0.0019572428 +0.024342861 +-0.011566695 +0.01788592 +0.021243935 +-0.008046028 +0.00660741 +0.014532726 +-0.0069011743 +0.0031185332 +0.005018428 +-0.0067786723 +0.011111308 +-0.02218951 +-0.008959896 +0.028986549 +-0.0024361394 +0.02128117 +-0.010509542 +-0.013774994 +-0.0032673625 +0.0044851196 +0.002803878 +-0.022402465 +0.015666837 +0.022864562 +-0.0032651343 +-0.011940572 +0.00198559 +0.017414244 +0.017278053 +-0.000998474 +0.019606533 +0.022539252 +0.0011283254 +0.012065419 +0.014725509 +-0.0028341345 +0.005843539 +-0.024247546 +0.0029058768 +0.024210215 +0.0030653223 +0.012030282 +0.0053284294 +-0.011099869 +-0.012117879 +0.022185873 +0.0031449762 +-0.007922291 +0.013514116 +-0.008569184 +0.009689594 +0.006163398 +-0.019556468 +-0.008982216 +0.014405594 +0.010542828 +0.006991454 +-0.008036782 +-0.014926902 +-0.0126569355 +-0.005803961 +-0.0037313295 +0.0012573679 +-0.005785906 +-0.00195947 +0.015661845 +0.008641007 +0.0038325333 +0.015818248 +0.016809925 +0.017206188 +-0.0053329635 +0.009927044 +-0.026472809 +-0.008026419 +0.012089064 +-0.01634024 +0.01159986 +0.010691078 +-0.008117906 +0.002192196 +0.025958344 +-0.0075278394 +-0.010079954 +-0.0017981683 +-0.006737213 +-0.021183373 +-0.023924572 +-0.02021068 +-0.0048296936 +-0.0066886805 +0.014940781 +-0.010799268 +-0.04012651 +-0.0024804028 +0.0024378353 +0.015402834 +-0.02171602 +-0.021077896 +0.021234386 +-0.028646681 +-0.0098588085 +-0.0016493155 +-0.025245598 +-0.013285637 +-0.0042099766 +-0.014346362 +0.020993324 +0.0028183996 +-0.01766947 +-0.017046887 +-0.0034617193 +-0.008581742 +0.020345032 +-0.0003075741 +-0.004087338 +-0.008324896 +0.02302825 +-0.01747529 +0.0143297985 +-0.0074943444 +0.04972768 +0.026580753 +-0.006402279 +0.0127080735 +0.02025147 +-0.0045670066 +0.020022657 +-0.009782239 +0.00885231 +0.0049718907 +-0.02503473 +0.011707685 +-0.026716467 +-0.0018281495 +-0.006655671 +-0.0012385111 +-4.260214e-06 +0.012632557 +0.009947901 +-0.011532123 +-0.019393431 +-0.0030386625 +-0.008834422 +-0.008197349 +0.015085772 +-0.035371937 +0.005915406 +0.017948607 +0.0052920054 +0.01090705 +-0.011837647 +0.003143934 +-0.030549878 +-0.011812608 +-0.026903972 +-0.013065711 +0.00526051 +-0.022217378 +-0.0025614132 +-0.018369252 +-0.012322808 +-0.010157424 +-0.019586146 +-0.0032545603 +-0.0015236146 +-0.010589642 +0.0025775768 +0.00010844884 +-0.025799701 +-0.012083047 +0.016465625 +-0.028078936 +-0.018071022 +-0.008557272 +-0.011037523 +0.009874979 +0.0069425153 +-0.028740013 +0.04671931 +-0.0047457083 +0.06458257 +-0.0069445884 +0.014112735 +0.01411862 +0.0052412986 +-0.005797879 +0.025638402 +-0.0051128445 +0.0038664143 +-0.003644664 +-0.0065963767 +0.024263514 +0.00845109 +-0.0028991336 +0.01181906 +-0.002893967 +-0.008722638 +0.005680351 +-0.018827613 +0.010392349 +-0.01763171 +-0.023556203 +-0.0022713554 +0.009604125 +-0.010065869 +-0.0046937005 +-0.030251488 +0.0012052993 +-0.012769487 +0.0068190815 +-0.008813333 +-0.002552871 +0.027613346 +0.018187657 +0.0051454394 +0.00908118 +-0.028877025 +0.015843514 +-0.011659051 +-0.02909504 +-0.0041926806 +-0.007076459 +0.014484291 +-0.023612972 +0.017601289 +-0.024870573 +0.008198563 +0.0120963305 +0.027106518 +0.014068218 +0.00398012 +-0.003324199 +0.010941009 +-0.008029844 +-0.017531263 +-0.0071484996 +-0.0122604435 +-0.02015287 +0.004317107 +-0.010944572 +-0.009592448 +0.0038617032 +0.0017959883 +-0.0044750962 +0.051593356 +0.004652776 +0.027445393 +0.022831924 +-0.005245605 +-0.01825843 +-0.0069748675 +0.012095045 +-0.017641746 +0.0023257032 +-0.013135273 +0.015110003 +0.0075122314 +0.023156717 +0.019496035 +-0.008606779 +0.008517257 +-0.013881657 +-0.018068563 +-0.0040463125 +0.0055395085 +0.0002356038 +0.005390534 +-0.022599876 +0.0025367266 +-0.0033145815 +0.0049009076 +0.0018420287 +0.0007372486 +-0.0032542942 +0.00015410053 +0.024279932 +-0.015951857 +-0.0019714434 +-0.01897976 +0.0006418494 +0.0012626385 +0.012148112 +-0.009440605 +-0.013712854 +0.028459856 +-0.0099382885 +0.008714248 +-0.019925326 +-0.024935346 +-0.014780204 +0.019291684 +0.023957388 +0.0084135225 +0.0059728646 +-0.014599931 +-0.0070144874 +-0.0024308164 +-0.0054731257 +-0.008394508 +-0.018258221 +0.008790213 +0.00540097 +-0.016732689 +0.009940653 +0.0349901 +0.011468776 +0.007563015 +-0.0030311025 +-0.013079216 +-0.013656867 +-0.0069017466 +-0.01528243 +-0.01574684 +0.0043816436 +-0.012100821 +0.0018787828 +0.0009283914 +0.010309429 +-0.007715649 +-0.0004913895 +0.0009293348 +-0.011509349 +-0.017005175 +-0.011534613 +-0.016746072 +-0.01548277 +-0.016948009 +-0.011269094 +0.006436984 +0.018891897 +0.02743596 +-0.02279909 +0.007696622 +0.014513676 +0.015156488 +0.0055396785 +-0.02496669 +0.011963265 +0.0047337892 +0.002544965 +0.009822698 +0.022804659 +-0.0026599409 +-0.013207303 +-0.009325177 +-0.026394013 +0.017048676 +0.009089504 +0.009339183 +0.041796718 +-0.014784039 +-0.003919357 +0.0062634 +0.00022163168 +0.010791802 +0.003057593 +-0.0008727101 +0.014479343 +0.0016516856 +-0.005591973 +-0.0075236885 +0.0065976996 +-0.018861553 +-0.017613277 +-0.038560558 +0.021952337 +-0.004543286 +-0.007492046 +-0.0027082497 +-0.004090622 +-0.0053526987 +0.021884616 +-0.021122888 +-0.0024796287 +0.014221577 +-0.010610617 +-0.007904679 +0.0088490825 +-0.02371838 +0.019200835 +0.01457324 +-0.002414914 +-0.008854523 +0.0015133254 +-0.0077019623 +0.0007640917 +0.01070276 +0.0029108464 +0.0060240193 +0.01256782 +0.0013743635 +-0.027447607 +-0.008271043 +0.00070084626 +0.0129093295 +-3.1927924e-05 +0.0068063373 +0.0031091222 +0.003648252 +0.006543718 +0.028258163 +0.004777597 +0.020500896 +-0.0013496848 +0.002629843 +0.00879606 +-0.016225794 +-0.0037802726 +0.0035116673 +-0.007902214 +-0.022527449 +0.019425303 +-0.010248228 +-0.012784494 +0.0123280175 +-0.0021125597 +-0.027954865 +-0.01444729 +-0.02170258 +0.003060823 +-0.012745992 +-0.022519127 +0.024575958 +-0.016809056 +-0.003901279 +0.00023601901 +-0.004473661 +-0.01473328 +-0.030991746 +0.029951118 +0.0021208446 +0.0112601025 +0.0073980587 +0.0011691932 +-0.0022078177 +0.0065610954 +-0.017121289 +-0.010788552 +0.033920437 +-0.032928597 +0.01816893 +0.008314664 +0.0026936638 +0.013366223 +0.0003682378 +0.016523704 +0.00033439562 +0.008205315 +0.004172034 +-0.016963637 +0.01406543 +-0.012203165 +0.02102595 +-0.019061605 +0.0038597682 +-0.0033092713 +-0.008488581 +0.0040739733 +-0.018313896 +0.014459742 +0.018361317 +-0.007555555 +-0.00533764 +0.01064138 +0.017083297 +0.0070968056 +0.021997584 +-0.039027587 +-0.017728757 +-0.01612756 +-0.007361906 +0.016077884 +0.005215457 +-0.0036013084 +-0.010302872 +-0.0050611906 +-0.0046629244 +0.009264252 +0.013016966 +-0.0003936745 +-0.009658222 +0.013747932 +-0.00021688477 +-0.0032221728 +0.016071033 +0.0057366877 +-0.021583952 +0.02116884 +-0.009578941 +0.008729964 +0.0010268043 +-0.009393676 +-0.011643522 +-0.0017701319 +-0.00093996397 +0.001909533 +-0.009711493 +0.007847349 +-0.021229323 +-0.009335286 +0.017309265 +-0.002195918 +-0.0027812594 +0.008133985 +0.010018431 +-0.009205481 +0.018074522 +0.013703084 +-0.009621387 +-0.007510292 +-0.031884607 +0.001319542 +0.01467736 +0.00046383473 +-0.009901148 +-0.0051999995 +0.0301058 +-0.011576022 +-0.042778462 +0.0039118347 +0.0001532189 +0.0029746438 +0.02302945 +0.022519704 +-0.0030733715 +0.017930277 +-0.0051884768 +-0.007988137 +-0.0218357 +-0.022917757 +0.005564971 +0.018001612 +-0.022551244 +-0.024701336 +0.009319119 +0.007376446 +-0.015267802 +0.0025574362 +-0.003733076 +0.0049250345 +0.003824889 +-0.005945871 +-0.022825584 +-0.0039580464 +0.008931718 +0.013850995 +0.0041776383 +-0.00034873464 +0.0111742085 +0.0068576573 +-0.002198631 +-0.013451149 +0.038027637 +-0.022217885 +0.0070610214 +-0.004821753 +0.00033848544 +-0.0043124384 +0.012967226 +-0.018103722 +-0.026938627 +-0.00030187273 +-0.020422677 +0.015375677 +0.0013919597 +-0.0118784355 +-0.0063442863 +-0.017506057 +0.023089519 +-0.0027327684 +0.015785933 +0.011181294 +-0.017791044 +0.0037950967 +-0.018764596 +0.008823029 +-0.0072754617 +-0.006381527 +-0.0088207945 +-0.02237357 +-0.0013057598 +-0.0039203684 +-0.0012788473 +0.019492337 +0.025463378 +0.005563908 +0.0050156917 +0.0029961937 +-0.03822979 +-0.011595922 +-0.0038574215 +0.008672732 +0.006068858 +-0.010953471 +-0.013277686 +-0.0029650833 +-0.017614877 +-0.024977904 +0.017283408 +-0.0075141853 +-0.0012984973 +-0.032857914 +0.014790013 +0.007729209 +0.0070810867 +0.0047155744 +0.006481086 +0.014084621 +0.008515631 +0.004464293 +0.01547566 +-0.0015892372 +0.019958664 +0.007765186 +-0.027864022 +-0.012670363 +-0.0035266322 +-0.007579277 +0.01739318 +-0.009461649 +-0.00062013866 +-0.008672532 +-0.01985446 +-0.010322775 +-6.0201244e-05 +0.017106207 +-0.0067265057 +-0.005261999 +-0.0078576 +-0.005447344 +0.011560348 +0.037321944 +0.006534013 +-0.0023749475 +0.0067435186 +0.0015610735 +0.011526909 +-0.010612897 +-0.02496287 +0.03048913 +-0.0036915892 +-0.0009457589 +0.0104889935 +-0.012426625 +0.016227998 +0.0054551596 +0.018976191 +-0.0016444494 +-0.006960573 +-0.00081386836 +-0.0020118183 +0.0004791525 +0.026516993 +-0.014590117 +-0.01684238 +-0.03444204 +-0.008666325 +0.0062254565 +0.006214586 +-0.0035041377 +-0.006824136 +0.002713423 +-0.005707523 +0.009971588 +0.013110184 +-0.0133276805 +-0.026223484 +0.01847487 +-0.016362332 +-0.024031231 +0.00018816211 +-0.009944305 +0.005159843 +0.005501079 +-0.022507736 +0.024406176 +-0.009858828 +-0.0110132545 +0.0033525603 +-0.008954135 +-0.01609391 +0.003932644 +0.0122752 +0.0025033727 +0.004103932 +0.024693541 +-0.0063493443 +0.024888404 +-0.028441913 +0.009442658 +-0.0037298794 +-0.004292419 +0.04567458 +-0.005102531 +-0.004580926 +0.0058403127 +-0.023268461 +0.0050745583 +0.01773753 +-0.008026226 +-0.016504604 +-0.00837124 +-0.011732346 +0.00067738566 +0.012704361 +-0.0002346389 +0.0124198245 +-0.0018895463 +0.0072177127 +-0.03052837 +0.026651666 +-0.034718674 +-0.008847685 +-0.022411065 +-0.030116623 +0.008695919 +0.005383956 +0.023115175 +0.0040372577 +0.024498936 +-0.0487503 +0.020559838 +0.0059687765 +-0.016097857 +0.0046052053 +0.012401005 +-0.0023262885 +0.00936097 +0.010301459 +-0.014365486 +0.008874034 +-0.001334546 +0.011142974 +0.0035279624 +-0.0053849122 +0.0027218882 +-0.010920195 +-0.015112596 +0.0011181915 +0.0064356187 +-0.0021114063 +0.010294464 +-0.010074429 +-0.016802559 +0.0065086605 +0.019322036 +-0.013779592 +0.002589936 +0.0028188056 +-0.0022696734 +-0.013984602 +-0.0017390103 +-0.0048905653 +0.006943603 +0.019296834 +0.0108443005 +-0.009879367 +-0.0152572235 +-0.000841864 +0.00291731 +-0.0022113519 +-0.029349063 +0.0014170797 +-0.0043830974 +-0.024511289 +-0.021270355 +0.00968558 +-0.014644902 +0.011770133 +0.026878763 +-0.019625887 +-0.025891893 +-0.0056009 +0.018200997 +0.001890618 +0.007261985 +0.015588609 +-0.0011715622 +0.021332074 +0.007800896 +0.0018352517 +-0.008276156 +0.006803556 +-0.0033944643 +0.01910537 +-0.00089145254 +0.012600559 +-0.0012234158 +-0.008815977 +-0.002281636 +-0.010781935 +0.0070160762 +-0.014237271 +-0.010971931 +0.012260076 +-0.00704355 +-0.008391806 +-0.014752525 +-0.010264722 +-0.01877762 +0.004396077 +0.009137267 +-0.03138585 +-0.0010951774 +-0.0046492014 +-0.017347358 +-0.0038490964 +0.022229016 +0.0070737605 +-0.017223248 +0.017748425 +-0.020769509 +0.012537009 +-0.0061282995 +0.02642989 +-0.012166704 +-0.021284906 +-0.024142858 +0.018647734 +0.009323671 +0.004404418 +0.026756866 +-0.00026130996 +-0.021192383 +0.018423412 +0.015166349 +0.008642709 +-0.0139058605 +-0.013190663 +-0.010051201 +0.005306575 +0.0047275266 +0.008864032 +0.026885275 +0.013546839 +-0.013640244 +0.0052860365 +-0.0006487358 +0.023426045 +-0.0064275223 +0.0013942374 +0.03356107 +-0.027848642 +0.021950407 +-0.0045707594 +-0.0019240186 +0.011140094 +0.027482985 +-0.006061525 +0.0068587326 +-0.0056027276 +-0.026915776 +-0.003409485 +-0.019396534 +0.005106674 +-0.042280734 +-0.035746697 +-0.0005149207 +-0.0048620235 +-0.017058065 +-0.0036106852 +0.0033126117 +0.008955217 +-0.027982026 +-0.016899757 +-0.020129366 +-0.0077206595 +-0.014829557 +-0.0070515517 +-0.0023612578 +0.019638846 +-0.03184051 +0.0155479545 +0.02777728 +0.0016095876 +0.01192157 +-0.028359765 +0.0077560176 +0.021772733 +0.002388682 +0.020737024 +0.004007616 +-0.0017272674 +0.0067922575 +0.028319912 +0.026083738 +-0.0014292503 +0.0039024316 +-0.0035822478 +0.012796874 +-0.006287188 +-0.018144457 +-0.011013628 +0.0033879867 +0.016184263 +0.0012186964 +-0.028379967 +-0.01382147 +-0.0070924684 +0.008231077 +0.024572507 +0.0013007029 +0.017605452 +0.0045506805 +-0.002146987 +-0.0127837155 +-0.0017182512 +-0.0022087016 +-0.001886434 +0.0038016464 +-0.0011600908 +0.017095758 +-0.01935455 +-0.0038547346 +-0.006280266 +-0.016089197 +-0.014420163 +-0.018983535 +0.010909161 +-0.0037592074 +-0.009313409 +0.01227198 +-0.0024899484 +0.005001002 +-0.0237333 +-0.02062568 +-0.009497817 +-0.010651533 +-0.0017715396 +-0.014034052 +0.030932354 +-0.011725615 +-0.013592298 +-0.009922027 +0.004399999 +0.025838427 +-0.043378 +2.7975975e-06 +0.020802276 +0.0056977277 +-0.024999537 +0.014151186 +0.0056784675 +-0.017447783 +0.0050836573 +-0.0053928555 +0.0138110705 +-0.013735367 +0.0005459745 +0.00060814957 +-0.007392225 +0.005538372 +0.010995381 +0.005897151 +0.004140355 +0.0010172217 +-0.008881425 +-0.0061773267 +0.03546115 +-0.0029498697 +0.013400004 +0.025223868 +-0.006690392 +0.005566293 +0.002981721 +-0.013147185 +-0.0020552932 +0.0037313148 +0.0074023977 +0.007927392 +-0.0043681823 +0.003303582 +-0.030610947 +-0.006908524 +-0.005498067 +0.0010782405 +-0.027662877 +0.0107285855 +0.0015118265 +-0.0054350505 +-0.008165697 +0.0055769067 +0.01517883 +0.0017351643 +0.007501694 +-0.002166088 +0.009520705 +0.01681691 +0.0011229453 +0.010808701 +-0.0072791 +0.014086383 +-0.02123802 +-0.006163875 +0.005180295 +-0.016703945 +0.016309533 +-0.004612655 +0.003950532 +0.0063453703 +-0.011443836 +-0.0016306296 +-0.022345334 +-0.0022279292 +-0.022238601 +0.0122608105 +-0.006618823 +0.004304973 +-0.011704975 +0.008717284 +-0.0071351747 +-0.0137484735 +-0.027877757 +-0.013975224 +-0.011320176 +0.0088396575 +0.015308448 +-0.0024517819 +0.050897848 +-0.007021156 +-0.0045033568 +-0.0072613875 +0.007664438 +0.007860916 +0.0013111751 +-0.009936219 +0.010064345 +-0.015856631 +0.002202653 +-0.0032593438 +-0.012379312 +0.0018059871 +0.015160514 +0.0107506225 +0.013294534 +0.01038672 +0.011804939 +0.014421554 +-0.00793195 +0.0007330276 +-0.013651861 +-0.010979603 +-0.018751472 +0.018439045 +-0.011076774 +0.009737054 +0.0007921674 +-0.03202926 +-0.010676725 +0.035070125 +0.003411099 +-0.020553133 +0.01865713 +-0.0075699626 +-0.032479163 +-0.00050844497 +-0.01537659 +0.012540353 +-0.0016726131 +-0.023921879 +0.0056022103 +-0.027150977 +-0.01188448 +0.015997218 +0.017090674 +0.020814538 +0.019090816 +0.02251274 +-0.014664108 +0.0048975213 +-0.010157836 +-0.01137774 +-0.0117451735 +-0.026888222 +-0.02380685 +-0.021073418 +-0.007167029 +0.014416406 +0.020553505 +0.008288678 +0.007096701 +-0.014554261 +0.004385354 +0.0034728427 +0.011166738 +0.016345127 +-0.010696615 +-0.013074938 +0.03166162 +-0.011595712 +0.004605339 +-0.010872974 +-0.024989834 +-0.011083229 +-0.004657833 +-0.011234507 +0.00035171176 +-0.042793173 +0.0046288823 +-0.016561326 +0.0094287265 +-0.020914994 +-0.011395149 +0.01964034 +-0.01586097 +0.0022253206 +0.0030544498 +-0.024358293 +0.01014687 +-0.0100642005 +0.03407142 +-0.022221392 +-0.0005465733 +-0.018079706 +-0.024884831 +0.014859898 +-0.008254473 +-0.0036206457 +-0.013209442 +-0.010744413 +-0.025012633 +0.019912302 +0.018682746 +0.017471667 +0.023935473 +-0.010581587 +0.003614251 +-0.026397679 +-0.009510991 +-0.0029209014 +0.010502766 +0.018801866 +-0.023056919 +0.006369887 +-0.0066432697 +0.011563657 +0.011351557 +-0.0025428094 +0.0078080106 +0.0044699525 +0.001687806 +0.001501842 +-0.0025826057 +-0.00065369264 +0.023733173 +-0.0043033427 +0.029804226 +-0.0008280865 +0.0052532475 +0.02285326 +-0.013741403 +-0.028166449 +-0.009645404 +-0.0030710485 +0.014178017 +0.008618892 +-0.031360917 +0.020726651 +-0.022842674 +-0.0068167076 +0.00682591 +0.0021138377 +0.0244339 +0.019611297 +0.0048130997 +-0.003585839 +-0.0018954839 +-0.017599337 +-0.002512886 +-0.012148949 +-0.007287696 +-0.0036814958 +0.016988752 +0.013563584 +-0.013741628 +0.018462744 +-0.0051056105 +0.0070160106 +0.015121667 +-0.040810987 +-0.0005941286 +0.0049506957 +0.005291327 +0.043189116 +-0.009428278 +0.007055924 +-0.008914379 +0.010250284 +-0.006049468 +-0.00011068376 +-0.018080292 +0.0039569917 +-0.0053165867 +-0.031216329 +-0.016864909 +0.03065886 +-0.0132283345 +0.011622502 +-0.01091165 +-0.0010810236 +0.016489007 +0.008422828 +-0.005878095 +-0.008798442 +-0.0046268855 +-0.02085132 +-0.008462657 +-0.004471434 +0.0060385335 +0.012081166 +-0.010502633 +0.0019797892 +-0.019548884 +-0.01156088 +-0.014940521 +0.008439884 +0.01840321 +0.0042166053 +-0.0046181194 +-0.030447027 +0.0027354853 +-0.0019604093 +-0.0069452487 +0.011672493 +-0.0045239367 +-0.0095982235 +0.030572377 +-0.014342662 +-0.0007950936 +-0.016947733 +-0.014408418 +-0.02010038 +-0.004260114 +0.0043639033 +0.0061746333 +-0.038740106 +0.0014329377 +-0.0077912193 +-0.0016335812 +-0.0071789897 +0.0070373397 +-0.015706671 +0.02147729 +0.0077868323 +0.011868915 +0.0017256865 +-0.022552183 +-0.026282603 +0.012696689 +0.0087129995 +-0.0072021345 +0.02691436 +-0.014195583 +-0.012833279 +0.0073699416 +0.01825525 +0.007445023 +-0.009284094 +-0.018037973 +0.012760195 +0.0018137286 +-0.030300235 +0.018470112 +-0.011410821 +-0.0055458974 +-0.028127259 +0.028787944 +0.0024075033 +-0.0075638266 +0.009479037 +0.0094658835 +-0.0007951909 +0.020269908 +0.013094718 +0.011958663 +0.010517177 +-0.018430967 +-0.016571926 +-0.015505222 +-0.014607579 +0.019763265 +0.016768778 +0.007455917 +0.012715489 +-0.007478836 +0.017197454 +0.0025420098 +-0.005359453 +0.0003617382 +-0.029003259 +-0.016218424 +-0.011038171 +0.034481708 +-0.0147883985 +0.00046812173 +0.0053028148 +0.008383824 +0.020623347 +0.0025425002 +0.020108458 +0.014233392 +-0.0137963 +0.014491397 +0.008529278 +0.0056395954 +0.0016716337 +0.015080936 +-0.008721585 +-0.017508548 +-0.008801335 +-0.0066551603 +0.0294942 +0.013974319 +-0.009239008 +0.014661458 +-0.00058507203 +-0.0024691545 +0.00036438365 +0.005025605 +-0.007569432 +-0.029984448 +0.019316144 +0.028319292 +0.0032330134 +-0.0013933518 +-0.010323848 +-0.009531997 +-0.012121871 +-0.004460784 +0.015658546 +0.0009996921 +-0.009759253 +0.00082206074 +0.0031215379 +-0.01049666 +0.0012698277 +-0.011970486 +0.004829238 +-0.022771444 +-0.01767396 +0.00029989216 +-0.0012713332 +-0.012405917 +-0.00046181012 +0.016179463 +0.005585207 +0.01515816 +0.022498166 +-0.0047304514 +-0.04930782 +-0.020923076 +0.009075048 +0.034859445 +-0.024576958 +0.021080876 +-0.021206785 +0.011957783 +-0.017698858 +-0.020733822 +0.009316949 +0.01667396 +-0.012493614 +0.013927197 +-0.009464108 +0.011211941 +-0.005636272 +0.0075245104 +-0.021587595 +0.0043729134 +0.009410316 +-0.016221829 +0.009812777 +-0.019354638 +-0.010777711 +0.015651371 +-0.02461653 +-0.014548443 +-0.024307212 +-0.0024401408 +-0.007987689 +-0.009470647 +0.006355422 +-0.013378081 +0.0010488458 +0.028780703 +-0.012706009 +-0.0073435954 +0.00846108 +-0.012062241 +-0.02498714 +0.018082341 +-0.019243408 +0.026662836 +-0.0024955776 +0.010421074 +-0.0011264901 +0.004222326 +0.018885592 +-0.0030751827 +0.004728441 +-0.005149073 +0.017884647 +0.0036822339 +0.011011008 +-0.015041908 +0.01017989 +-0.011075245 +-0.006692929 +-0.00075300824 +-0.012450694 +-0.0010240107 +0.018837152 +-0.021190546 +-0.0026439186 +-0.009523342 +-0.0047104196 +0.023279967 +-0.024759363 +0.0021734806 +-0.039133213 +0.016066654 +-0.017656304 +-0.02070502 +0.020944253 +-0.020352043 +0.016516095 +-0.021611208 +-0.017072298 +-0.020232523 +-0.009350657 +-0.027420174 +-0.028087977 +-0.01617141 +-0.053466734 +0.002611982 +0.02547592 +0.01241825 +0.0020547288 +0.018140437 +0.010011787 +-0.013193276 +-0.021298833 +0.005816578 +0.0007925624 +-0.014671316 +-0.022064842 +-0.04216866 +0.004918247 +0.012089082 +-0.006304836 +0.028098365 +0.018273287 +0.022492295 +0.028345559 +-0.012213905 +0.030660491 +-0.008878157 +-0.007607007 +-0.0015775879 +0.00025967704 +0.0021994947 +0.006141138 +-0.0069743744 +0.022013532 +-0.004046877 +-0.0035979142 +0.0041741016 +-0.037427016 +-0.012243309 +-0.004543039 +0.018847937 +-0.02098659 +0.010957527 +-0.011061428 +-0.016204327 +0.021470467 +-0.002863044 +0.0060390015 +0.001399834 +-0.01302223 +-0.0149581805 +0.009664152 +0.015226579 +0.008237573 +0.013561318 +-0.0049292836 +0.0135631515 +-0.012242038 +-0.011724295 +-0.0073321704 +-0.004202582 +0.026120504 +0.0030306652 +-0.018986437 +-0.0032831507 +0.002591502 +0.007431017 +0.011427467 +-0.014211172 +-0.008332833 +0.008565349 +-0.0077940137 +0.010049352 +0.022427192 +0.032336574 +0.015679833 +-0.017215924 +-0.0011177529 +-0.0037222782 +0.006249384 +-0.0017274822 +-0.03902373 +-0.020584732 +0.011473083 +-0.02890115 +-0.0021287578 +-0.0057304036 +-0.022465244 +-0.0127782 +-0.0005165788 +-0.011609079 +-0.025114449 +-0.009040705 +-0.012156004 +0.0017954351 +0.020338915 +-0.018049572 +0.004132296 +-0.0051766085 +-0.012406302 +-0.009513595 +-0.0069284397 +0.100003384 +-0.015684318 +0.0034280673 +0.020102436 +0.017182468 +-0.0028794396 +-0.0013285418 +-0.012358124 +0.011599192 +-0.0010363397 +-0.013823421 +0.0065540792 +0.0011400456 +-0.0088152755 +0.0004882262 +0.0005866288 +0.019335711 +-0.011737487 +0.007543694 +-0.0085481135 +0.0055949106 +-0.004164885 +0.010627896 +0.0016251275 +-0.025998672 +-0.017694755 +-0.02215988 +-0.0027141254 +-0.03616788 +0.016254026 +0.007444337 +-0.023960384 +0.032507583 +-0.0017032209 +0.00062170887 +-0.00835434 +0.010601468 +-0.0036049036 +-0.010818325 +0.0017422185 +-0.006842692 +0.005364697 +-0.011714407 +0.024490295 +-0.030872509 +-0.007418535 +0.0053784586 +0.008569117 +-0.0021954775 +-0.0027521783 +-0.016371714 +0.01415585 +-0.017262068 +0.013223848 +-0.0017767306 +-0.014337223 +0.021038618 +0.045183927 +-0.05604756 +0.0011772336 +-0.0074621867 +-0.0129312 +-0.005533921 +-0.0097408565 +-0.001593532 +2.9256928e-05 +-0.025669415 +0.0070768455 +-0.018656865 +-0.042267654 +0.012815384 +0.0015826955 +-0.002777933 +0.0054334817 +0.041455377 +0.0097982045 +-0.018250786 +-0.0069750072 +-0.012216251 +0.0120574925 +0.03036121 +-0.0054523316 +-0.0018321879 +-0.028498378 +-0.002120439 +-0.0049585435 +0.027489647 +0.0094980765 +0.00013058886 +0.003164174 +0.017438127 +0.0021058954 +0.013006792 +0.007667887 +-0.029909804 +-0.0027866135 +0.029216558 +-0.020366644 +-0.007957225 +-0.016443225 +-0.011845409 +-0.011346991 +-0.0013044769 +-0.018282816 +-0.012822912 +0.004561132 +-0.022778427 +-0.0015728839 +-0.0064296927 +-0.010099807 +-0.024432544 +0.052008267 +-0.009333246 +0.01347695 +-0.015726792 +0.003474732 +0.0035467348 +-0.02399849 +0.019461712 +-0.00807448 +-0.019693552 +-0.012380933 +0.017237123 +-0.018431893 +-0.03125954 +-0.009756414 +-0.023571858 +-0.0065620556 +0.023993831 +0.05234048 +0.005739781 +-0.021288462 +0.012635708 +0.0035028076 +0.0052296645 +-0.010007458 +-0.03694805 +-0.011235894 +0.0010272026 +0.018179558 +0.0010382419 +0.0038974902 +0.007875325 +-0.0041432655 +-0.003000257 +-0.007982701 +0.050394945 +-0.01168977 +0.029265558 +0.014044079 +-0.010887758 +0.021027151 +0.016691916 +-0.007811415 +-0.02045697 +0.01603714 +0.01388374 +0.013043424 +0.033334367 +-0.011913463 +0.0026729298 +-0.020894732 +0.018454649 +-0.007538522 +-0.011882444 +0.013811348 +0.006593121 +-0.011820575 +-0.0051786983 +-0.00819261 +0.029828021 +0.040507242 +-0.017943963 +-0.004092774 +-0.026084334 +-0.02030003 +-0.03423576 +-0.017274527 +0.014703729 +-0.016077923 +0.017673068 +0.01770035 +-0.014360033 +0.025263863 +0.0059004026 +0.009982407 +0.011356244 +-0.021773353 +0.00131006 +0.033983286 +6.0942188e-05 +0.013416999 +-0.011511934 +-0.004033514 +-0.0011106429 +0.0048148534 +0.010469224 +-0.009422745 +0.011488 +-0.028133467 +-0.019766705 +-0.01963561 +-0.023627622 +0.026434869 +-0.011010368 +0.0040702587 +0.0344383 +0.0014058235 +0.007542101 +0.024907224 +0.024151932 +-0.0029041015 +0.004749579 +-0.0062181056 +-0.025989996 +-0.0006540473 +0.0046181497 +0.0089817345 +0.001683574 +-0.024188526 +0.015900847 +-4.324974e-06 +0.004451899 +-0.005711079 +0.03570721 +-0.025880007 +0.013003561 +-0.0021855077 +-0.007425385 +-0.022347342 +-0.050610274 +0.040293165 +-0.010264121 +0.011391892 +-0.013349879 +-0.029999284 +0.03125705 +-0.043649286 +0.05636971 +-0.005309656 +0.0008437981 +-0.011101265 +0.003350663 +-0.0069528553 +-0.018605802 +0.009041563 +0.0037493252 +0.017665025 +-0.030197073 +0.02902249 +0.034383453 +-0.0031559994 +-0.0014147846 +-0.02596313 +-0.012787215 +-0.028343417 +-0.0056944536 +0.0028053632 +-0.0152937425 +0.02928256 +0.010317538 +-0.009535025 +0.0122848265 +-0.000650183 +0.015344096 +0.0069707534 +0.0075302613 +-0.007350544 +0.010228343 +0.008066162 +-0.010492669 +-0.006931029 +-0.031767905 +0.013735826 +0.0042057005 +0.001912513 +0.003951544 +0.01684174 +0.011761494 +-0.019328164 +-0.030682832 +0.0059879622 +-0.0045371773 +-0.012537844 +-0.030135555 +-0.019607231 +-0.014823675 +0.018298214 +-0.01982526 +-0.0061533023 +0.0076487986 +-0.006986688 +0.024101406 +0.016836436 +0.006693201 +0.029961562 +0.004330085 +0.0056742122 +-0.01604891 +0.017214006 +-0.02209884 +0.010596542 +0.024297666 +-0.0068818615 +-0.01455661 +-0.009389399 +-0.010430119 +0.0061182976 +-0.007215499 +0.017647056 +-0.012721545 +-0.020616537 +0.0076874644 +0.006890489 +0.012045834 +0.0052511888 +0.018921396 +-0.0011772147 +0.0014997458 +-0.025633393 +0.0038378006 +0.010022635 +-0.009439247 +-0.0064498098 +0.0019971489 +0.0075343414 +0.038165618 +-0.0012341576 +0.0038788493 +-0.0033770713 +0.007604915 +-0.013271022 +0.006270714 +0.00796883 +-0.008810187 +0.02246576 +-0.019112356 +-0.022708276 +-0.03162702 +-0.00014155712 +0.012612766 +-0.021116665 +0.0049540214 +0.010379925 +-0.0031212575 +0.02463419 +-0.0007219695 +-0.008813177 +-0.02981475 +-0.0050776643 +-0.00346892 +0.0043224418 +0.0004797 +0.022228617 +-0.0035603805 +-0.04288071 +-0.008183373 +0.041422095 +0.0065024444 +-0.019924603 +0.0070919213 +0.017498745 +-0.04360946 +-0.02009957 +0.0031529637 +0.008138807 +-0.0067370357 +-0.0067374585 +-0.003036178 +-0.0474564 +-0.008403663 +0.011627136 +0.011086402 +0.00581745 +0.023862893 +0.014728436 +-0.0022744178 +-0.023539025 +-0.009251264 +-0.04378654 +-0.012361542 +0.018096186 +0.0074641826 +0.0066004535 +-0.0111082345 +0.0040182397 +0.020716663 +-0.0140529545 +-0.0018867436 +-0.004131892 +0.032114774 +-0.008252937 +0.045511708 +0.015246542 +-0.042020097 +-0.0033828549 +0.032741852 +-0.005623462 +-0.021083482 +-0.04388076 +0.0135723585 +-0.018372454 +-0.0082494235 +-0.025041677 +0.017357416 +-0.03927928 +-0.019611262 +-0.02837727 +-0.012226511 +-0.02860272 +-0.031156307 +0.04585947 +-0.040197287 +-0.0046128393 +-0.01020647 +-0.034853335 +0.029228535 +-0.055338964 +0.047637608 +-0.028095663 +-0.022364253 +-0.004685502 +-0.02877314 +-0.011085038 +0.0055064205 +0.010517999 +0.00052355754 +0.011074899 +-0.013546498 +0.028552903 +0.019669103 +-0.0032311098 +0.012064295 +-0.0070836204 +-0.00036011272 +-0.030575143 +-0.011942675 +-0.016100304 +0.006545925 +0.03237607 +-0.015652264 +0.009523583 +0.037701964 +0.0032470499 +0.00037686186 +0.0058502425 +-0.0017659309 +-0.0042887223 +0.011101454 +0.0141666075 +-0.007833289 +0.0041599497 +0.015601859 +0.005908729 +-0.00020743083 +9.9078956e-05 +0.012265343 +0.0015405981 +0.026451983 +-0.044860166 +0.019678798 +-0.018681752 +0.012108093 +-0.019927707 +-0.020416152 +0.023849363 +-0.00220028 +-0.023979576 +0.0031985063 +0.0072863596 +0.005679581 +-0.004597681 +0.025247538 +0.014797959 +-0.0085874405 +0.0032981117 +-0.024523428 +0.0017197313 +-0.0041707107 +-0.026289484 +0.010364848 +0.011695295 +-0.0148457 +0.008400351 +0.022003558 +0.012167981 +0.037706014 +-0.026936766 +-0.004929336 +-0.026056169 +-0.038996737 +0.019598562 +-0.01723019 +0.01363473 +-0.020306064 +0.0088417 +-0.011454075 +0.016764907 +0.004022847 +-0.03379989 +-0.005957925 +-0.040702984 +0.0029296416 +0.044734832 +0.010530696 +-0.0060304096 +-0.004751033 +0.0012336186 +0.0071191355 +0.03858913 +0.001710399 +0.006162471 +-0.006975648 +-0.005597631 +-0.041747306 +-0.0053924224 +0.0120663745 +-0.0038932012 +-0.021742243 +0.017320562 +-0.02981781 +0.012181894 +-0.028998042 +0.032540113 +0.037940167 +-0.012072979 +-0.013872458 +0.003738457 +0.01845467 +-0.020592114 +0.013174521 +0.012126205 +-0.014352833 +0.032072086 +-0.0035109464 +-0.008554978 +-0.0030406276 +-0.047395565 +-0.009369824 +0.009475946 +0.006573372 +-0.0034297279 +0.036280975 +0.002678255 +0.024348851 +-0.0013355654 +0.011154117 +0.0025376885 +0.025632663 +-0.022222068 +-0.009796211 +-0.013458258 +-0.006728942 +-0.013763287 +-0.034374487 +-0.00030675685 +0.013858247 +-0.0025379376 +0.021384502 +0.021354897 +-0.027756771 +-0.023423774 +0.014622681 +0.0054026507 +-0.0039610397 +-0.010098434 +0.00040320284 +-0.012595175 +0.0023883919 +-0.011394541 +-0.017057817 +0.02210791 +-0.0037866612 +0.012584458 +-0.0049752686 +-0.0011193026 +-0.015333487 +-0.008913445 +0.007568616 +0.0073098494 +0.010368563 +0.01214726 +-0.029151902 +0.0113083 +-0.0009051797 +-0.026177838 +-0.026703246 +0.0069502364 +0.0050403294 +-0.0034886543 +-0.005605 +0.033344004 +-0.007512332 +0.00044709686 +-0.0011134758 +-0.0013101763 +-0.00027874907 +-0.026506023 +0.006848328 +0.010589867 +0.008453368 +-0.014802633 +-0.00860778 +0.004889836 +0.0060956115 +0.041442115 +0.009699903 +0.009766846 +0.0012824303 +0.0016128739 +0.015222136 +-0.010171911 +0.026064843 +-0.030826822 +-0.0011457216 +-0.006742839 +-0.026884483 +-0.011326297 +0.00097292167 +0.01279051 +0.009145906 +-0.015233558 +-0.005132762 +-0.015708823 +0.0018872895 +-0.005982425 +0.005054736 +0.0001104069 +0.010796226 +0.030966343 +0.016623396 +-0.00097166514 +0.00986551 +0.0077486285 +-0.003637298 +-0.001929126 +0.00052292703 +-0.011902192 +0.01371007 +-0.027191546 +0.0041962545 +0.0084994165 +-0.02034053 +-0.020474272 +-0.021765163 +0.013935841 +-0.004353008 +-0.005555597 +0.0035157902 +-0.0010601565 +-0.0052204398 +-0.0041085244 +0.015576102 +0.009610837 +0.00635615 +0.04250294 +-0.03503135 +-0.03973033 +-0.04578839 +0.0057398197 +0.004501614 +-0.015436536 +-0.037882954 +-0.007986635 +-0.014091253 +-0.025602026 +-0.019714558 +-0.011594018 +0.02494442 +-0.010756979 +-0.0067624724 +-0.0349811 +-0.015894722 +-0.02204668 +0.0023491038 +-0.024594242 +0.014579113 +0.014632494 +0.008779985 +-0.0073435437 +0.008939288 +0.013911063 +0.01313582 +-0.025013268 +-0.00038577878 +-0.029073225 +0.0108492905 +-0.003426915 +0.009579409 +0.0019258786 +-0.024701687 +-0.022718845 +0.029224018 +-0.0051400084 +-0.021556193 +0.026725184 +-0.03544903 +-0.03832271 +-0.010579575 +0.0016355353 +0.012242068 +-0.016809322 +0.009206551 +0.008870886 +-0.007879073 +-0.01962576 +-0.015319514 +0.018946989 +-0.007303326 +0.02659574 +-0.015150455 +-0.0061545246 +-0.022097219 +-0.0043562143 +-0.0139918225 +0.023959734 +-0.00266817 +0.019183423 +-0.01809674 +0.013546271 +-0.020743728 +0.009879127 +0.01582186 +-0.010715634 +0.01081508 +0.009226228 +0.009339441 +0.0054240827 +-0.0074146455 +-0.013795528 +-0.035109777 +-0.026584424 +0.018374404 +-0.0062212376 +-0.0023366716 +0.011618793 +0.017443003 +-0.013575236 +0.007495561 +-0.023995066 +-0.0048706867 +-0.014374835 +-0.0024939044 +0.0060491334 +-0.005191879 +-0.018284347 +0.0030480393 +0.00015196414 +-0.01600272 +0.00568469 +0.0051565715 +0.0022115938 +0.0030551977 +0.018864883 +-0.01567433 +0.018326163 +-0.01443383 +-0.047995724 +-0.050418116 +0.019849105 +0.011214315 +-0.021829046 +-0.025002718 +0.027937366 +-0.008504763 +-0.031126326 +0.0014575527 +-0.027574522 +-0.0018423363 +0.009199343 +-0.018502077 +-0.0011863952 +-0.03966767 +-0.0028464235 +0.011317065 +-0.052009165 +0.017652279 +-0.025174351 +0.037447527 +-0.021264758 +0.0039155707 +-0.010000659 +0.010628667 +0.022140497 +0.0011560407 +0.013139857 +0.014897258 +-0.006157879 +-0.026624767 +0.0023606145 +0.037306983 +0.009445379 +0.0123960115 +0.012152068 +0.001825459 +-0.031191304 +0.004160827 +-0.014751931 +-0.011978914 +0.0014076306 +-0.004403031 +-0.01407365 +0.004373039 +0.017831959 +0.0050424603 +-0.009832008 +0.0013913359 +-0.00037351513 +-0.004408558 +-0.008152436 +0.007807541 +0.0043425076 +-0.00482482 +-0.0028695255 +-0.002822306 +-0.008939674 +-0.0055374424 +-0.00247419 +0.016471088 +-0.027408833 +-0.02038624 +0.0041695773 +-0.0134690115 +-0.013455886 +-0.02007568 +-0.016063472 +-0.010607537 +-0.010733259 +-0.009249099 +-0.013069017 +0.011434678 +-0.00085338496 +0.0061014276 +0.01645011 +-0.018437643 +0.01871347 +-0.023444396 +-0.016593391 +-0.019976722 +-0.01937033 +0.08317052 +0.0034989933 +-0.01962499 +0.0048303455 +-0.02430274 +0.018113853 +0.015719503 +-0.0028968677 +0.026058989 +0.02810444 +-0.0025031574 +-0.010852929 +-0.01287829 +-0.011301598 +0.0043817633 +0.01559402 +0.014730326 +0.0013205358 +0.014613448 +0.008473993 +-0.0041130325 +0.022939168 +-0.0311227 +-0.017128177 +-0.015740814 +-0.006378721 +-0.029281769 +-0.008094156 +-0.010559331 +0.028518021 +-0.006395872 +-0.013004313 +0.04551483 +0.011795317 +0.003145678 +-0.0072854785 +-0.020539256 +0.0030832079 +-0.0082617635 +-0.009599897 +-0.0011439044 +-0.014315591 +-0.0062338915 +0.012278295 +-0.01137568 +0.009251012 +0.01201579 +0.004099173 +0.023139143 +0.014469286 +0.016841851 +0.00141546 +-0.017688658 +0.0010007647 +0.0010484894 +-0.022164067 +-0.011643957 +0.019013638 +-0.013523022 +-0.017685825 +0.0042533074 +0.012529457 +-0.0115418965 +-0.0025038691 +0.0058624637 +-0.008135546 +0.013509314 +0.0010659621 +-0.02087462 +-0.016247222 +-0.016238645 +0.022617258 +-0.017671721 +-0.0075270706 +-0.008131986 +0.017146561 +-0.018674705 +-0.019910175 +-0.022870915 +-0.011552067 +-0.0032738885 +-0.003645342 +-0.026051257 +0.012183575 +0.010171571 +0.01776554 +0.013179427 +-0.011500736 +0.009637828 +0.007354758 +0.010132455 +0.011710348 +0.013452618 +0.022558488 +-0.04130614 +-0.02757947 +-0.04802557 +0.02688569 +0.0060502584 +-0.024150461 +-0.00255068 +0.004456811 +-0.010452235 +-0.034453955 +0.036783047 +0.09905506 +0.0027882436 +-0.0035472761 +-0.01695075 +-0.019615209 +-0.014092866 +0.056044605 +0.001854578 +0.01416612 +-0.0026907804 +0.00039159032 +-0.028900081 +0.002777777 +0.02797631 +-0.0073580835 +-0.00019551316 +-0.0068669035 +-0.015195884 +0.0008728565 +-0.014125212 +-0.01761322 +-0.033235285 +-0.02279163 +0.046383947 +0.033263233 +-0.01858051 +-0.0048717503 +-0.0022114092 +-0.0019165352 +0.013088144 +0.0021769376 +-0.019431924 +-0.0116998665 +0.008984975 +0.018551199 +0.020642508 +-0.024618668 +-0.015679713 +-0.02060613 +-0.011707411 +-0.0052013793 +0.01865665 +-0.0011325416 +0.013556881 +0.013047704 +0.020784844 +-0.02018285 +0.023668466 +-0.028459374 +-0.031072317 +-0.0009096723 +-0.009317352 +-0.010942338 +-0.01688607 +-0.010865766 +-0.008644933 +-0.0077328286 +0.002985008 +-0.0030540207 +0.013655978 +0.027628273 +0.02054982 +-0.01175688 +-0.00728284 +-0.0067338957 +-0.04113741 +0.007067987 +-0.015770044 +0.009795424 +-0.019194964 +0.020613337 +0.009888637 +0.023809582 +0.018872565 +0.015776606 +0.014499512 +0.00339536 +-0.013837539 +0.0035090495 +-0.0050492524 +0.032464556 +0.048171528 +-0.037338365 +-0.027463585 +-0.011323497 +-0.02761272 +0.004926293 +0.008955358 +0.016752992 +-0.015540875 +0.0030997917 +-0.0076328255 +-0.02544609 +0.011922229 +-0.031860426 +0.02189278 +-0.03883764 +0.013965298 +0.03505417 +0.023009885 +-0.00069946266 +0.009495488 +0.0020675277 +-0.012855824 +0.005050279 +0.032729223 +-0.0064446763 +0.0066993036 +-0.007836919 +0.0047120126 +-0.0013737692 +-0.006308725 +-0.036069497 +-0.020730482 +-0.009873568 +0.0063629257 +0.019659651 +-0.067246415 +-0.02126761 +-0.008143314 +-0.001419871 +0.025013646 +0.030623611 +0.026305035 +-0.027765939 +-0.0017232343 +0.054783594 +-0.0130418865 +-0.004097277 +-0.040518537 +-0.037447482 +-0.010305866 +-0.030425489 +-0.001061783 +-0.0048294435 +-0.009273982 +0.012779032 +0.013155347 +-0.015536528 +0.016853875 +0.012995816 +-0.033162963 +-0.008714008 +-0.0019877933 +0.011413608 +0.038899295 +-0.014662254 +-0.009970562 +-0.026904985 +-0.0074832146 +-0.020130305 +-0.003947195 +0.021574028 +-0.008376936 +0.038404725 +-0.010480936 +-0.029439582 +0.018424202 +-0.04436445 +0.016685728 +-0.005306931 +0.010584186 +0.013786184 +0.002928354 +-0.016653147 +-0.014146449 +0.008269729 +-0.031913187 +-0.01965065 +-0.035367735 +0.006824776 +0.0077378014 +0.012386573 +0.032886464 +0.0135951275 +-0.001788858 +-0.009449987 +0.013392802 +4.604511e-05 +-0.001185221 +-0.017510537 +-0.017274428 +-0.015357474 +-0.012594932 +0.015898112 +-0.025319232 +0.013252171 +-0.005526223 +-0.0074052755 +-0.009511348 +0.040162425 +-0.025864087 +-0.021395873 +0.013571908 +-0.015743172 +0.004528166 +0.010850728 +-0.0080473395 +-0.00095579925 +-0.032715105 +-0.027096072 +-0.021439733 +0.010235863 +0.011851054 +0.04678744 +0.0146800205 +-0.030193765 +0.014562995 +-0.0016557967 +0.0077443453 +0.0014522679 +-0.014145753 +-0.009667779 +0.016537363 +0.019231534 +0.005755338 +0.009099862 +-0.019819176 +-0.017684802 +-0.0011662989 +-0.0072765243 +0.047575857 +-0.0019634485 +-0.0023131156 +0.010023851 +-0.020583192 +-0.011753629 +0.012495403 +0.018766573 +-0.0010302758 +0.004692393 +-0.001649924 +-0.00478805 +0.010492338 +-0.018736517 +-0.009813567 +-0.019284178 +0.0522875 +0.011616739 +0.009075184 +0.021906625 +0.0020491132 +-0.019973323 +-0.039877478 +-0.0041719843 +-0.060016733 +0.015348784 +-0.018730843 +0.03246801 +0.028587526 +0.005823089 +0.021241894 +0.031310007 +-0.006988405 +-0.016819466 +-0.0021086545 +0.027022196 +-0.03004072 +-0.025894351 +-0.009447671 +0.022835184 +0.026801562 +-0.019428162 +-0.022553224 +-0.050704885 +-0.033609077 +0.008953812 +0.011688474 +0.030152109 +0.009250435 +0.03891346 +0.009088598 +-0.039781693 +-0.007443813 +-0.06463412 +0.032386333 +-0.0003191411 +-0.0070287846 +0.02139786 +-0.014806261 +-0.0026692364 +-0.00063696527 +-0.012948568 +-0.009067325 +-0.00015193684 +0.025831414 +-0.00925685 +0.030828407 +0.021258129 +-0.0491668 +0.0055130688 +-0.015230832 +-0.003369801 +-0.04005233 +-0.013910218 +0.0277553 +-0.00403849 +-0.060768545 +-0.025405234 +-0.012368707 +0.045128882 +-0.0067237727 +0.004924689 +-0.025478268 +-0.020026168 +0.018405505 +0.047692914 +-0.0035486037 +0.010380062 +-0.030168239 +-0.007881656 +-0.0056464626 +-0.014683973 +0.016838415 +-0.02361887 +0.0060837893 +-0.002408392 +-0.028197464 +-0.026480636 +-0.00874796 +-0.017088203 +-0.034696065 +-0.0039724805 +0.00268068 +0.030082196 +-0.007671312 +0.00647629 +-0.010919138 +-0.030565115 +0.004894464 +-0.018049274 +-0.022474874 +0.0117968125 +-0.004041768 +0.015377675 +-0.0071898066 +-0.009860844 +-0.016611138 +-0.022544075 +-0.014891314 +0.02263039 +0.014187927 +-0.004928793 +0.016429935 +-0.017182063 +0.013046259 +-0.008817639 +0.0032478403 +-0.02298234 +-0.041015144 +-0.00851722 +-0.013319898 +0.030747749 +0.01957116 +-0.012779936 +-0.0037028508 +-0.008390527 +0.020939613 +-0.023341218 +0.007352785 +-0.046463933 +-0.018858312 +0.0021775102 +-0.027187958 +0.022870693 +-0.0042348527 +-0.059829887 +0.032176595 +0.009490423 +-0.0064056865 +0.019983387 +-0.009948365 +0.027682872 +0.0024106451 +-0.017711276 +0.011085272 +0.007459093 +-0.0058355434 +0.026718581 +0.0006591632 +0.007354905 +0.028595783 +-0.012475185 +-0.012856562 +-0.019915415 +-0.04989779 +0.034838602 +0.0011504579 +0.015564498 +-0.0036935387 +0.01800683 +0.015488128 +-0.0022511606 +0.01333889 +-0.056473874 +0.0010367195 +-0.022515105 +0.015998155 +0.03225664 +0.0075801746 +0.016106622 +0.0012466538 +-0.013129371 +-0.0019980627 +0.049342997 +-0.0019465322 +0.0066428143 +0.018429033 +0.013964298 +0.022223169 +-0.006727695 +0.0020561703 +0.00013229766 +-0.033947844 +0.022163413 +-0.016361242 +0.0086436765 +-0.03698689 +0.027432067 +0.008847408 +-0.034755208 +0.01654812 +0.00017926445 +-0.0024256064 +-0.010383017 +-0.015736794 +-0.0024730403 +0.008350613 +0.023983032 +-0.03447189 +0.047158197 +0.0141281765 +0.0052591427 +-0.027868794 +0.014168857 +0.005771077 +-0.013192131 +0.0063900305 +-0.0201618 +-0.0025515729 +0.017910643 +-0.001693679 +0.018138563 +0.003582203 +0.008243159 +-0.06820442 +-0.02002207 +0.019382497 +0.0120755285 +-0.004892307 +-0.023855515 +-0.021878246 +0.0055901026 +0.026865253 +-0.0027977312 +0.0013861161 +0.0051167277 +-0.010462084 +-0.020845378 +0.009698587 +-0.016651645 +0.0126221515 +-0.010809697 +0.02696139 +-0.028330255 +0.0012359177 +0.011309917 +0.040293865 +0.01749408 +0.024696508 +0.006480039 +-0.023103504 +-0.03159541 +-0.05377942 +0.007190343 +0.030815588 +-0.022245064 +-0.02945609 +0.023459181 +-0.027700838 +-0.025578286 +0.02902122 +0.0042434623 +0.024987467 +-0.012165204 +-0.02909296 +0.034177642 +-0.023532644 +-0.020552797 +-0.022242794 +-0.027855767 +-0.012636093 +-0.033837046 +0.020612027 +0.017834865 +-0.021087462 +-0.00394786 +-0.02172594 +0.031020174 +-0.021261143 +0.005355854 +-0.017100465 +0.016151376 +0.005703285 +0.009043497 +0.036955185 +-0.032784406 +0.011943434 +-0.025570644 +-0.01814813 +-0.009279384 +0.0019655 +-0.0069678067 +-0.0018750563 +0.04535609 +-0.0056589805 +-0.023762014 +-0.0033626482 +-0.038465496 +-0.006761588 +-0.0077845333 +0.041302796 +-0.009412046 +0.011227061 +0.0029892682 +0.0062615843 +-0.019436065 +-0.024369609 +-0.0068309186 +-0.0002677757 +-0.0009577076 +-0.011119396 +-0.008631969 +0.01939004 +-0.0102996165 +-0.0055950186 +0.022480536 +-0.006795821 +-0.008333835 +-0.015903518 +0.017614387 +0.019896664 +0.00274619 +-0.019781372 +0.010815392 +0.015969872 +-0.021349551 +0.010085191 +0.017507989 +-0.006669018 +0.026957758 +-0.018630806 +0.022378506 +-0.029762616 +0.013717843 +-0.01009705 +-0.005251291 +-0.0032031971 +0.011048537 +-0.005076863 +-0.049954433 +-0.036901746 +-0.003146699 +0.028938452 +0.026642734 +-0.038234636 +-0.030356536 +-0.018265659 +-0.031211026 +0.012705622 +-0.0072751883 +0.007560466 +0.009833709 +0.021681432 +-0.008533707 +0.011579558 +0.035616193 +-0.008365916 +-0.039423697 +-0.0142097 +-0.016897583 +-0.009037957 +-0.003569462 +-0.012195343 +0.01140925 +-0.028022135 +-0.016264103 +0.019380549 +0.02534134 +-0.010476728 +0.0044862516 +-0.008617227 +-0.017330682 +-0.05432098 +0.0024512226 +-0.02122948 +-0.020120434 +0.007668718 +0.015196877 +0.002875528 +-0.06459577 +-0.006947264 +0.011086564 +0.0049502677 +0.035021525 +0.03280627 +-0.03387266 +-0.029860495 +-0.013340492 +0.0074415365 +0.013735194 +-0.0023896508 +0.012670078 +0.0034921442 +0.029162642 +0.002513543 +-0.0124136135 +0.006491873 +0.027785238 +-0.066163994 +-0.012527012 +-0.03626835 +0.023065628 +-0.01702755 +-0.00060071854 +0.025578042 +-0.00065051176 +0.017264692 +-0.008943745 +-0.0007888696 +-0.014575901 +0.006654069 +-0.020913582 +-0.024332218 +0.028371388 +-0.0069681713 +0.0031142354 +-0.024964355 +-0.0633806 +-0.0025465717 +0.0022477515 +0.017948644 +-0.0026933218 +-0.0062279175 +-0.02448157 +-0.02503962 +-0.0018442522 +0.0053065056 +0.027111184 +0.038644675 +-0.0010822458 +0.0013939147 +0.004896052 +0.0070268298 +-0.004434649 +-0.028398925 +-0.00492679 +0.022762017 +0.023963055 +-0.012532087 +-0.0630744 +0.0056678164 +-0.035185423 +0.008961662 +-0.00655358 +-0.043173995 +0.014821249 +-0.028717326 +0.007844443 +0.00069872604 +-0.051665757 +0.016532525 +-0.031219888 +0.042793375 +-0.0057682465 +-0.011882575 +0.013247155 +-8.252852e-05 +-0.004878097 +-0.020087345 +0.018993633 +0.010811083 +-0.003335362 +-0.011611 +-0.0015654042 +0.025961699 +-0.0030702525 +0.0044685844 +-0.006960107 +-0.0007660296 +-0.03321441 +-0.0051319427 +-0.0061209816 +-0.011473244 +0.024533883 +-0.014617011 +-0.014692823 +0.0022221857 +-0.0040693367 +0.025803713 +0.0058563678 +0.0016611912 +-0.0034528621 +0.007952092 +0.001960709 +-0.025735628 +-0.0019965875 +-0.01112321 +-0.00042317662 +-0.016191674 +-0.0057025845 +0.007700912 +0.001075709 +0.0135153355 +-0.0058508352 +-0.014162361 +0.01272055 +0.007635206 +-0.005174816 +-0.049057897 +0.042237025 +-0.003634247 +-0.020748978 +-0.023363514 +-0.018986471 +-0.012931726 +0.05630759 +0.022893282 +0.021680359 +-0.011614608 +0.052289493 +-0.052457612 +-0.01740171 +-0.029206125 +-0.014480732 +0.013647317 +-0.011358212 +-0.022132233 +-0.014410065 +-0.011253293 +0.011904343 +0.0029421076 +-0.021932308 +0.017496256 +0.027351754 +-0.026351795 +-0.02626498 +0.011265736 +-0.011547857 +0.015446888 +0.024921615 +-0.0065343664 +0.010563839 +0.0061391448 +-0.010246468 +-0.0004362524 +-0.010710408 +-0.018531896 +-0.0023888866 +-0.008898675 +-0.005641397 +0.057116922 +-0.020043522 +0.012013829 +0.02431933 +0.0036753195 +-0.002110462 +0.027930224 +-0.0046772356 +-0.010391925 +0.0025323206 +-0.02429736 +-0.014988407 +-0.0075796954 +0.028201308 +0.0070633916 +0.0051414124 +-0.015415344 +0.017570527 +0.0115849795 +-0.022115298 +-0.025061347 +-0.017720046 +0.023290826 +-0.0107194185 +-0.026090613 +0.0019422319 +0.0038872834 +0.0031453422 +0.0050059594 +0.004223148 +0.0036907264 +-0.030223148 +-0.0016466993 +-0.0070503005 +-0.0057629077 +-0.002553258 +-0.011356746 +-0.0027953933 +0.0012335196 +0.017031742 +0.014316937 +-0.0072318907 +-0.036365494 +-0.02051767 +-0.004260342 +0.0046114447 +0.017096614 +0.023631709 +-0.011835452 +0.019241918 +-0.0133655425 +-0.006600792 +-0.0108092595 +-0.023356115 +0.002089132 +-0.04235813 +0.00045849924 +0.01094459 +0.0048680794 +0.004166014 +-0.0027350462 +0.008777409 +0.009758392 +0.00055892876 +0.025064962 +-0.008891015 +-0.025779707 +0.004401054 +-0.05389793 +-0.0001633571 +-0.015399263 +-0.01559619 +0.008365651 +-0.014406713 +0.0021454995 +0.032609593 +-0.021433942 +-0.024777811 +0.008369483 +0.03754881 +0.010619894 +0.0065398044 +0.007797856 +-0.009648995 +0.012557999 +0.028855296 +0.0050355704 +-0.00063646043 +0.0073632393 +0.0032424533 +-0.006218258 +-0.011203717 +0.028179318 +0.01059887 +0.0045820223 +-0.020450452 +0.010280885 +0.0069016693 +0.021426419 +0.0014727095 +0.009896294 +-0.043120984 +0.02249922 +-0.026537031 +-0.03675053 +0.020457279 +-0.0313786 +-0.0015332361 +-0.0024534694 +0.003995856 +-0.027798152 +-0.011754017 +-0.02700203 +0.006170766 +0.007362212 +-0.056612793 +-0.027627856 +0.0038146856 +-0.010724374 +0.0011461042 +-0.00035648694 +0.0022364073 +0.016664086 +-0.0015223847 +0.06508797 +-0.010618533 +0.0045767296 +-0.04753434 +-0.0068368623 +0.0014883192 +-0.037421104 +-0.01328457 +-0.030954963 +-0.023140335 +-0.012962062 +0.024281353 +-0.03195967 +0.004290478 +0.012598912 +-0.08198102 +-0.019906996 +-0.0039812317 +-0.010930214 +0.017869517 +0.02127303 +-0.046020307 +-0.018111095 +0.028662447 +-0.007384265 +0.0062593897 +0.019529091 +0.025724992 +0.0037295874 +0.0044605616 +-0.0031270422 +-0.005918442 +-0.028471425 +0.022382388 +0.0026564808 +0.032598387 +0.011838615 +-0.0047638323 +-0.017651211 +-0.037121966 +0.003991299 +0.0051959446 +0.018246006 +-0.0011494202 +0.003931379 +0.0048051993 +0.019043544 +-0.02708369 +0.01512714 +-0.0028187996 +0.0051944344 +-0.010597026 +0.011764027 +0.0017229978 +0.007279443 +0.005150377 +0.008222448 +0.0064557833 +0.0051246146 +-0.0060862494 +-0.02001972 +0.014119311 +0.0011934742 +0.009945655 +0.022635747 +-0.020289745 +0.0061434843 +-0.0045949146 +0.005565964 +0.01237931 +-0.002537011 +0.0017791487 +-0.0025566942 +0.0016009852 +-0.040877096 +0.02602445 +0.006610481 +0.008984807 +0.016916389 +-0.012105124 +-0.0069406275 +0.018423546 +-0.0013170358 +0.006490184 +-0.057569485 +-0.010668588 +0.0008826673 +-0.0042733587 +0.007814962 +-0.0052818833 +0.021851912 +-0.02163473 +0.01871851 +-0.019348687 +-0.0077209314 +0.040926527 +0.03329806 +-0.019276638 +-0.0115583185 +-0.03182865 +-0.04860382 +-0.008241875 +0.005633355 +-0.0024892658 +-0.02702353 +0.0051351413 +0.01247118 +0.0074341595 +0.0076347217 +0.025091408 +0.0016711649 +-0.03328597 +-0.035613075 +-0.009745192 +0.0001781033 +0.008391743 +0.009890367 +-0.00028777347 +0.012547998 +0.02096438 +0.01199494 +-0.0046964274 +-0.012932288 +-0.0179635 +0.006236674 +0.015165846 +-0.003996958 +-0.02611256 +-0.026396913 +0.011823384 +-0.009267964 +0.013895899 +-0.037595138 +0.043003615 +-0.0052657058 +0.042202856 +-0.023721047 +-0.029485267 +0.005936751 +-0.00903703 +-0.014049522 +0.015486355 +0.014006909 +0.00018655793 +-0.015018376 +0.020992413 +-0.014138174 +-0.021157607 +0.016001645 +-0.0040551024 +0.011660914 +-0.010387236 +-0.021042097 +0.012697302 +0.0029721763 +0.0065557854 +-0.0129432455 +-0.008584205 +0.025108205 +0.004622199 +-0.016729707 +0.003014707 +0.008693733 +-0.000785336 +0.024900887 +-0.018140653 +-0.015439778 +0.021388205 +0.0045998776 +0.015225246 +0.0094945785 +-0.0222858 +-0.004232005 +-0.00825575 +-0.0018326774 +-0.010193141 +0.020899454 +-0.004201736 +0.0066236956 +0.012975902 +0.0041561695 +0.002134713 +0.018311089 +-0.005573116 +-0.0197509 +-0.008837369 +-0.012252289 +-0.013732047 +-0.016272258 +-0.019366432 +-0.0019026888 +-0.0063711754 +-0.0036550923 +0.024922416 +-0.0015161419 +-0.0038886955 +-0.02169735 +-0.007640617 +-0.0047269207 +-0.008864871 +0.00929268 +0.003284364 +-0.023082208 +0.008930102 +0.010008831 +-0.0039458987 +-0.02106962 +0.0066115772 +-0.05478581 +-0.007945685 +0.0127959065 +0.016208226 +-0.04114151 +0.014533741 +0.024406835 +0.0061999075 +-0.012381688 +0.010990229 +-0.0019300304 +-0.0076736473 +-0.022675479 +0.012676641 +0.0007483439 +0.012750465 +0.0055952948 +0.011775072 +-0.003163404 +-0.017596858 +-0.0007156656 +-0.030778425 +-0.0049873325 +0.014873008 +0.03175669 +-0.004412519 +0.002405741 +0.0151403705 +0.015953977 +-0.0024793476 +-0.014961337 +0.005082627 +-0.025913648 +-0.0068341256 +0.004348044 +0.021640707 +-0.033244707 +-0.0042357584 +-0.026716828 +-0.014777429 +-0.021441532 +0.028874917 +0.028067172 +-0.0053181713 +-0.021807857 +0.011408532 +-0.010435567 +0.04386301 +0.017819535 +0.004697599 +-0.027619155 +-0.026835497 +-0.029192716 +0.036537036 +0.022632265 +0.01339465 +-0.01777591 +-0.0069814883 +0.014066699 +-0.009599505 +0.029464269 +-0.01412396 +0.011054964 +-0.026915766 +-0.0015967201 +-0.0031012478 +0.019831017 +0.00012323412 +0.0078018545 +-0.04373271 +0.004704373 +-0.0096090175 +-0.050317068 +0.008144173 +-0.01091639 +-0.00023721995 +0.0052599064 +-0.00031306673 +-0.0037755067 +-0.0001178588 +0.009922769 +0.00743629 +0.012197415 +-0.025345702 +-0.01818839 +0.004154676 +0.012930622 +0.009987542 +0.0126051055 +-0.008714108 +0.009656124 +-0.0038611754 +0.036027703 +-0.02237805 +0.00399064 +-0.012245692 +-0.0039011182 +0.024335185 +-0.039135303 +-0.0013182135 +-0.034110043 +-0.0067089456 +-0.003071616 +0.010339295 +-0.021429788 +0.018460974 +0.0042438367 +-0.06723826 +-0.01420929 +0.004320685 +-0.0072411853 +0.033200096 +-9.753313e-05 +-0.01362044 +0.027569853 +0.008519534 +-0.016386308 +0.030657088 +-0.0069087846 +0.02107683 +-0.003582151 +0.011406984 +0.012773942 +0.014358177 +-0.0018684255 +-0.008728545 +-0.045627926 +0.0013071517 +-0.022047486 +0.0010423176 +-0.011528548 +0.00046724864 +-0.018777825 +-0.0076267305 +0.032695167 +-0.018191878 +0.0065269466 +-0.0004450797 +0.009273315 +0.003876813 +0.003593903 +0.010319307 +0.018370746 +0.010209525 +0.0049648318 +-0.012442264 +0.001266118 +-0.0010592637 +0.005670785 +-0.01485546 +0.020325353 +0.036655787 +-0.015393322 +0.008535871 +0.016179563 +0.012389009 +0.047701612 +-0.014465991 +0.010521546 +-0.007635842 +-0.0012413764 +0.05159323 +-0.004060574 +-0.021223903 +-0.004685983 +0.023238854 +-0.0030467438 +-0.035485752 +-0.0034099168 +0.009422912 +-0.004295638 +0.015456977 +-0.009282466 +-0.00793968 +-0.01740593 +-0.01700206 +-0.018595167 +0.048796497 +0.00040929863 +0.024207441 +-0.016844323 +0.03322536 +0.0052782316 +0.00044667066 +2.047917e-05 +-0.019446442 +0.006108432 +0.0126820365 +-0.031273145 +0.026613563 +-9.374234e-05 +0.022134908 +-0.022212084 +-0.024051856 +0.016993025 +-0.024982488 +-0.0038541974 +-0.0016458154 +-0.023009071 +-0.008521077 +0.0066345828 +0.006090963 +0.0023452614 +0.042164873 +-0.031205703 +-0.033115894 +-0.00052531814 +-0.0010410609 +0.011702542 +-0.01572416 +0.015214847 +-0.009720479 +-0.018452331 +0.014723951 +0.017974082 +0.012992919 +0.027189048 +0.0017574342 +-0.00093564665 +0.0061424053 +-0.016479284 +-0.008294035 +0.045237534 +-0.009547643 +-0.002599081 +-0.0034928117 +-0.03466156 +0.008904986 +0.013180664 +-0.0054043327 +0.044907853 +-0.0005114916 +-0.0007706167 +0.018045776 +-0.017483642 +-0.017498385 +-0.03209678 +-0.02191473 +-0.0328841 +-0.02361568 +-0.0027448137 +0.013733861 +-0.00098979 +-0.012371424 +0.0032475016 +0.00890221 +-0.004447845 +-0.012999319 +-0.00015427146 +-0.012296492 +0.014328355 +-0.014089092 +0.021632936 +-0.03295884 +-0.004399509 +-0.020466812 +-0.012552999 +0.0013781831 +0.0021282572 +0.0105474135 +-0.01990245 +0.024941627 +-0.017811041 +-0.01796132 +-0.013751717 +-0.039599538 +-0.008633979 +0.0048414804 +0.039568637 +0.008432665 +0.016381063 +0.011266964 +-0.004481189 +-0.012666604 +0.0019949514 +-0.011253109 +-0.02810844 +0.014663585 +0.013783935 +-0.016110113 +0.015032258 +0.009906929 +0.022925861 +0.012119792 +0.0064474107 +-0.009174123 +6.663856e-05 +0.03000458 +0.01115066 +-0.021281997 +-0.0012723195 +-0.0069755903 +-0.00087251014 +0.014618623 +0.0046471586 +0.010700355 +0.0036368123 +0.02320844 +-0.018313259 +0.001606372 +-0.024755396 +0.01501681 +-0.009253978 +-0.010215504 +-0.005551636 +0.008711883 +0.0019812167 +-0.04860885 +-0.026765447 +0.0055672587 +0.039136894 +0.050541546 +-0.04766229 +-0.0010949007 +-0.036785427 +-0.010623886 +0.02330641 +-0.0053766365 +-0.0018820757 +-0.0009846224 +-0.017501421 +-0.013617357 +0.010284623 +0.034357056 +-0.026928324 +-0.025736837 +-0.026058264 +0.004610586 +-0.0014942617 +-0.0041984837 +-0.0055729547 +-0.008391882 +0.008335468 +-0.020222366 +0.018421246 +-0.008780795 +-0.025143163 +0.010875702 +-0.023794102 +0.007218263 +-0.029413335 +0.0030624429 +-0.0030510176 +-0.01964294 +0.007610592 +0.019367054 +0.013308095 +-0.03309822 +0.018465703 +0.004342132 +0.031166933 +-0.0013732674 +0.00039202004 +-0.003790033 +0.027008563 +0.0016951518 +-0.009090389 +-0.014133254 +-0.0005201036 +-0.013652985 +-0.010958131 +0.020734034 +0.0053724716 +-0.0048463317 +0.004518088 +0.008107436 +-0.011876953 +-0.022064716 +-0.03822436 +-0.0014070459 +0.013979057 +0.016568772 +0.029778037 +-0.025124626 +0.004126821 +0.0048052953 +0.011639617 +-0.017917098 +-0.018931825 +0.008516743 +-0.01167615 +0.037016634 +-0.00957141 +0.005834856 +-0.017673228 +-0.02779262 +0.0017190553 +0.0066564353 +-0.0058681057 +0.011904707 +-0.0074798064 +-0.009890036 +-0.0122876465 +0.005861518 +0.013312756 +0.01598322 +0.009298726 +-0.0025373555 +0.0073637078 +0.016485572 +0.0024819958 +-0.03380333 +-0.0072110426 +-0.018765746 +0.04709788 +0.011173853 +-0.023214338 +-0.0009635299 +0.032754093 +-0.0044544507 +0.004925233 +-0.031444576 +-0.01412475 +0.035830863 +-0.007515959 +-0.009592136 +-0.03713279 +-0.03179511 +0.01777986 +-0.04158485 +0.013481532 +-0.017800054 +0.0025641627 +-0.013769459 +0.019572947 +-0.029188316 +0.008007047 +0.0007007609 +-0.018157978 +-0.0004285358 +0.017585479 +-0.0023123778 +0.033963293 +-0.014177874 +0.00074209826 +-0.015367932 +-0.0017601406 +-0.024662651 +-0.0024952323 +0.008980281 +-0.009981877 +0.05358662 +0.0059856595 +-0.021361839 +0.035004336 +-0.032232296 +-0.0008428699 +-0.00819917 +0.00124367 +0.0038027542 +0.014056938 +-0.020861225 +-0.017773407 +0.0018033211 +-0.01747402 +-0.009123785 +-0.0109939445 +0.0024889417 +0.020995231 +-0.00972197 +0.04768843 +0.039204337 +-0.012300901 +0.0006038279 +-0.011570663 +0.0015876723 +-0.028255979 +0.02102215 +0.013093648 +-0.028738542 +0.001657493 +0.027207473 +0.015246798 +0.015029419 +-0.0069967653 +0.0057437723 +0.00065979833 +0.0050902627 +-0.05443489 +-0.0065421043 +-0.012242789 +-0.030122343 +-0.011386912 +-0.016082283 +-0.01740004 +0.015603971 +0.019562036 +-0.028903866 +0.008773961 +-0.01836078 +0.019896632 +-0.009451624 +-0.00038844618 +-0.006416747 +-0.016897766 +-0.015166654 +0.013174245 +-0.0123005 +0.009370253 +0.02540249 +-0.0012665739 +0.009393547 +0.017418403 +-0.016173288 +-0.023570431 +-0.016016252 +-0.0047391457 +0.008882224 +0.06079025 +0.0015307859 +-0.023211828 +-0.011991659 +-0.0016003269 +-0.007267967 +-0.0017824745 +-0.0018401325 +-0.012729175 +-0.020524692 +-0.0019751086 +0.00014095653 +-0.034325648 +-0.0019954317 +0.01260956 +0.0231002 +-0.04312999 +0.0044757663 +0.016560616 +-0.053167067 +-0.006512445 +0.009869175 +0.016697899 +-0.01349155 +-0.0025832234 +0.013445709 +-0.0045847045 +0.016001362 +-0.031653415 +-0.009825607 +0.0029421812 +-0.009335579 +-0.025280984 +0.000357844 +0.009260438 +0.01991742 +0.024650728 +0.017831992 +0.01470152 +0.004689404 +-0.039619133 +-0.00855369 +0.0068665766 +0.014507161 +0.053701095 +0.0062654344 +0.0019568233 +-0.0013313859 +-0.027466793 +-0.007810801 +0.0052037505 +0.009242837 +-0.010955024 +0.01963735 +-0.014458437 +-0.032272432 +0.060619317 +-0.035330486 +-0.0037159272 +-0.0068407436 +0.0013913667 +0.018745922 +-0.004300688 +-0.0023861416 +-0.018533872 +-0.012521639 +-0.0076587885 +0.010769493 +-0.013207273 +-0.004215865 +0.0079492945 +-0.020952083 +0.013203034 +0.009424073 +-0.0064024194 +-0.009415912 +0.017642463 +0.0010666124 +-0.003166315 +0.008082922 +0.0045766365 +-0.0010132715 +0.0013060593 +-0.007564909 +-0.0009439425 +0.0037157477 +0.006675669 +0.010974923 +0.017946893 +-0.012332394 +0.014530425 +0.018785814 +-0.0038832498 +0.0065207826 +0.009479643 +-0.030956885 +0.015369859 +0.014567068 +0.0066754976 +-0.0037938298 +0.006841384 +-0.0053825774 +-1.0490618e-05 +-0.03736151 +-1.4254919e-05 +0.011863929 +-0.027439544 +-0.0049904143 +0.010207031 +-0.019220022 +-0.0070400126 +-0.0371205 +-0.010547987 +0.007818248 +-0.0008536178 +-0.019582013 +0.010628097 +-0.0011925255 +0.015223974 +0.0032896777 +0.0043486687 +0.0044944836 +0.004915052 +0.0076154186 +0.01713849 +-0.007820604 +0.017686602 +-0.03757956 +-0.021201953 +-0.003007588 +0.01744226 +0.0054308786 +-0.019164843 +0.008534132 +-0.021900283 +-0.010261676 +-0.008459601 +0.013827357 +0.017606748 +-0.06826286 +-0.001423347 +0.020294338 +-0.0036769302 +0.032552894 +0.006623464 +-0.04134085 +-0.009700018 +0.015904916 +-0.019927194 +-0.031856485 +-0.010871555 +-0.000727956 +-0.022084454 +-0.0061898073 +0.0032982866 +0.0034965035 +0.021651028 +-0.0019059156 +-0.019512847 +0.010084643 +-0.009307657 +-0.0038210575 +-0.0008493834 +0.0015375257 +0.028319146 +-0.01584652 +-0.0027941323 +0.0048659183 +0.0142758405 +-0.010406191 +-0.02168023 +-0.015794698 +-0.0064604776 +0.007336641 +-0.0054127714 +0.013616456 +0.030718165 +-0.01440082 +0.009488576 +0.0013910406 +0.0024522971 +0.009349066 +0.017803729 +0.04009191 +-0.026694477 +0.026705625 +0.018010708 +0.029440211 +0.02156245 +-0.025205748 +0.04276878 +0.0023743196 +0.015813313 +2.8339691e-06 +-0.024794335 +-0.03270875 +0.015741717 +0.010034277 +0.007062646 +-0.013721516 +0.015435288 +0.027808294 +-0.006047511 +0.0066805435 +0.037488155 +0.012032674 +0.0049049216 +0.013846865 +-0.008855262 +-0.030902736 +0.0046366258 +0.045692008 +-0.014277864 +0.008438795 +0.018424707 +-0.00497448 +0.018167915 +0.0037012617 +-0.010749267 +0.023877408 +0.02337982 +0.004508022 +-0.0043480615 +-0.030625597 +-0.008654698 +0.016313704 +0.0006445101 +-0.022975462 +-0.02234009 +-0.0026490402 +0.0017340048 +-0.009465968 +0.010095801 +0.04770691 +-0.008431517 +0.0022154504 +0.015654078 +-0.018399898 +0.020242868 +0.0038866352 +-0.005191791 +-0.0035713038 +0.016686723 +0.020667644 +0.0022198367 +-0.0053583942 +-0.022834694 +0.002781183 +0.010358591 +-0.0065344917 +-0.0044518947 +0.020178083 +-0.011424709 +0.0036704957 +-0.008154293 +0.0022983297 +0.0051688375 +0.03803514 +-0.020780396 +0.013844578 +-0.0014520938 +-0.025798209 +0.02933233 +-0.026693722 +-0.009012725 +-0.0017094354 +-0.003158429 +0.02104778 +-0.026429662 +0.01925644 +0.006034305 +0.01179599 +0.013080525 +0.001537214 +0.06493034 +0.0023266429 +-0.0017998469 +0.008307688 +0.014516402 +0.0006182721 +0.014475718 +-0.017111953 +0.009815777 +0.011659113 +-0.013137812 +-0.016748147 +0.0056053577 +-0.009445047 +-0.004525134 +0.0069449036 +0.012724144 +-0.009675576 +-0.0045518205 +-0.0053426493 +-0.0036450285 +-0.023110751 +-0.015641926 +0.0133051 +-0.012449706 +0.00045916048 +-0.018356891 +0.001476865 +-0.006870668 +0.002170411 +0.032702383 +-0.027916308 +-0.0065433253 +-0.01930658 +-0.0023772183 +-0.0044282316 +-0.031099716 +-0.03823128 +-0.014875034 +0.010633295 +0.0042288806 +0.019209156 +-0.019084688 +0.0036023022 +-0.02067088 +-0.022095181 +-0.027275946 +0.0015117063 +-0.0050619356 +-0.005984795 +-0.014089308 +0.0062824003 +-0.012741636 +-0.006531112 +0.022804786 +-0.011954086 +-0.021825155 +-0.045218013 +0.0029954286 +0.0014645539 +0.00789498 +0.02489666 +-0.0011649407 +0.012811778 +-0.03157114 +0.011385125 +-0.019284004 +0.01003688 +-0.0095954845 +0.00731805 +-0.0024779835 +-0.017507512 +0.021126814 +0.0029994429 +0.020745803 +-0.006213985 +0.009341983 +0.015565348 +-0.009843423 +0.003223939 +-0.0070131184 +0.023699787 +-0.031418588 +0.007397488 +-0.011805113 +-0.019980079 +0.0069944463 +-0.009679162 +-0.0108447755 +0.0077406536 +0.0006002146 +-0.0010343831 +0.0387814 +0.025101352 +0.01380251 +0.0015053689 +-0.012349712 +-0.010385914 +-0.010905843 +0.011411872 +-0.009875821 +-0.015595399 +0.0035756617 +0.0094934795 +0.009411434 +-0.005699953 +0.014493156 +0.0066571566 +-0.010190678 +-0.014054497 +0.0029047977 +-0.009712704 +0.012011325 +0.03437358 +-0.004246722 +-0.0037041877 +0.008565655 +0.02096624 +-0.0005187573 +-0.001349902 +-0.010786822 +0.00025547802 +0.003996719 +-0.01846647 +0.0089677675 +0.009123757 +0.016129233 +0.016900133 +-0.0039817025 +-0.030921752 +-0.035548035 +0.0015279258 +0.023428487 +-0.018231452 +0.014993386 +-0.017007723 +-0.005186077 +0.015044877 +-0.0016985018 +0.013362584 +0.0050311075 +-0.0233265 +0.012976615 +-0.0076812496 +0.0026506323 +0.015233496 +0.008853234 +-0.01672278 +0.007849621 +-0.019698052 +7.672399e-06 +0.0089033 +-0.004246483 +-0.027162407 +0.003991145 +0.004934948 +-0.0052914657 +-0.003718139 +-0.0038948853 +0.004590531 +-0.009728752 +-0.0072990665 +-0.015273991 +0.039337914 +3.6486843e-05 +-0.0074016624 +0.0050234008 +0.0068641207 +-0.006728398 +-0.0014488276 +-0.010347291 +0.015180816 +0.008411169 +-0.017567903 +0.0032776755 +0.029902728 +-0.01845432 +-0.009633712 +0.026001226 +0.0060314285 +-0.0100525515 +0.009823522 +-0.024322396 +0.0037719584 +-0.0182074 +-0.0021673008 +0.0022549254 +0.011507861 +-0.012481005 +0.039934218 +0.013236787 +-0.0264018 +-0.014502975 +-0.022100227 +0.0027490205 +0.013938455 +-0.026783276 +-0.01917887 +0.0075019663 +-0.0067479466 +0.004401152 +0.021334745 +-0.009325968 +0.010076637 +-0.00039050472 +0.0010566842 +0.0118951 +-0.002553636 +0.01992849 +0.047957834 +0.0009884185 +0.0013494762 +0.007086896 +0.023759793 +0.00042488452 +0.00041842536 +-0.029755624 +0.012659194 +0.01894291 +-0.012172857 +0.0069187763 +0.0064638215 +0.0072124936 +-0.008566521 +-0.005448504 +-0.024915943 +-0.0014787543 +-0.006354493 +-0.015583061 +0.002751866 +-0.015770348 +0.0022840719 +-0.01218342 +-6.906175e-05 +-0.0025060673 +0.032893475 +-5.82345e-05 +-0.0063278712 +0.005852103 +0.023921749 +0.009944062 +-0.0005709311 +-0.015517441 +0.0025506297 +0.024746176 +0.0001241113 +-0.0050437567 +0.010376822 +-0.028266791 +0.03845756 +-0.008428163 +-0.015405425 +0.018145014 +-0.026603416 +0.001288779 +0.006441186 +-0.010214422 +-0.008913771 +0.0024961652 +-0.023726694 +-0.0042497967 +0.009361487 +-0.031277288 +-0.0068497043 +-0.0066736504 +-0.002397101 +0.013040522 +0.0010058171 +-0.019220866 +-0.010126569 +0.011432791 +0.0049040434 +0.031601537 +0.010805561 +-0.00917385 +-0.002965493 +-0.025835048 +-0.0073073674 +-0.008610668 +-0.01008971 +0.031466275 +0.004210131 +-0.004292908 +-0.004230609 +-0.015007731 +-0.0029641981 +0.017415255 +-0.010478317 +0.0052814283 +0.004081985 +0.016655456 +-0.0013303126 +-0.0059847706 +-0.012313827 +-0.020244373 +-0.024268894 +-0.0017099155 +0.0005353181 +-0.004028861 +-0.017366214 +-0.0019815448 +-0.00065788487 +0.0012930963 +0.008231689 +0.0027317028 +-0.0059809284 +0.009130456 +0.014467814 +0.019289779 +0.0023804205 +0.023061939 +-0.010593367 +-0.03162137 +-0.0034098946 +-0.0035242594 +0.010133538 +0.0053048003 +0.0038127596 +0.001790771 +0.011117629 +-0.01455286 +0.0052286377 +-0.029684562 +-0.0053679403 +-0.014479894 +-0.003917017 +0.069782965 +-0.008560897 +0.03584639 +0.020224389 +0.002036962 +0.0074831736 +-0.012352468 +0.005161572 +-0.0055095595 +-0.003003179 +-0.010008084 +-0.008826955 +0.002636641 +0.0012247866 +0.0061301147 +0.01240161 +-0.010466147 +0.0072318683 +-0.0050474056 +0.017965982 +-0.00209692 +-0.020005155 +-0.0074035474 +-0.0021549154 +-0.0155049395 +0.010748093 +0.017735194 +0.012239371 +0.020486068 +0.03371639 +-0.027718663 +-0.036664087 +-0.0019105758 +0.03282506 +0.0070679 +-0.0029396466 +-0.009809605 +-0.00301994 +0.008922552 +-0.022732714 +-0.002520671 +0.016432798 +0.0058609825 +0.014192727 +-0.023106487 +-0.019275859 +-0.0197787 +0.009597951 +0.014792202 +-0.00401158 +-0.013241679 +-0.011018027 +-0.00629604 +-0.027119529 +-0.012817438 +-0.0075233257 +-0.031237414 +0.0070728227 +0.0024026346 +0.012972517 +0.01408741 +0.008630831 +0.018376285 +-0.0021175507 +0.016960742 +-0.008537503 +0.018050475 +-0.015069879 +-0.030063355 +-0.0006099354 +-0.021196892 +-0.015917275 +-0.061583035 +-0.034771472 +0.015778774 +-0.0109878285 +0.0031868187 +-0.006611659 +-0.014745428 +0.005668699 +-0.018858429 +-0.00814447 +0.016930047 +-0.021359924 +-0.02917492 +0.01941131 +0.0005469453 +0.01514776 +0.0050600558 +-0.0053790985 +-0.012415515 +-0.0089552505 +-0.008170803 +-0.018677799 +0.023545668 +0.0012510032 +0.0031948881 +-0.00050980627 +0.0013422646 +0.009104022 +-0.0133016985 +0.011314371 +0.0061113476 +-0.01101842 +0.007851638 +-0.021848768 +0.0066157426 +0.001073876 +0.00892217 +0.025463985 +0.00855648 +0.007645304 +-0.00019096992 +-0.0039650444 +-0.011110312 +-0.0037676783 +-0.023716094 +0.0031231407 +-0.008372979 +-0.0037733673 +-0.007705864 +0.00084165134 +-0.017900893 +-0.0126676895 +0.01871883 +-0.0071683475 +-0.0026326913 +-0.005442209 +-0.0069059078 +-0.0035497984 +-0.0010200718 +0.005031615 +0.0139859775 +-0.015369486 +0.005420565 +0.0048662517 +0.02104419 +-0.0126985395 +0.0035090554 +0.033025302 +0.039744806 +0.022599854 +-0.027103513 +-0.028083997 +-0.019320056 +0.048590247 +-0.017343644 +0.019440176 +-0.04163855 +-0.035492353 +-0.010545822 +-0.022009257 +-0.0031403336 +-0.016176745 +0.025470715 +-0.012798154 +0.0015860194 +-0.006284183 +-0.040048078 +0.00741926 +-0.045287885 +-0.01747519 +0.011919418 +-0.020791465 +-0.02259888 +-0.0015455731 +0.008575147 +-0.0073601673 +0.0056454134 +-0.008463513 +-0.014884768 +-0.012235191 +0.009068877 +0.016965883 +0.008061692 +-0.021555958 +-0.035343822 +-0.029573847 +0.00085440604 +0.005843853 +0.031477343 +-0.006036459 +0.010720378 +-0.02274262 +0.020371817 +-5.433634e-06 +-0.0051495377 +-0.010373954 +0.0031273188 +0.021555072 +0.015286864 +-0.014381337 +0.015260369 +-0.0020858583 +-0.014238288 +0.0032293487 +0.009654209 +0.024607955 +-0.0050532147 +0.015390596 +-0.009014748 +-0.01348369 +-0.009571279 +0.021362303 +-0.010878609 +0.0015745513 +-0.0065781837 +-0.0076493598 +0.017413815 +-0.007442516 +0.0038631887 +0.0065575177 +0.0058999383 +-0.02121424 +-0.029288897 +-0.0076569444 +-0.00674715 +-0.0030407226 +-0.0016609663 +-0.025023533 +0.008978713 +-0.0021741982 +-0.0018342441 +-0.009272975 +-0.0043487 +0.0075032557 +-0.026415525 +0.02430242 +0.011887308 +0.00083179696 +0.01461526 +-0.0068965834 +-0.005452053 +0.0048691463 +0.020994918 +-0.01574578 +-0.022043083 +-0.015690235 +-0.0053746556 +0.0054185167 +0.04790487 +-0.0075881397 +-0.0050708824 +0.016658362 +0.006705472 +0.016374819 +-0.0059843515 +-0.009332759 +0.007720519 +1.187839e-05 +0.00036150834 +-0.015022702 +-0.023634413 +-0.0009018037 +0.015510683 +0.019447502 +-0.008448495 +0.0008410959 +0.0073901904 +9.822992e-05 +0.021630254 +0.009949636 +0.03259921 +-0.011077781 +-0.002163883 +0.022977022 +3.4905315e-05 +-0.014473101 +-0.05008564 +-0.00015271113 +0.009046158 +0.007062627 +-6.4003914e-05 +-0.013219305 +0.015179928 +-0.009511696 +-0.0016931127 +-0.0003462815 +-0.04160678 +-0.007928673 +-0.008302985 +-0.033386465 +0.007204528 +0.005837421 +0.016704408 +0.017733507 +0.018822715 +-0.018864086 +-0.035818152 +-0.012593781 +-0.016222063 +-0.025015503 +0.0014493038 +0.029651575 +-0.022356208 +0.0025138513 +-0.018400738 +0.0020596485 +-0.007966267 +-0.006419991 +-0.008503839 +-0.0011519692 +0.015613462 +-0.016961293 +0.0051875594 +-0.009175542 +-0.00030750578 +0.006647378 +-0.009799005 +0.018552735 +0.014597084 +-0.011994981 +0.022488229 +0.0056393645 +-0.0072487323 +-0.014367984 +0.013103903 +0.006336959 +-0.00054496975 +-0.028568875 +-0.028781988 +0.025951518 +-0.019454055 +-0.0018668061 +0.0047700345 +-0.021864353 +-0.0028204762 +-0.008460806 +0.0034734856 +-0.009354266 +-0.009843069 +0.0035131623 +1.2530691e-06 +0.017987136 +0.008637443 +-0.0004686326 +0.003830778 +-0.00034209952 +-0.0039874995 +0.014889811 +0.0074787796 +-0.009156728 +0.023646092 +0.000290877 +-0.0037177857 +0.011977697 +-0.029792815 +0.0059609283 +-0.0058063236 +0.003825122 +-0.010950358 +-0.012316038 +-0.0022815573 +-0.023782354 +-0.017960917 +-0.011877069 +0.014626955 +0.0039426135 +0.012512438 +-0.009351266 +0.006672015 +0.0091187535 +-0.0018042562 +-0.005733067 +-0.012545915 +0.006979602 +0.020620883 +-0.022972431 +-0.014436949 +-0.0056324615 +0.037533212 +0.018801706 +-0.024441762 +-0.008029196 +0.002055643 +-0.010113081 +0.031261116 +0.0065723285 +0.016696343 +-0.052799493 +0.0077264453 +0.021743784 +0.016279032 +0.018316606 +-0.01944559 +-0.044918228 +0.014054414 +-0.0024390006 +-0.028856672 +-0.002478079 +-0.022835795 +-0.011853072 +0.0021240574 +-0.007266123 +0.001558154 +0.012478623 +0.0035782794 +0.0053297863 +-0.0091356095 +-0.009070259 +-0.0027318946 +0.009564873 +-0.016869528 +0.007638336 +-0.015679048 +-0.028627291 +-0.0120246 +-0.027827347 +0.018999474 +-0.0031628944 +-0.013156973 +-0.0013460768 +0.0117812855 +-0.007919137 +-0.0064934255 +0.025804834 +-0.036574047 +0.011659933 +-0.00013487299 +0.0028077913 +-0.0048425584 +0.010405072 +0.022238081 +0.020327646 +-0.011434095 +0.005623298 +-0.0016978265 +0.022408418 +0.0027670548 +-0.011891182 +0.006209783 +-0.012967334 +0.012005341 +0.009298177 +-0.004704568 +-0.009074703 +0.019971088 +0.016130524 +0.024073308 +-0.03576984 +-0.0025346384 +0.021485977 +-0.00071575126 +0.00385343 +-0.0019341628 +-0.02271905 +-0.018116456 +0.017802373 +-0.004080258 +-0.009423477 +-0.033168677 +0.012996957 +-0.007877959 +0.009864978 +0.01850102 +0.005781744 +0.0062559242 +0.0006258284 +-0.02899201 +0.028322568 +-0.01691907 +0.009877353 +0.03462102 +-0.0017543711 +0.0023204198 +-0.007336508 +0.018994186 +-0.005307757 +0.00038297934 +-0.00040663517 +-0.004955141 +-0.0038824317 +0.028210633 +0.004208898 +-0.0051238867 +0.01726016 +-0.0041025667 +-0.010205421 +0.0047813347 +0.0006679672 +-0.00659731 +0.005054724 +-0.015112834 +0.004928431 +-0.00152177 +0.0039951173 +0.03619926 +0.0040435456 +-0.018670898 +-0.013887025 +0.036907177 +0.005379099 +-0.0066823154 +0.0057734204 +-0.0027711943 +-0.0092359055 +0.0100758 +0.033764366 +0.0076368125 +-0.0024389848 +-0.0034564286 +-0.010077195 +-0.0016310348 +-0.020406125 +0.010976254 +0.0007551749 +-0.010555363 +0.0304061 +0.011832089 +-0.00020397866 +0.014388954 +0.0055291676 +-0.00078632095 +0.0019950613 +0.07316568 +0.0032818336 +0.007409637 +0.005385547 +0.0027525937 +-0.017769026 +0.007289099 +0.0034210565 +0.01146186 +0.018771613 +0.015767485 +-0.0024036628 +0.0072273333 +0.0009281844 +-0.00022375115 +-0.007597295 +-0.004132117 +-0.0037078587 +-0.0063734916 +-0.0009074092 +-0.01572915 +0.0021740848 +0.0131739965 +0.0011043273 +-0.0120088905 +0.010116684 +-0.02786346 +0.0030349707 +-0.050436277 +-0.0047705304 +0.013562772 +-0.015601563 +0.022408202 +0.0021286462 +0.0022718925 +-0.0044284267 +-0.023547811 +-0.0064169997 +0.0070094783 +0.012219325 +0.013183492 +-0.013934953 +-0.0026980797 +-0.0052612033 +-0.004128546 +-0.006550195 +-0.0027161448 +-0.008011168 +0.026000917 +-0.013584139 +-0.022466626 +0.00092537893 +0.011287855 +0.0044405353 +-0.015218529 +0.0022102923 +0.008123948 +-0.020896116 +0.012915748 +-0.009857077 +0.030728824 +0.020688277 +-0.016541837 +-0.0024228506 +-0.0006357161 +0.016395891 +-0.018028703 +-0.0018174571 +-0.0018733443 +-0.0016044189 +-0.02075377 +-0.02070039 +0.019752996 +-0.012362632 +0.005103223 +-0.010552477 +-0.0019932433 +0.015203416 +-0.005263469 +0.010234281 +-0.001963734 +-0.004858437 +-0.029323163 +0.0067389696 +-0.018578494 +-0.008356394 +-0.005640645 +-0.0029904621 +-0.013657583 +-0.008837061 +-0.0099399965 +-0.007023431 +0.008248977 +-0.0004165729 +0.0033101938 +-0.0055454327 +-0.0076426007 +-0.010047784 +0.006260016 +-0.0001887169 +0.0003884908 +-0.003807641 +0.0038151778 +-0.0066055004 +-0.0027378167 +-0.014617141 +-0.003147483 +0.016197918 +-0.013294896 +-0.0008337377 +-0.017222993 +0.0036234865 +-0.0062778774 +0.022151928 +0.0069981543 +-0.004684474 +-0.032433003 +-0.019229753 +-0.020213792 +0.014798927 +-0.014940563 +-0.009417023 +0.0073380386 +-0.011977825 +-0.011013718 +0.0008404229 +0.005377907 +0.015517834 +0.006242792 +-0.030474542 +-0.0019895246 +-0.0030826868 +0.012351946 +0.028003933 +0.0050680856 +-0.008471029 +0.0053413324 +-0.007516944 +-0.00094581675 +0.005751901 +-0.0042541767 +-0.0033132336 +-0.020059353 +-0.030964188 +-0.0015297802 +-0.008858542 +0.0045925067 +-0.002866532 +-0.0025767314 +0.0033146641 +-0.002073565 +0.011849511 +0.01276968 +0.0010016803 +-0.0125334505 +-0.0075292666 +0.021017522 +0.0002883234 +0.0049033933 +0.008848926 +-0.0025079243 +-0.011744119 +-0.0038901058 +0.03366406 +0.012652694 +-0.019767238 +0.006017289 +-0.008113837 +-0.006787715 +-0.011128526 +-0.0032330842 +-0.0007256194 +0.014880201 +0.020214954 +0.0081195785 +0.009243729 +0.02017238 +0.011749489 +0.018543195 +-0.013321193 +-0.034309532 +0.014661207 +-0.010344107 +0.0032598737 +0.02554137 +-0.003663585 +0.009736581 +-0.004372376 +-0.029617567 +0.036000542 +-0.010092819 +-0.010808994 +-0.01620188 +-0.013972028 +-0.029881911 +0.021826193 +-0.0021259396 +0.0021592956 +0.0126438625 +0.012169598 +0.024866099 +-0.0069210622 +0.0062903888 +0.009257539 +-0.014975054 +-0.027539043 +0.020808017 +-0.006761998 +0.04032429 +0.00981597 +0.0025099025 +0.009202446 +-0.008468413 +0.009960216 +0.012154239 +-0.0027713364 +-0.009208966 +-0.017082948 +0.019399337 +-0.026429377 +0.011042009 +0.00569537 +-0.03427718 +-0.013946926 +-0.0032922467 +-0.03884456 +-0.023093052 +-0.015630944 +0.014017746 +0.007019172 +-0.022396913 +-0.015371561 +-0.02237682 +0.023069795 +-0.020105787 +0.009192999 +-0.0001603264 +0.008378379 +0.010120042 +0.0028426172 +-0.012537235 +-0.007097172 +0.0042802943 +0.0013478791 +0.009948453 +-0.01616455 +-0.0006591166 +-0.018930148 +-0.0072050183 +0.0023109685 +-0.026536215 +0.0016502563 +0.025424683 +0.0045678224 +0.00085444865 +-0.014067604 +0.012838825 +0.0026320703 +-0.005911902 +0.012959338 +-0.005535987 +-0.021107353 +0.001186855 +-0.0020453692 +0.019374581 +-0.0073857857 +0.008845556 +-0.0019356195 +-0.013143014 +-0.015822012 +0.013992903 +-0.0060008923 +0.0037425156 +-0.0031289677 +0.010018333 +0.0022848474 +-0.010666571 +-0.036068607 +-0.0037363635 +0.0022973644 +0.010760833 +0.01717608 +-0.0047709905 +0.011322131 +-0.01736279 +-0.013119304 +0.0032780701 +-0.023220833 +-0.01695395 +0.025115233 +0.0053562014 +2.2498256e-05 +0.0063319877 +-0.039897636 +0.015086936 +-0.012627335 +0.01507365 +0.013004171 +-0.01161856 +-0.013264592 +-0.0053258454 +0.0018152766 +-0.0013535131 +-0.0073716366 +-0.009031836 +0.009662208 +-0.00040344737 +0.0042526606 +-0.011880401 +0.013903354 +0.0022024044 +0.017725293 +-0.017118469 +0.005775452 +-0.009093666 +-0.010813208 +-0.018893657 +-0.0039746645 +-0.00050667 +0.011457794 +0.017373221 +-0.0015291802 +0.008492993 +-0.0006708229 +0.0022950042 +-0.021532677 +0.072179876 +-0.0139854895 +0.025916655 +-0.0046162885 +0.0041619134 +0.023211684 +-0.021851148 +0.008582514 +0.005692508 +0.002842352 +-0.013031526 +0.024544766 +0.00034547635 +-2.8812949e-05 +-0.0112823 +-0.0051177945 +-0.00021319048 +0.00018838499 +-0.00547497 +-0.014992768 +-0.01764785 +-0.002793691 +-0.023580302 +0.0017523938 +-0.0037297662 +0.018898657 +-0.0055269953 +-0.0055562104 +0.010143455 +0.013727819 +-0.020702202 +-0.010394823 +-0.013712056 +0.01646838 +-0.009580441 +-0.008653198 +-0.022435503 +0.010744544 +0.021204468 +0.00096066575 +-0.008755059 +-0.00813669 +-0.018547488 +-0.020410245 +0.012460251 +-0.017137881 +-0.008735459 +-0.001391528 +-0.0042353044 +0.011359387 +0.015548432 +-0.023030972 +-0.0055434243 +-0.036749877 +-0.016768405 +-0.040749725 +0.020390939 +0.009787425 +0.000135743 +-0.000501404 +0.011771214 +0.017414447 +-0.011631474 +0.003154273 +-0.01136906 +-0.00560983 +0.019272078 +-0.03727081 +-0.03704527 +0.011759635 +0.023486424 +-0.03905339 +-0.05938226 +-0.05101713 +-0.0014082437 +-0.007605176 +0.008612971 +-0.025374588 +0.006655976 +-0.007902825 +0.017312119 +-0.011912138 +-0.0031458016 +-0.011353074 +0.007956693 +0.012012203 +-0.007064384 +0.027111104 +0.016596174 +-0.01678969 +-0.00013226824 +0.014245546 +0.0065975296 +0.012083767 +0.04828135 +0.0018892635 +-0.0007043111 +-0.019825883 +0.008140917 +-0.0014300353 +-0.039513666 +0.0031147385 +0.0024894413 +0.001248934 +-0.006259693 +-0.006778382 +0.00026217208 +0.003357062 +-0.003822001 +0.0025366782 +-0.01294765 +-0.00656944 +0.0056589968 +0.029627908 +0.025160123 +-0.018004078 +-0.0018598054 +-0.023536146 +0.0065730917 +0.0025625606 +-0.0144509915 +0.0068231 +-0.03819009 +-0.012568096 +0.013769443 +-0.01842118 +0.012710455 +0.021363035 +0.010952494 +-0.009782492 +-0.0055968547 +-0.016391579 +0.009324525 +0.012702143 +-0.0007171789 +0.0026598922 +-0.011033572 +-0.021519132 +0.006618124 +-0.004784034 +0.031416204 +0.021757616 +-0.0046551954 +-0.0060449042 +0.023258993 +0.025387483 +-0.018458711 +0.016063793 +-0.007951795 +-0.010157175 +-0.013381612 +0.0059942403 +0.0082679605 +-0.004481946 +0.029619714 +-0.010560354 +-0.010977437 +-0.020022769 +-0.025296688 +0.0003937452 +-0.0125346845 +0.018398404 +-0.009873766 +-0.0053131403 +-0.029585427 +-0.015171298 +0.015549855 +-0.017219592 +-0.0038520996 +-0.0035857176 +-0.015133824 +-0.00613393 +0.01141132 +0.020056723 +-0.011083938 +-0.01581408 +-0.0107807405 +-0.03729029 +-0.0025033706 +0.018974513 +0.025114736 +-0.00822693 +0.026838869 +-0.023294244 +0.007558998 +-0.00074009696 +0.021239813 +0.011193021 +0.01933806 +0.004357818 +0.041054726 +0.0051965895 +0.011487225 +-0.030616533 +0.0046570986 +-0.009877852 +0.0033197864 +-0.00075633783 +-0.000782964 +0.013705103 +-0.003223511 +0.0008514383 +-0.014740347 +0.002670662 +-0.0021786587 +0.016830275 +-0.0028443537 +-0.019242756 +0.0025415518 +-0.0019667621 +0.0066682603 +-0.0023450926 +-0.0031995224 +0.0018267389 +-0.009938924 +0.011839026 +-0.010256992 +-0.01431526 +-0.005972215 +0.020190595 +0.0060014646 +0.006012092 +0.004666299 +-0.0027134456 +0.0060555465 +0.0093359575 +-0.016354198 +0.0151467165 +-0.01540907 +-0.0052791825 +-0.00029974946 +0.012012508 +-0.0077407756 +-0.0033183724 +0.0036662996 +-0.0033447186 +-0.010786076 +-0.005987081 +0.0030902955 +-0.0035657028 +0.02123149 +-0.007944731 +0.038650516 +0.00148875 +-0.0046662446 +0.003230819 +0.0051704086 +0.005491892 +-0.0010133649 +-0.0012526622 +-0.0101905875 +-0.0025102794 +0.0018689454 +0.009525044 +0.008647858 +0.008170837 +0.0026186681 +0.001094943 +-0.00014450568 +0.0076265647 +0.0019163665 +0.0009334423 +0.004469913 +-0.02756328 +0.03175646 +0.008174016 +-0.0073516094 +0.018837761 +-0.0123443045 +0.014216874 +0.010112395 +0.00011765931 +0.011887897 +-0.01373716 +0.026718717 +-0.006434406 +-0.006755647 +0.01644567 +0.006310344 +0.006939662 +0.0055733845 +-0.00769779 +0.0011259889 +-0.018545002 +-0.010124175 +-0.002006058 +0.012183131 +-0.021991234 +-0.028656842 +0.0021469567 +0.02933256 +-0.00033539828 +0.01608951 +0.008414671 +-0.0041842237 +0.00631579 +0.0040298584 +0.016410926 +0.0019717442 +0.014143717 +-0.0029072452 +-0.010541739 +0.00079954596 +-0.024468841 +-0.011930768 +-0.018043503 +-0.0032429588 +0.01792804 +0.008962719 +-0.003276332 +0.02826679 +0.0138823595 +0.006245397 +-0.010931647 +0.011993704 +-0.004647225 +-0.009027108 +0.01639774 +0.003957891 +-0.008507224 +-0.010630228 +0.018630384 +-0.019521702 +-0.0025664384 +-0.021819662 +0.005349267 +-0.00810449 +-0.0145609705 +-0.019076498 +-0.016638238 +-0.0138845965 +0.010534363 +0.007786654 +0.01522474 +0.020120181 +0.0046935263 +0.02281015 +0.012181533 +-0.0053881835 +-0.0006152458 +-0.0055020205 +-0.013693654 +0.016257744 +-0.0019901954 +0.0009712191 +-0.008104601 +0.0041660154 +-0.0055116294 +0.002184701 +0.0019027501 +0.003560808 +0.0013358697 +-0.012208671 +-0.030053083 +-0.006975798 +-0.018642228 +0.004407153 +0.0012772356 +0.013653344 +-0.013209309 +0.008832053 +-0.003554012 +0.008589295 +-0.0050017135 +-0.018952653 +-0.016696265 +0.0127995815 +0.0073510534 +-0.040585507 +0.007214925 +-0.0068946946 +-0.038827047 +-0.016038273 +-0.021604676 +-0.006230013 +0.0061575794 +0.0060282033 +-0.0017821552 +-0.014657328 +-0.026045738 +0.02090008 +0.011658861 +0.0081085 +0.0039074584 +0.0013912328 +-0.013525183 +0.027980348 +-0.013344977 +-0.009345689 +-0.002945271 +0.0034205816 +0.03137677 +0.011376657 +0.011600287 +0.008390062 +0.020414272 +0.012348971 +-0.006778774 +0.0100907395 +-0.0117340395 +0.003754513 +-0.0035308383 +-0.0023033442 +0.013528038 +-0.017774407 +-0.0040776916 +-0.008936791 +-0.016016569 +-0.02152818 +0.019756485 +-0.0045809383 +0.0123463385 +0.002694049 +0.00079764036 +-0.01629685 +-0.012778051 +-0.030943638 +0.019390117 +-0.008196771 +-0.01678827 +-0.019096853 +-0.008151605 +0.013462698 +-0.009805491 +-0.008719587 +-0.0019064962 +-0.01481084 +0.024948522 +0.027257932 +-0.003794305 +-0.029053243 +0.015099079 +0.0022963367 +-0.0094681475 +-0.0069194096 +0.011058839 +-0.020929096 +-0.005176113 +0.021980207 +-0.018025473 +-0.009894565 +0.02565073 +-0.012088793 +-0.018878177 +-0.00040271567 +0.010582825 +-0.009859602 +0.023046724 +-0.026198879 +-0.013039604 +-0.014439422 +-0.006177242 +0.0241501 +0.02075824 +-0.0078065116 +-0.00843502 +0.0120800575 +-0.001026703 +-0.0151241785 +0.0063757235 +-0.0072648204 +-0.020707652 +0.023266843 +0.0066287173 +-0.012105482 +-0.028214358 +-0.014052663 +-0.02957438 +-0.0012344687 +0.0029453386 +0.0031576394 +-0.0038762817 +-0.006089394 +0.0001820396 +-0.013073482 +-0.0011610588 +0.0064336443 +-0.0050241873 +0.014479725 +-0.003487591 +0.014659684 +-0.004861506 +-0.0065526986 +-0.0057120253 +-0.0077244295 +-0.015063581 +0.017617181 +-0.017985303 +-0.0062936684 +-0.00739157 +0.015603916 +-0.004871346 +0.02808435 +-0.030016225 +0.010904905 +0.0036004763 +0.017668698 +0.014469002 +0.0015417294 +-0.026586177 +0.0020864627 +-0.008467752 +0.009147505 +-0.015628712 +0.003708653 +0.010904957 +-0.01141502 +0.029302893 +-0.0011188699 +-0.0061082765 +0.006953981 +0.0034747964 +-0.0074065845 +-0.011993521 +0.033018593 +-0.011595277 +0.007185369 +0.025106048 +0.009831379 +0.0036041406 +0.01739466 +0.0019626536 +0.02253906 +-0.0014792836 +-0.002694569 +0.012271582 +-0.00018114493 +0.014200645 +0.008017703 +-0.008218435 +-0.006436449 +-0.013891843 +0.0031116249 +0.0029023758 +0.0026372788 +0.013227724 +-0.005294262 +0.005049449 +-0.00046671968 +0.021739153 +-0.008467616 +-0.004433014 +-0.0830994 +-0.0125148995 +0.014566623 +-0.02264817 +0.012653093 +-0.016677847 +-0.013818056 +-0.00054358493 +0.011134239 +0.0024884825 +0.0014917315 +0.0037164825 +0.046280514 +0.0077171754 +-0.00382932 +-7.194805e-05 +0.016885236 +-0.009338958 +0.007828629 +-0.0065194736 +-0.0049957433 +-0.024516067 +0.0038549101 +0.007741356 +0.021603107 +0.023895899 +0.013206895 +0.0009575133 +0.013918184 +-0.009316957 +0.0011433254 +0.0021616453 +0.06823261 +-0.006349106 +0.0076815994 +-0.0034403086 +0.019755024 +0.022184558 +-0.036309853 +-0.0014770618 +0.011457023 +-0.0005239495 +-0.01001459 +0.00085996516 +0.011434325 +0.0023306264 +0.010240794 +-0.019708585 +0.0050316714 +0.013090258 +-0.012915561 +0.008373158 +0.017477026 +0.00677779 +0.011391247 +-0.015386421 +-0.012353907 +0.0138147855 +-0.013390772 +-0.009279865 +-0.024111668 +0.004664185 +0.0074135675 +-0.023009123 +0.028437348 +0.025445271 +0.01575466 +-0.0063180625 +-0.0031002183 +-0.009955139 +0.026334671 +0.001684391 +-0.012296552 +-0.008039581 +0.016096983 +-0.020580156 +0.02977621 +-0.02007583 +-0.011909033 +0.022294192 +-0.009972863 +-0.013544548 +-0.020427898 +-0.014453607 +-0.022904644 +0.017947843 +-0.008154113 +-0.019523578 +-0.049710695 +0.006177134 +0.0013174341 +0.03229347 +0.022034535 +-0.01995244 +-0.008650695 +-0.006779966 +-0.010117875 +0.001149882 +-0.02847948 +-0.0015061954 +0.015123554 +0.008587607 +-0.0031869437 +-0.0076795453 +0.026608912 +0.01387702 +0.021282803 +-0.022476032 +-0.003690183 +-0.0065169916 +-0.008004577 +-0.012128561 +-0.021486986 +0.002620485 +-0.01222486 +-0.017017309 +0.022880504 +0.020984609 +0.0098593235 +-0.002953301 +-0.013548704 +-0.007721519 +-0.009911551 +-0.006590047 +0.02701731 +-0.013157406 +-0.024449615 +-0.005790789 +0.015783507 +-0.010664555 +0.008843697 +-0.0022263182 +-0.017638968 +-0.010108684 +0.020369904 +0.0035319878 +-0.016015926 +-0.0045381654 +0.01170192 +-0.011716017 +-0.0015386341 +-0.011865067 +0.0063726967 +0.008268356 +0.023999833 +0.0009890102 +0.013500361 +0.0075518833 +0.02193606 +0.020101655 +0.02434189 +-0.0011269355 +0.009187303 +0.0043372097 +-0.01000798 +-0.012347426 +0.008018708 +0.0026490332 +-0.012083627 +0.012202663 +-0.016480012 +0.0079421485 +-0.012985567 +0.017349193 +0.01378243 +0.021583116 +-0.029958408 +0.0051883915 +-0.017890261 +0.015945802 +-0.008397744 +0.010903767 +0.0076737236 +-0.0024161697 +-0.008062602 +-0.010156758 +-0.012887866 +-0.0044594468 +0.0046730097 +-0.012169187 +0.032452203 +0.01342291 +0.0009154371 +0.014797047 +-0.023869507 +0.0030286538 +0.012701123 +-0.015644528 +0.0010497686 +0.0020745755 +0.007525801 +-0.001462053 +-0.00490324 +-0.00417358 +-0.0057875374 +0.0028469271 +0.018956106 +-0.0066367816 +0.016245844 +0.001264107 +0.0045528673 +0.0024316902 +-0.019400135 +0.0008500056 +-0.0067715743 +0.013993688 +-0.025498701 +-0.0065003023 +0.0036070643 +0.00024979288 +-0.00078387506 +-0.013174813 +0.003822377 +-0.0015823322 +0.0078893155 +0.011702453 +-0.02478008 +-0.009801256 +-0.009683289 +-0.023751618 +0.03083142 +0.005820177 +0.01145756 +0.011012716 +0.0022044163 +-0.0019188973 +0.001057119 +-0.0019276458 +0.015779497 +0.013487462 +-0.0106072975 +0.0060303677 +-0.0070667653 +0.0033108494 +-0.011044765 +0.018221183 +-0.0065258914 +-0.016003732 +0.01403467 +0.02153573 +0.00944512 +-0.01962582 +0.017905446 +-0.0038516978 +0.023484265 +-0.014962356 +-0.010332792 +-0.010236201 +-0.03682385 +-0.0055555743 +-0.027843535 +0.007698267 +0.0067836004 +0.011708727 +0.027991645 +0.0051913406 +-0.023331352 +-0.0070178485 +0.013016383 +-0.015378693 +0.0020702055 +-5.499323e-05 +-0.012922775 +-0.0068492363 +-0.0056848503 +-0.045476638 +0.019263208 +0.014720686 +0.005776816 +-0.015772916 +0.0013122831 +-0.022729358 +-0.009807132 +0.00060850993 +-0.021852447 +-0.015709154 +-0.00041744602 +-0.014782587 +0.011874902 +0.017159602 +-0.010637223 +-0.016115036 +-0.00034663506 +0.01306227 +0.0013233984 +-0.01999593 +0.00036892673 +-0.0048651574 +-0.0137827 +-0.028182006 +0.007155059 +-0.012462937 +0.009397086 +-0.004174733 +0.0032190315 +-0.00061730616 +0.0097941505 +-0.031017588 +0.06450448 +-0.008330606 +0.08229409 +0.0197053 +-0.011902281 +0.006520714 +-0.00094593526 +-0.0040564593 +0.0009782017 +0.022407243 +-0.010480644 +0.022339681 +0.010570785 +0.013120981 +-0.015938293 +-0.015801411 +0.012035624 +0.020685911 +0.01001941 +0.0069192797 +-0.016855454 +0.022285637 +-0.016805377 +0.00696837 +-0.026139805 +0.0016948096 +-0.01043555 +-0.01421804 +-0.032316692 +0.013141728 +-0.038177937 +0.0044008833 +0.00046355271 +0.000663468 +0.00069542165 +-0.013734314 +-0.004735419 +0.025845904 +-0.031174967 +-0.027318118 +-0.009906647 +-0.028549066 +0.008098499 +-0.000810163 +0.018086743 +-0.016500134 +-0.023168499 +-0.011217614 +0.010161105 +-0.001364672 +0.028416134 +-0.023560982 +-0.0017209023 +-0.022881893 +-0.0067966804 +0.0056309444 +-0.006051178 +-0.023542855 +-0.011429305 +-0.019248856 +0.013633692 +0.017231165 +-0.016292576 +0.014975956 +-0.0034605716 +-0.022829745 +0.0403642 +0.0037476455 +-0.014174563 +0.0038178386 +-0.0025708168 +-0.033060823 +-0.02673554 +-0.006939374 +0.0020766808 +-0.005755737 +0.026530059 +-0.023469917 +-0.00263198 +-0.00047867824 +0.007864449 +-0.020813014 +-2.5524681e-05 +-0.015880466 +-0.014629433 +-0.0009547734 +-0.012485434 +0.011418254 +0.002086051 +-0.0075827497 +0.012198642 +0.009897974 +-0.011326292 +-0.012949321 +0.047715988 +-0.009496935 +0.0035874608 +0.004678927 +-0.004133545 +-0.0097058015 +-0.01368875 +-0.013028117 +-0.005926687 +0.028863681 +0.0075308974 +0.00864788 +0.001716218 +-0.01536994 +0.0104555255 +-0.00828416 +0.021459749 +-0.01944938 +-0.012830743 +0.020489117 +0.026925862 +0.0049147666 +0.0029415926 +-0.0018003811 +0.010223839 +0.014477704 +0.01144491 +0.0022201806 +-0.04992276 +-0.01217955 +0.0066176597 +-0.006828802 +0.0069753164 +-0.020337027 +0.020468656 +0.017080972 +-0.048702944 +0.012218732 +-0.012859063 +-0.0012240938 +0.024660118 +0.004275735 +0.0021212443 +0.011097183 +0.0021594444 +0.00043073026 +0.01624499 +-0.0044565205 +-0.005559024 +-0.009955651 +-0.009123482 +0.021213664 +0.008820854 +0.0069074477 +0.015934264 +-0.02610679 +-0.017074589 +0.00082734827 +-0.007749169 +0.002630875 +0.0059355875 +-0.0050140913 +-0.0019881458 +-0.02735253 +0.018497966 +0.0052668545 +-0.022941059 +5.1793082e-05 +-0.004499955 +-0.0064924397 +-0.014139182 +0.012969791 +0.0031204787 +0.024334073 +-0.01734992 +-0.0123560205 +-0.011983333 +-0.011339642 +0.0036256735 +0.024075652 +-0.007188305 +-0.00024637746 +-0.015191888 +-0.04178013 +0.009776125 +0.0068431636 +0.01907857 +-0.0028566679 +-0.0049001193 +0.0015873142 +-0.0017753214 +0.01954065 +0.015367157 +-0.0035096938 +-0.01130488 +-0.013449467 +0.007291368 +-0.0015722652 +-0.0043203766 +-0.018692805 +0.01633592 +-0.00644017 +0.018273298 +0.006670357 +0.012850393 +0.015593454 +0.0074164323 +-0.01322306 +0.0014282926 +-0.0011720664 +-0.0039259708 +0.0053417212 +-0.01198858 +-0.06097891 +0.0042021084 +0.008168502 +0.014264953 +0.009690241 +-0.01945809 +0.002944371 +-0.014454929 +0.00926551 +-0.00250429 +-0.015097952 +-0.006938216 +-0.0024397098 +0.0070519918 +-0.0011549914 +-0.007444066 +-0.0032338854 +-0.007720235 +-0.0026112597 +-0.020663852 +-0.007245198 +-0.0006588617 +-0.008024148 +-0.043257896 +-0.0045382497 +-0.00070552644 +-0.0075924383 +0.002775266 +0.0023296017 +0.007683939 +0.0035347852 +0.003849736 +-0.036721397 +0.03569779 +-0.009031457 +0.085802354 +0.00778999 +0.0033663514 +0.017917356 +0.007921239 +-0.013137035 +-0.0004481231 +-0.00077582593 +0.012605958 +0.008749842 +0.0039147255 +0.010313531 +-0.00843833 +-0.022565281 +0.01573628 +-0.0002446198 +0.0038967778 +0.0029725446 +0.008864149 +-0.0068420735 +0.007086706 +0.003516203 +-0.010719492 +-0.009416972 +0.01133466 +0.011293072 +0.006461468 +0.00591851 +-0.009397291 +-0.0158322 +-0.023710009 +-0.014293678 +0.01914942 +-0.0035395052 +0.0391985 +0.009986126 +0.0062654777 +-0.017128762 +0.01835579 +0.021594532 +-0.003257597 +0.0039116186 +-0.0020778165 +-0.0028423765 +-0.016300108 +0.006076357 +-0.0021315864 +-0.0002546228 +0.0035214534 +0.011555325 +-0.020826615 +0.0029507433 +-0.008103394 +0.0028119418 +0.0133872535 +0.0025285522 +-0.010052482 +-0.029894868 +0.00492904 +-0.0072878534 +-0.013780226 +0.0024636718 +0.011991442 +0.0012661158 +-0.0074067065 +-0.0027729447 +0.015284149 +0.008344636 +-0.01700787 +-0.0011550393 +0.016802069 +0.009956156 +0.006144081 +0.004296808 +0.0039609456 +0.005510701 +0.012747505 +0.0017766568 +0.007510709 +0.010834729 +-0.01949494 +-0.00341119 +-9.2004455e-05 +-0.011933976 +0.010893981 +-0.0006266776 +0.012714133 +0.014701331 +-0.0004941631 +0.01040331 +0.020494249 +0.022675421 +0.0013320163 +-0.019054245 +-0.011740612 +0.0047338633 +-0.006034094 +-0.011267267 +0.014115026 +0.0040900884 +-0.0012090063 +0.0014479078 +-0.0501807 +0.0003517891 +0.0040186127 +-0.0020375832 +-0.011991743 +-0.0028075152 +-0.044911034 +-0.015484292 +-0.002771443 +-0.002341521 +0.020839805 +4.4488033e-06 +0.0040935953 +-0.0008762294 +0.0071615214 +-0.00030097368 +0.025254183 +-0.00716261 +0.01729989 +-0.0075463736 +0.00012261076 +0.0065490385 +0.029475335 +-0.005121026 +0.003930329 +-0.005684182 +0.00939818 +0.015940174 +-0.005605513 +-0.010481862 +-0.012876941 +0.005116229 +-0.03267881 +-0.0073923734 +-0.018223165 +0.014630287 +0.014742592 +0.009317283 +0.0024367734 +0.00924335 +0.021766895 +-0.009456885 +-0.0069412645 +-0.015173609 +0.0023841138 +0.006538803 +0.012086516 +0.016110245 +0.018384095 +-0.02700289 +0.02233945 +0.0060995305 +0.0065740016 +-0.0032079583 +-0.0035413224 +0.011535095 +0.0027699217 +0.0055682994 +0.016620057 +0.0113023585 +-0.00911138 +0.013620951 +0.011082683 +0.0048181834 +-0.020143406 +0.004471298 +-0.0086676935 +-0.016210938 +-0.0020368476 +-0.0026750632 +-0.037225727 +0.010211424 +0.0019196201 +0.005608013 +-0.013115974 +-0.019326162 +0.0022882943 +-0.010837935 +0.009643538 +-0.009683195 +0.0041038063 +0.018498924 +-0.0029090128 +0.0154863475 +0.013952712 +-0.014613635 +0.007555343 +0.0058781398 +0.015065704 +0.015848504 +0.003086502 +-0.011671248 +0.0043601217 +-0.020437786 +0.003197594 +-0.0054655783 +-0.012469634 +0.013621963 +-0.02210433 +0.012318341 +0.00301124 +-0.013622901 +-0.0016926695 +-0.0094515765 +0.004949975 +-0.014136725 +0.00014574791 +0.022192657 +0.00061130937 +-0.022951696 +-0.028286224 +-0.01012597 +-0.00054589886 +0.005079079 +-0.0022470106 +0.0026189282 +0.006799562 +-0.025697548 +0.0040059313 +-0.021758733 +0.005411562 +-0.0047031064 +-0.002142108 +-0.017285045 +0.0029567739 +-0.0023075847 +-0.0011895442 +-0.00063876563 +0.019900898 +-0.0057462645 +-0.012932911 +0.016782384 +0.0032772527 +0.0072098123 +0.004354228 +-0.039968427 +0.02530388 +-6.6280074e-05 +0.080921434 +0.016392484 +-0.0039479462 +0.011804718 +0.020864792 +0.014391341 +0.015689008 +-0.012702317 +0.013140599 +0.0122697195 +-0.0060577197 +-0.013719536 +-0.008336057 +-0.009254942 +-0.0017644041 +-0.017074045 +0.0014228929 +-0.0015154957 +0.010460808 +-0.002793894 +-0.015535336 +0.008124077 +0.024068516 +0.009056743 +0.027989522 +-0.031581756 +-0.017720716 +0.0009628506 +0.02268923 +0.026591482 +-0.009708638 +-0.007958697 +-0.047682524 +-0.004410053 +-0.02945399 +-0.014458429 +-0.003153881 +-0.020047728 +-0.017005146 +-0.025568902 +-0.017646568 +0.022317244 +-0.034880858 +-0.0038865495 +0.0020237982 +-0.008037915 +-0.025271585 +0.006350312 +-0.011584681 +-0.0013588133 +0.022462051 +-0.0058454336 +-0.010520805 +-0.009393917 +-0.012434372 +-0.00065503764 +-0.004247293 +-0.03736948 +0.04123602 +-0.020763071 +0.07333655 +0.013193012 +0.009977362 +0.007874154 +0.012048254 +-0.01606374 +0.021979757 +-0.006968822 +0.011325494 +0.010920687 +-0.012523713 +0.007314889 +-0.0037298033 +-0.011656023 +0.0018107953 +0.008016827 +0.007630859 +0.010026939 +-0.009068993 +-0.009558375 +-0.034821905 +-0.017137557 +0.00093295705 +0.0074259685 +0.008283614 +0.016242582 +0.009897455 +0.00042977033 +-0.008483885 +0.0061061517 +0.004735683 +-0.018007783 +0.052687585 +0.009466689 +-0.013720604 +0.009158354 +-0.032213867 +-0.0034446307 +-0.014769545 +-0.012933143 +-0.005645996 +-0.013787753 +0.011246988 +0.0052059274 +0.014173923 +-3.923695e-06 +-0.017938573 +0.027592365 +-0.002045219 +0.013369787 +0.0012804109 +-0.020237235 +-0.0013894847 +-0.007236289 +-0.0059432266 +0.004774611 +-0.0170038 +-0.006662016 +0.0022714548 +0.006919301 +-0.013923523 +-0.025811942 +0.007640031 +-0.0010032009 +0.03267136 +-0.021549571 +0.012032109 +0.024833364 +0.016106622 +-0.011921382 +0.019942047 +0.025224172 +-0.0010024905 +-0.008594541 +0.0077322605 +0.012479374 +0.015481751 +0.015764812 +0.009257514 +0.019149415 +-0.009034874 +-0.011310024 +-0.017860264 +-0.0064021717 +-0.022630151 +0.005900908 +0.007716261 +-0.03487311 +-0.02374445 +0.013898708 +0.009462387 +-0.011105086 +0.0036059266 +-0.0064458232 +-0.005391679 +0.0023847416 +-0.02945818 +0.013134256 +0.022575814 +0.01181042 +-0.008828265 +-0.016735319 +0.0044577243 +-0.030544471 +0.025239307 +-0.020009167 +0.0046946653 +0.0058417087 +-0.009074323 +-0.025028832 +-0.012102115 +-0.0047444594 +0.020162854 +0.016281001 +-1.2314631e-06 +0.021469196 +-0.006636026 +0.0045202207 +0.0024984058 +-4.0188315e-06 +-0.0018978121 +-0.028088305 +8.207995e-05 +-0.012854103 +0.007461949 +0.033487886 +-0.004223338 +-0.018283848 +0.003246699 +0.0036448825 +-0.0020166487 +-0.019081203 +-0.0320285 +-0.00339818 +-0.018203756 +-0.03102991 +-0.020018848 +0.011592551 +0.0052426774 +-0.014325254 +0.0015410144 +-0.007906928 +-0.005194346 +-0.008351749 +0.0051962784 +-0.0026929125 +-0.009612412 +-0.004155958 +0.02820585 +0.00074209314 +0.013294534 +-0.004582923 +0.013502793 +0.027338453 +0.024193931 +-0.011322553 +-0.035340093 +0.011916912 +0.0083738705 +0.014241417 +0.009366339 +0.019483354 +0.015970614 +-0.009404167 +-0.03142537 +-0.013894296 +0.003466285 +0.025698435 +0.03274312 +0.004896046 +-0.024388973 +0.016417976 +-0.012677623 +0.01435385 +0.0047422587 +-0.0034646324 +-0.011435303 +-0.00097627856 +-0.019098228 +-0.012750425 +0.00038477586 +0.011015766 +0.0035379487 +-0.009805904 +-0.017943362 +-0.011928964 +-0.007341695 +-0.01976512 +-0.009489522 +0.012556543 +-0.00449825 +0.003727099 +0.012974428 +-0.006476592 +0.014668856 +-0.00857403 +-0.013102688 +-0.0067864843 +-0.015175604 +-0.017590953 +0.0100416215 +-0.003601768 +-0.036330957 +0.011122832 +0.0006636075 +0.008191908 +-0.0005969793 +-0.014393407 +0.008901887 +-0.0045956196 +-0.009445185 +0.010338758 +-0.008311657 +0.019746916 +-0.0023041812 +-0.009154483 +0.01083313 +0.011892591 +-0.030804653 +0.0054693194 +0.02681325 +-0.00086858415 +0.024364255 +-0.0074069607 +0.02276393 +0.014845994 +-0.016075354 +0.013207364 +0.0029324098 +-0.025709398 +0.002685987 +0.042022426 +0.021284202 +-0.013084234 +-0.027253361 +-0.019834103 +-0.018276727 +-0.010370586 +0.010270664 +0.003908751 +-0.0028823337 +-0.032208167 +0.025067594 +-0.010993702 +0.014128886 +-0.016603464 +-0.023892252 +-0.012784245 +-0.010066837 +-0.013819072 +0.02335919 +-0.003968978 +0.01920696 +0.004933185 +-0.010708643 +0.0052588303 +0.0019354859 +-0.012367734 +0.004851798 +-0.004236235 +0.006042172 +-0.004128547 +0.005681577 +-0.011028983 +-0.005258893 +0.0073620565 +-0.013633819 +0.00016171424 +-0.0048109773 +-0.022958655 +0.0012597753 +0.013229666 +0.02590576 +-0.0012594924 +0.0054153553 +0.008393759 +0.008623124 +0.01660972 +-0.009081103 +0.0024321396 +0.0048815953 +-0.012539545 +-0.00658563 +0.004608348 +0.029498894 +-0.009306473 +0.037625864 +-0.020816859 +-0.014606354 +0.005727544 +-0.0017082391 +-0.0014763179 +0.016515112 +-0.0040957904 +-0.012164401 +-0.010008413 +-0.0024798638 +0.019843517 +0.013856482 +-0.0024039843 +-0.011235401 +0.03161401 +-0.0064364565 +-0.01660408 +0.016061893 +0.0052058 +-0.007475631 +0.009986407 +-0.009898612 +0.008093775 +0.016812058 +-0.0058590975 +-0.0030277874 +0.007801163 +-0.005204458 +0.0008412828 +-0.016451053 +-0.005702768 +-0.009410363 +-0.018623166 +0.018650157 +0.015481851 +-0.030941408 +-0.0016306873 +0.0012973477 +0.021334974 +0.0057318066 +-0.004752232 +0.010215255 +0.0010820386 +-0.020272683 +0.01846613 +0.012946957 +-0.010831054 +-0.007918798 +-0.01327048 +0.02349717 +0.004042691 +-0.037339732 +0.018458921 +0.012554822 +-0.0071097296 +0.027279465 +-0.012607703 +0.01540698 +0.014746715 +0.019255726 +-0.0032594115 +-0.003903509 +-0.011649174 +-0.0046410067 +0.0120156845 +0.014543388 +-0.02343703 +-0.01958073 +-0.014636808 +-0.015396063 +-0.00026516258 +0.008354604 +0.0005114252 +-0.005841864 +0.006423338 +0.0030317104 +-0.013243971 +0.029486349 +-0.0015223119 +-0.022044374 +-0.00078534504 +-0.012762885 +-0.018263657 +-0.023114175 +-0.038013518 +0.033007447 +-0.0071629933 +-0.008453189 +0.005776821 +-0.005875108 +-0.010070255 +0.031577576 +0.032104593 +-0.016179005 +0.0138797425 +0.0032346433 +0.015104654 +0.013580171 +-0.007918181 +-0.014693318 +0.0072946097 +0.009888158 +0.006190248 +-0.019967008 +0.020557944 +-0.034133837 +0.004420756 +-0.01670393 +-0.014012602 +0.008474665 +-0.01883632 +-0.023158994 +-0.02604299 +-0.015235863 +0.016425025 +0.0011676042 +0.015664013 +0.014678571 +0.009989415 +-0.0050314423 +-0.016115097 +-0.011687168 +0.0056880685 +0.001304197 +0.004631954 +0.011753311 +-0.012371666 +-0.0040057 +-0.010060752 +0.00054733246 +-0.011872567 +0.019745747 +0.0060838377 +0.0014121366 +-0.021548815 +0.0005687049 +0.0028401217 +0.00709123 +-0.0139562925 +-0.0048539196 +-0.0021879147 +-0.0042263255 +0.0050782603 +-0.009260481 +0.011256895 +-0.0045852754 +-0.008038427 +-0.017335089 +0.018427197 +0.0020989666 +0.0072007384 +-0.010332545 +0.029289806 +-0.03412318 +-0.024493938 +-0.0069930274 +0.013853445 +-0.0012424961 +0.0077529904 +-0.018656423 +-0.004772284 +-0.032708604 +0.005941039 +0.00021795092 +0.03283836 +0.02621124 +-0.00068046374 +0.0021882278 +0.018530656 +-0.017817838 +0.015782686 +-0.00056671014 +-0.0029794793 +-0.0024743548 +-0.035472214 +-0.008541447 +-0.01905247 +0.016655112 +-0.0073219966 +0.019818995 +-0.0015906484 +-0.002294455 +-0.011367887 +-0.0076385005 +-0.020108227 +0.037149742 +-0.002782812 +-0.01343935 +-0.015298543 +0.01863487 +0.0026343518 +0.015149774 +0.0008816728 +-0.023742905 +-0.019006286 +0.018663269 +-0.025162969 +0.04295109 +-0.004226456 +0.013100765 +0.022396892 +-0.016646419 +-0.016712697 +-0.028026653 +-0.009987638 +-0.008331733 +-0.007449425 +-0.030776752 +-0.019781845 +-0.030680953 +-0.007444283 +0.018647142 +0.0072620157 +-0.009491045 +0.00698375 +-0.0020208985 +0.00415228 +-0.00962785 +0.04214819 +-0.017588554 +0.0029457395 +-0.0049818335 +0.0063492474 +0.021331577 +-0.0009132917 +0.061547294 +-0.02556029 +-0.012124514 +0.016033169 +-0.031179015 +-0.00011587537 +0.016551493 +-0.014925246 +-0.00907739 +0.00805721 +-0.019844588 +0.011934044 +0.006459065 +0.007938844 +-0.008462286 +-0.0061908024 +-0.0019263144 +-0.026937122 +0.008971274 +-0.019705618 +-0.009392172 +-0.0017079553 +-0.018247569 +0.011985413 +0.014906627 +0.025724577 +-0.00036752532 +0.013436155 +-0.07874845 +0.007712121 +-0.00032405276 +-0.0127580995 +0.012913902 +0.035214916 +0.003584616 +-0.007143417 +-0.0021020658 +-0.010027621 +-0.0024716838 +-0.0033010175 +0.008353171 +-0.0024817393 +-0.0034540538 +-0.006110365 +-0.017998854 +-0.02105125 +-0.032424856 +0.024375133 +-0.022400003 +-0.019404547 +0.016151188 +-0.022544725 +-0.01455541 +0.00059030554 +0.026061181 +0.01034396 +-0.016434869 +-0.036961697 +-0.007128503 +0.014685636 +0.00017298247 +0.012124397 +0.0063264016 +0.028774457 +-0.021788228 +-0.016655196 +0.017388362 +-0.008317594 +-0.020431789 +-0.03351946 +0.009765706 +-0.010304131 +-0.018887205 +-0.02180506 +0.0050611594 +-0.0028852215 +0.021819867 +0.024722127 +-0.014368903 +-0.0030532032 +-0.018717332 +-0.013353643 +0.0038759732 +0.005194726 +-0.010228133 +-0.014371229 +0.014221648 +-0.018208379 +0.017208418 +-0.028077103 +-0.012353295 +-0.000212933 +0.032258164 +-0.032064922 +0.0063977 +0.018639004 +0.0011342664 +0.0075400504 +0.008566782 +0.0048464653 +-0.006076459 +0.010372216 +-0.0025724873 +0.01646736 +-9.094347e-07 +-0.003990833 +-0.024846418 +-0.013117575 +0.008556572 +-0.008806731 +-0.025159152 +-1.1209217e-05 +-0.0120856725 +0.0026449915 +0.004879652 +0.005480921 +0.010115482 +-0.0150522385 +0.018800203 +-0.0073234136 +-0.0010839286 +-0.0022351434 +0.025801212 +-0.025554975 +0.00246317 +0.015588708 +0.015564386 +-0.019917415 +0.01621451 +0.015063666 +-0.0110520655 +0.012521584 +0.023874799 +0.012841493 +0.0033222032 +0.0073553943 +-0.017507318 +-0.006875903 +0.0019752018 +0.009921451 +-0.030544236 +0.00045789318 +0.020208053 +0.0017966514 +0.0055623385 +0.008559373 +0.016779065 +-0.0038119538 +0.0023411394 +0.026250077 +-0.0085834125 +0.010570945 +0.007972028 +0.01190184 +-0.013415566 +-0.0019640292 +-0.0050117588 +0.0011553882 +0.006237939 +-0.012305411 +0.0094738025 +0.0017576852 +0.0031769827 +-0.013065043 +-0.029500125 +0.014040474 +-0.005127069 +-0.032053214 +-0.007822284 +-0.008037849 +-0.0018360544 +-0.010809859 +-0.013287297 +-0.010740577 +-0.003990094 +-0.0009840115 +0.007983106 +-0.0014746189 +0.010573136 +-0.023218147 +0.030825313 +0.023124442 +0.013217625 +-0.02069195 +-0.04098125 +0.022582486 +-0.0074881786 +1.2991637e-05 +-0.0030764 +0.003964741 +-0.0027983186 +0.0023771059 +0.014910928 +0.020096397 +-0.0008789364 +0.028756518 +0.019076584 +0.0045332233 +0.004257874 +-0.0007186499 +-0.019334015 +0.01665767 +0.013294702 +0.009905781 +-0.017275207 +-0.0016441351 +0.011494419 +-0.01113694 +0.0238339 +-0.014644915 +0.010997841 +0.020296808 +0.0076976703 +-0.0020386663 +-0.011539656 +0.009734473 +-0.0053017726 +0.0046347175 +0.009490843 +0.0064952583 +0.01856191 +-0.009362725 +0.005172041 +-0.0011848421 +-0.010320104 +0.010322493 +-0.0045999154 +0.00070420693 +-0.018768009 +0.0064396206 +0.0030226882 +0.0023588734 +-0.008951951 +-0.012417295 +-0.016123766 +-0.014544439 +0.009460438 +0.016095217 +0.012435764 +-0.02757872 +-0.013336111 +-0.0077614067 +0.002287869 +-0.0029144671 +-0.02768938 +0.011328235 +0.014333028 +-0.013867995 +0.013150281 +-0.00022392238 +-0.017494217 +0.0044394955 +-0.00020537002 +0.002682439 +0.010620645 +0.0022865038 +0.0006485108 +0.004064639 +-0.0145195145 +0.0034055908 +0.00915316 +0.004790718 +0.00911405 +-0.015983365 +-0.011367765 +-0.0070472024 +0.045279685 +0.0029467354 +0.015200893 +-0.00209774 +0.01526121 +0.008427454 +0.008888509 +0.025575334 +-0.008978299 +-0.0017963279 +-0.00769497 +0.008503123 +0.019963987 +0.003914688 +-0.006896991 +-0.007840909 +-0.001039942 +-0.019610576 +-0.015925847 +-0.0231118 +-0.004809214 +0.001996891 +-0.01656347 +0.005526198 +0.004757433 +0.0061129197 +0.013518603 +-0.01624919 +-0.002404418 +0.024047578 +0.012584152 +0.019182846 +-0.008071989 +-0.009928693 +-0.023214357 +-0.012677324 +0.029041797 +0.0061253207 +0.006438207 +-0.006644847 +0.0029235564 +0.007163112 +-0.022842115 +0.0030748346 +-0.008051666 +-0.0066808434 +-0.009344469 +0.010235671 +-0.00953286 +-0.0030558258 +-0.009489815 +0.00652389 +0.0018893498 +0.0070246877 +-0.036822226 +0.008735454 +-0.0015183128 +0.024227725 +0.0017058377 +-0.0028886432 +0.04625687 +-0.006388404 +0.04067643 +-0.021941658 +0.0025364286 +0.0064009842 +-0.0024209612 +0.0006840433 +-0.0024446205 +-0.012035962 +0.015314295 +0.010763815 +-0.0045972536 +0.009064623 +0.0022075174 +0.0026663665 +0.0015024828 +0.0052279267 +6.749669e-05 +0.001555474 +0.020044042 +-0.0038903628 +-0.013868239 +-0.019175706 +0.011448149 +0.011754501 +-0.009549687 +-0.0077885133 +0.0009673101 +0.0060700453 +-0.0007077392 +0.018054314 +0.024049869 +-0.008874167 +0.019898936 +-0.0060590277 +-0.027090782 +0.02293407 +-0.030653117 +-0.0040963306 +0.007190007 +-0.016862845 +-0.011750027 +-0.028582988 +0.024131434 +-0.012999652 +0.007734086 +0.0058665485 +0.019993179 +0.017695876 +-0.013975537 +0.009078231 +-0.004454014 +-0.037212916 +-0.005690032 +-0.016084403 +-0.020756587 +-0.003736027 +-0.019341184 +0.002590922 +-0.0024027387 +-0.0056508924 +0.0022475175 +-0.041284002 +0.0054241046 +0.0072844215 +0.008893796 +-0.012905672 +-0.007162405 +0.013288933 +0.017327067 +-0.01444031 +0.012965586 +-0.012755634 +-0.00022555454 +-0.0038346176 +-0.015884915 +-0.001234266 +0.022879686 +-0.0006416233 +-0.03478625 +0.027450407 +0.011162835 +-0.019923639 +-0.00395554 +0.012183721 +-0.017194368 +-0.00050997734 +0.00202469 +-0.032942317 +0.0041056997 +-0.0015640758 +0.01856779 +-0.01166049 +0.011166001 +-0.0007218696 +-0.016331652 +-0.006405377 +0.0003303665 +0.019515963 +0.014138857 +0.011870538 +-0.027931292 +-0.00039698297 +0.009951963 +-0.0012164252 +0.020966643 +-0.0012069368 +-0.022719013 +0.021133726 +-0.015126287 +-0.015274961 +-0.011211897 +-0.0033323558 +0.008427336 +-0.021420605 +0.017634088 +-0.0034026473 +0.0010900522 +-0.0069820983 +-0.0010990724 +-0.00959904 +-0.019693052 +-0.018561728 +-0.006895592 +0.0024107157 +0.016666876 +0.030266495 +-0.030422712 +-0.009136497 +-0.002615094 +0.023822647 +0.03109408 +-0.028846398 +-0.0033261746 +-0.0024319266 +-0.016042963 +-0.01292678 +-0.01903555 +-0.018552653 +-0.026122985 +-0.0034078616 +0.018471917 +-0.0141506335 +0.017413167 +0.021690814 +0.003920587 +0.01072657 +-0.015939113 +-0.00063641195 +-0.02348345 +-0.009541415 +0.018835006 +-0.008866417 +0.012699121 +-0.00041723205 +-0.020436337 +0.030113777 +-0.002585735 +0.0071671875 +0.011266454 +-0.021852825 +0.00326823 +0.01793044 +0.014068753 +0.03255162 +-0.0030617504 +0.015508302 +-0.021732183 +0.0024826548 +-0.0055196146 +-0.020647414 +0.006576176 +-0.00090697326 +-0.017689202 +-0.020178849 +-0.007336079 +0.022803191 +-0.006968244 +0.003494527 +0.0033711905 +0.006516634 +0.015995488 +-0.002478302 +0.024157643 +-0.004663456 +0.013917011 +-0.00427054 +-0.0058675553 +-0.00023138795 +-0.015304052 +0.011581987 +-0.0054676686 +-0.018995872 +-0.003757254 +0.0070376387 +-0.014248538 +0.0057949848 +0.014539214 +-0.004447596 +0.015108056 +0.0031196761 +0.030423691 +0.002879001 +0.007935307 +-0.013103423 +-0.023286032 +-0.0029482227 +0.015111994 +-0.017457144 +0.008302194 +-0.008264355 +-0.010748779 +0.02204519 +-0.0044131554 +-0.0055897627 +-0.008627861 +-0.0075607835 +0.028195888 +0.009235762 +-0.0041996376 +0.0011839694 +0.01795377 +0.0044613616 +0.014478393 +-0.009282214 +0.008211383 +0.0031407676 +-0.023084415 +0.008918345 +-0.009628543 +-0.011640167 +0.008776785 +0.0115706185 +-0.027553711 +-0.00673212 +-0.012105735 +0.00088114373 +0.011238795 +-0.00976579 +-0.0095620705 +0.005359404 +-0.0051510325 +0.0025370251 +0.0128540415 +-0.0042418125 +-0.0019364944 +0.0048302175 +-0.022353986 +-0.00018033873 +-0.01604297 +-0.013566295 +-0.0052419663 +0.005939168 +0.01505871 +0.00081206963 +0.0032373397 +0.021490797 +0.003080949 +-0.0077064033 +0.0099363895 +-0.008871182 +0.01640154 +0.017775321 +-0.013593443 +-0.0020570823 +-0.014236392 +0.017346164 +-0.019881021 +0.017121825 +0.009164 +0.0093661565 +-0.025184551 +-0.0066246917 +0.034253955 +-0.0037342026 +-0.011697096 +0.013133979 +0.004326274 +0.014572348 +0.0061998526 +-0.01163065 +0.03415107 +-0.015897777 +-0.019451989 +-0.007682384 +-0.0015089512 +-0.00971716 +0.008695675 +0.028414533 +-0.026181227 +0.025420973 +-0.010914227 +0.023873657 +-0.0007815044 +0.005297917 +0.010412386 +-0.007580118 +-0.0033560472 +-0.004119079 +0.04220016 +0.006094851 +-0.01200695 +0.031700574 +-0.009733597 +-0.005358092 +-0.005231445 +0.0020848217 +-0.013946012 +-0.018154645 +0.0011560656 +-0.012292169 +-0.026507283 +-0.0242224 +-0.004886972 +-0.0024228524 +0.016236873 +-0.030205658 +0.0035859263 +0.02030421 +-0.02586817 +-0.01910706 +0.022638792 +0.0041585416 +-0.013255437 +-0.0059178043 +0.0138346115 +0.027709717 +0.025458103 +0.01930279 +-0.0065648276 +-0.041974086 +-0.01768268 +0.015297767 +0.0031604252 +-0.009979773 +-0.015887968 +-0.0077327252 +0.00889805 +-0.0151245 +-0.02707668 +0.001164581 +0.02322215 +0.0005441947 +0.005300603 +0.0025783202 +-0.00017999038 +0.0048106737 +-0.0071527823 +-0.015732313 +-0.014220106 +-0.0054972456 +0.0034716406 +-0.0035691664 +-0.023273515 +-0.017864345 +0.011442243 +-0.010913754 +0.010567352 +-0.014962925 +0.0070853485 +-0.005936064 +-0.012987227 +0.010411224 +-0.0116145685 +-0.011980609 +0.024023358 +-0.012692637 +-0.017501611 +0.0053733047 +-0.02964567 +-0.020792004 +-0.018775878 +0.0023556848 +0.015074968 +-0.014779997 +-0.0018744696 +0.0067007313 +-0.011039131 +0.002985012 +0.028533855 +-0.019800609 +0.0025449775 +0.011082117 +0.008398934 +0.0016127181 +0.002385153 +0.00073502713 +0.003156048 +0.012767135 +0.008683836 +0.0069325664 +-0.039773848 +0.016719323 +-0.022799326 +-0.01760326 +0.006545557 +0.009307475 +0.03843488 +-0.0032289284 +-0.018383361 +0.013353942 +-0.0030429077 +-0.011485469 +-0.009141558 +-0.0041368967 +-0.011581735 +0.012231977 +-0.0064049554 +-0.020513622 +0.012815682 +0.003043064 +0.014349772 +-0.04848603 +-0.0010245601 +-0.0018278677 +-0.009163959 +0.017427905 +-0.014384687 +0.00022676749 +0.011348438 +-0.0024359508 +-0.0057290946 +0.012803409 +-0.008464579 +0.0032034435 +0.0012512731 +-0.0003649189 +-0.011403807 +0.010622059 +-0.0061168857 +-0.03774235 +-0.032450743 +0.0074201757 +0.031381734 +-0.010418522 +-0.021360332 +0.041567054 +0.034349367 +0.008582782 +-0.01881379 +0.003542937 +-0.027316969 +0.00030644488 +-0.0066346345 +-0.00891417 +-0.035745997 +0.028791834 +0.0053554876 +-0.032940924 +0.0033530747 +0.029575946 +0.010034679 +-0.0040490846 +0.009279367 +-0.011571545 +-0.0074841613 +0.005138762 +-0.0138116535 +-0.009927647 +0.008532335 +-0.019923225 +-0.0034459452 +-0.041782092 +-0.005867922 +0.0013374453 +0.02191184 +-0.0025641716 +0.021602033 +0.009524021 +-0.0053091627 +-0.01138994 +-0.012633232 +-0.031150071 +0.027666647 +-0.023193276 +-0.009736736 +0.0009184291 +-0.0048412844 +0.013841341 +0.0035085792 +0.01460775 +-0.014560072 +-0.0006081225 +0.010226101 +-0.006560232 +0.014910129 +0.018159617 +-0.0376469 +-0.01303223 +0.0033492506 +-0.02570867 +-0.008139732 +-0.023190664 +-0.038074937 +-0.013679301 +-0.0018257236 +-0.02139706 +-0.015368007 +0.008975659 +0.012931745 +-0.008782489 +0.019776464 +0.00384507 +-0.02079505 +-0.0030716143 +-0.0010128462 +0.010491337 +0.007075062 +0.005970253 +-0.0058387616 +-0.024264744 +-0.02639601 +-0.012721509 +0.08173626 +-0.010348474 +-0.0049228095 +0.009225485 +-0.012127476 +0.017875519 +0.013956156 +0.00809672 +0.009945052 +-0.005749666 +-0.018999692 +-0.0030044292 +-0.0017951815 +0.002085236 +-0.011840982 +0.02172395 +-0.00074871455 +-0.019769346 +0.0059723607 +0.00043008887 +-0.0037400809 +0.0039392444 +0.011847288 +0.016016506 +-0.010792475 +-0.0006616633 +-0.018403057 +-0.00843782 +-0.016823877 +0.026529571 +0.0054528913 +-0.01629342 +0.026796822 +0.022706581 +-0.0071307584 +-0.0010376383 +-0.0009660684 +0.0008598457 +-0.0050708493 +0.008436708 +-0.00907979 +-0.004342461 +-0.015757218 +-0.0064636916 +-0.0033612016 +-0.011500844 +0.024666738 +-0.0023496249 +-0.009214227 +-0.018117338 +-0.04283124 +-0.0015103989 +-0.0052709747 +0.026137987 +-0.01990918 +0.019152382 +0.024392882 +-0.0014600612 +0.007957712 +0.0041986974 +0.005497237 +-0.018162994 +-0.014094411 +-0.00035023424 +-0.037047185 +-0.0011017265 +-0.016941674 +0.01621503 +0.007862909 +-0.024875358 +0.016652653 +-0.0093269525 +3.061459e-05 +-0.010475927 +0.043681987 +-0.023257403 +-0.0033028831 +0.029138913 +0.00625259 +-0.010352429 +0.033143334 +-0.025743775 +0.036805835 +-0.019662222 +-0.022632139 +-0.0056316094 +0.032298744 +-0.00043065613 +-0.0075678714 +-0.004927511 +-0.0093366075 +-0.038652383 +-0.002747711 +0.005423632 +-0.015910715 +0.006168303 +0.031667385 +-0.021711152 +-0.018411962 +0.01259728 +-0.021841664 +-0.018574616 +-0.019104857 +-0.0016552412 +-2.2842005e-05 +-0.03194879 +-0.01336877 +0.0038009689 +-0.019410642 +-0.009916952 +-0.00058811635 +0.053168304 +-0.009433902 +0.007986797 +-0.0043778005 +0.018482776 +0.008084488 +-0.051909767 +0.013772432 +-0.015547071 +-0.02866678 +-0.014016974 +0.025037408 +0.01088402 +-0.014595271 +0.0033737896 +-0.024593232 +-0.009767378 +0.03787758 +0.03786973 +-0.0028954453 +-0.0193747 +0.012352677 +-0.007280459 +0.0015763531 +-0.03115852 +-0.010644017 +0.014301874 +0.010538506 +0.019246297 +-0.004320538 +-0.035828624 +0.0023888208 +0.0039257687 +-0.01175842 +-0.00096529594 +0.04157756 +-0.015171684 +0.011121314 +0.0077665113 +-0.043951638 +0.00032719335 +0.007221956 +0.031191235 +-0.030196236 +0.01462258 +0.007599053 +-0.0016660992 +-0.0014017883 +0.008937646 +0.006604688 +-0.020975675 +0.013097189 +0.010071769 +-0.0122883655 +0.019369945 +-0.021650683 +-0.01823066 +-0.013186303 +-0.023559537 +-0.007183648 +0.035053074 +-0.014958984 +-0.00017948559 +-0.0044475086 +-0.012983706 +-0.010449388 +-0.03269748 +0.012835529 +-0.0043575233 +0.026236715 +0.016638037 +0.0013147161 +0.014969248 +-0.027585356 +0.021051025 +0.00030430141 +-0.0021418969 +-0.020508999 +0.0056070727 +0.017872745 +-0.0057269796 +0.020406542 +-0.0032440166 +-0.004308156 +0.030283015 +0.030662928 +-0.018560382 +-0.0061048907 +-0.0124207195 +-0.011410484 +0.013925851 +-0.0005061243 +0.02341343 +0.008318164 +0.012906011 +0.037773907 +-0.00042411522 +-0.010842358 +0.014783479 +0.0070954966 +0.0015252582 +-0.0028099397 +0.0029785337 +-0.022012156 +0.0059362496 +-0.017406274 +-0.035786767 +-5.3867196e-05 +-0.021642648 +-0.0014652569 +-0.014694564 +-0.002288781 +-0.021540266 +0.0147122 +0.035062015 +-0.013403123 +-0.012478141 +-0.02163826 +-0.01157902 +-0.045027234 +0.03461419 +-0.020131495 +-0.0114460215 +-0.017599875 +-0.022496767 +0.009992344 +0.018920762 +0.0017430227 +0.015693916 +-0.0047852225 +-0.0005547389 +-0.024707396 +-0.00843138 +0.024030194 +0.023026811 +-0.0077071385 +-0.02052937 +0.01545213 +-0.009634278 +-0.0062982654 +-0.0142785115 +0.0036326977 +0.00015172048 +-0.026666047 +0.022909189 +-0.0033524856 +-0.02207692 +-0.021553727 +-0.012657634 +-0.005671855 +-0.006775889 +-0.010041303 +0.0075982222 +0.008553439 +0.019147724 +0.027823023 +-0.0008396453 +-0.0010520284 +-0.0059142928 +0.014474658 +-0.00018818726 +-0.022926778 +0.015824584 +-0.049720522 +-0.026326325 +0.007567313 +-0.018203782 +0.00488451 +0.010002217 +0.0061534797 +-0.0148308715 +0.005970568 +-0.010682156 +-0.022603141 +0.0043304632 +-0.010725558 +0.005530325 +-0.003916118 +0.0010795798 +-0.0040874677 +-0.015421802 +0.0076507246 +0.0007777457 +0.014187707 +0.031445704 +0.0070867175 +-0.0014724277 +0.021941815 +-0.012559269 +-0.026847165 +-0.0033804695 +0.011852665 +-0.0070567825 +-0.01955427 +-0.018594928 +0.009026199 +0.015600164 +-0.029137455 +0.026538208 +0.004448861 +0.001660564 +0.0030521418 +0.022488853 +0.010433589 +-0.006094318 +0.02105796 +0.00403164 +-0.0069637056 +-0.004017902 +0.0006825963 +0.016751584 +0.0009000102 +-0.0028506871 +-0.0044492255 +0.00023152473 +0.028407188 +9.35176e-05 +0.0042676483 +-0.022019807 +0.0045551565 +-0.003745662 +-0.0068502035 +-0.019624494 +0.01695131 +0.01614079 +0.00649249 +-0.0012212892 +-0.003424527 +-0.013854591 +-0.004825233 +-0.002912887 +0.027300026 +-0.007366623 +-0.015075953 +0.014257462 +0.032241832 +0.0014359086 +0.0067552924 +0.0095742745 +0.0017117803 +-0.023725579 +0.0020851 +0.03003122 +0.016334618 +0.013879011 +-0.008891184 +-0.0008860223 +-0.0042174743 +-0.008190051 +0.021772847 +0.014301134 +-0.022317244 +-0.0060617123 +0.013074494 +0.0027776475 +-0.005043484 +-0.013532305 +-0.020090742 +-0.058946982 +0.013450408 +-0.0011619298 +0.005451857 +0.010556212 +0.021386057 +-0.015327649 +-0.011404706 +0.02766229 +-0.009533496 +-0.03522522 +0.024028452 +-0.01854982 +0.0007428127 +0.025826804 +0.0014051084 +-0.012570156 +-0.005150675 +0.0145900715 +0.0108146975 +-0.026427053 +0.026365323 +-0.01275451 +0.02338592 +-0.032148056 +-0.021616181 +0.0049673184 +0.027854819 +-0.04010248 +-0.026691506 +0.0009165232 +0.012054538 +-0.021298897 +-0.033281706 +-0.00074743805 +-0.0031342732 +-0.022822816 +-0.039922234 +-0.026303755 +0.0084997 +-0.021392081 +-0.03184773 +0.030102216 +-0.032884624 +0.006821058 +-0.024071325 +0.0054865014 +0.022686493 +-0.016672594 +0.0090795485 +0.00045298447 +-0.012546957 +0.009061033 +-0.0005626033 +-0.021178469 +0.008449855 +0.040959142 +-0.0017328551 +-0.015193143 +0.00085843477 +-0.028705869 +-0.026163 +-0.0033639504 +0.02558041 +-0.009552816 +-0.028350072 +0.0075834133 +-0.016899262 +0.0029880926 +-7.76301e-05 +-0.00024035337 +-0.010767715 +-0.045033775 +0.010940739 +0.005355232 +0.0052920044 +-0.006983081 +-0.0022192786 +-0.010651454 +0.0153 +-0.0041043996 +-0.009898656 +0.012651741 +-0.0038377424 +0.014665194 +-0.07645789 +0.004311755 +0.005912445 +-0.029851811 +0.017202178 +0.009476347 +0.015292029 +-0.0037650303 +-0.010427702 +0.0065715914 +-0.035599407 +-0.016770266 +0.0033280426 +0.0022824497 +-0.0046821223 +0.019657882 +0.011680803 +-0.022254292 +0.022787225 +0.007900627 +-0.0069638877 +0.0033381807 +-0.021127176 +0.0169261 +-0.004005534 +-0.00085304776 +0.020956172 +-0.015336617 +-0.01388686 +0.028957415 +0.009263355 +0.013930483 +0.036417782 +-0.025965163 +-0.0009138378 +-0.0031320634 +-0.017863262 +0.008336153 +-0.024140785 +0.0062598987 +-0.013181875 +-0.0192168 +-0.015058957 +-0.01867193 +-0.009939222 +-0.028867034 +-0.0039705923 +-0.032839555 +0.015949883 +0.042515416 +0.01776968 +0.017211366 +-0.007005746 +0.0009690566 +0.007996188 +0.024909416 +0.0027494745 +0.0010196201 +-0.00010991302 +-0.011594528 +-0.01894761 +-0.0012007327 +0.009771806 +-0.018608881 +-0.030725054 +0.005485817 +-0.017743686 +0.00091954187 +-0.028615156 +0.03293031 +0.03158279 +-0.011489691 +-0.0018832603 +-0.005106739 +0.017464405 +-0.01373563 +0.029160738 +-0.011163174 +-0.014578939 +-0.002677214 +0.009196782 +-2.7406968e-05 +-0.008568928 +-0.00530805 +-0.0173949 +0.01950214 +-0.007328535 +0.0013326181 +0.032701097 +0.013309043 +0.017771665 +0.011833792 +0.012433904 +0.009337121 +0.037360273 +-0.0024216042 +-0.032167226 +-0.025705213 +0.0011971454 +-0.010911738 +-0.024080161 +0.006292748 +-0.0090786135 +-0.010746981 +0.01090652 +-0.0024889614 +-0.015979385 +0.0075676576 +-0.027880317 +-0.00045239838 +0.007553182 +-0.010123535 +-0.008851082 +-0.008568752 +0.011011333 +-0.0036678517 +0.0027681594 +-0.0028218338 +0.016918333 +0.027951598 +0.011911384 +0.01487063 +-0.020640234 +-0.0175743 +-0.04076473 +0.0073270802 +0.0010254664 +-0.004161983 +-0.01497868 +0.009090427 +0.014383244 +0.030534374 +0.014303746 +-0.00999821 +-0.0036714447 +0.009074735 +-0.0047267815 +0.0069205463 +-0.009858225 +-0.0068993773 +-0.012969107 +0.0016255663 +-0.007447855 +0.03157264 +-0.017341487 +0.009237846 +-0.0017112572 +-0.024372125 +-0.022790287 +-0.0051507237 +0.0061154612 +0.011954399 +-0.0061225407 +-0.011288973 +0.0027038348 +-0.020948723 +-0.015265005 +-0.005981765 +0.01054895 +-0.0069877813 +0.017168723 +0.03091306 +-0.009008051 +0.0014827148 +-0.0053322823 +-0.017667139 +-0.012916869 +0.016818719 +-0.02745827 +-0.011780913 +-0.013478379 +-0.011899186 +0.020335853 +0.0014502178 +0.011643558 +0.03025164 +0.027064785 +-0.0044206944 +0.010850651 +0.0025592295 +-0.024654018 +-0.011237697 +0.00213404 +0.010222593 +-0.03462622 +-0.028478282 +0.00791438 +-0.017421046 +0.010761033 +-0.021805968 +-0.009292484 +0.008715485 +-0.017746838 +0.0025511645 +0.007597792 +-0.005147593 +-0.0016324505 +0.012140119 +0.019338265 +-0.0138403 +0.017791951 +0.026653944 +-0.051727105 +-0.06791081 +-0.01577961 +0.0199562 +0.005299151 +-0.011354964 +-0.008400659 +0.01761531 +0.0052192123 +-0.025947679 +-0.03230598 +0.01437415 +0.0055416524 +0.008696344 +0.008848567 +-0.04696261 +-0.023576653 +-0.025484644 +-0.014457684 +-0.024455253 +0.016433964 +0.0021670526 +0.01883474 +-0.0006739518 +0.021792712 +-0.003754468 +5.303049e-06 +-0.026638674 +0.019238207 +-0.010491347 +-0.006803476 +-0.0055987868 +-0.0055451514 +0.026044996 +-0.035159554 +-0.0063359244 +0.017915938 +0.007993153 +0.0033370596 +0.008442682 +-0.027369965 +-0.011608767 +-0.030749906 +0.007568341 +-0.017801551 +-0.012993285 +0.0023372548 +-0.0022039015 +0.017717335 +-0.02167366 +0.016455255 +0.0024077669 +-0.0125218965 +0.030848466 +0.0008602155 +-0.035929345 +-0.015997099 +0.0046101287 +0.010679093 +0.03279752 +-0.010612758 +0.014904228 +-0.016495163 +-0.0017671067 +-0.010329313 +0.0060498943 +0.009701387 +0.026333563 +-0.037840717 +-0.019524321 +-0.013536002 +0.01639285 +-0.011240317 +0.0047450373 +0.0048748613 +0.0001931514 +0.015914537 +-0.0045530354 +0.014143633 +-0.021918252 +0.018866433 +-0.012700761 +-0.015097324 +-0.012814821 +0.0031451334 +0.008812441 +-0.011301721 +0.0022761729 +-0.009921706 +0.0012845107 +0.013715643 +-0.018865077 +-0.007986175 +-0.013899311 +0.014404198 +-0.0021416626 +0.011229598 +0.006093627 +0.022181522 +0.026894124 +-0.023093875 +-0.003860398 +-0.056936916 +0.005328658 +0.0006659836 +0.011599812 +-0.00647622 +0.0138178775 +-0.012169121 +-0.0002975818 +-0.021244297 +0.004630113 +-0.0024151343 +0.014597526 +0.00047116796 +-0.0015456585 +-0.026564611 +-0.00022084861 +0.0072858054 +-0.032034826 +0.020983713 +0.026170915 +0.007961539 +-0.020247197 +0.013132537 +0.003774123 +-0.033369955 +-0.017759087 +0.011166746 +0.019393453 +0.021082431 +-0.018876249 +0.011571612 +-0.039582986 +-0.001556403 +0.017907297 +0.0063396995 +0.014917549 +-0.01518738 +0.014649449 +-0.018967267 +-0.0071885213 +-0.018845871 +-0.0047491845 +-0.002522751 +-0.012095914 +-0.005512815 +0.00813493 +-0.00097589346 +0.011030679 +-0.0058904295 +0.016620088 +-0.009011599 +-0.0207714 +0.03414957 +0.006975321 +0.010568106 +0.017262189 +-0.06641062 +-0.01986282 +-0.021615552 +0.00048945245 +0.019344969 +-0.024307385 +0.0048998515 +-0.015620512 +-0.029142099 +-0.036384724 +-0.012528843 +-0.01992578 +-0.0126337055 +-0.024930606 +0.012747089 +-0.010000003 +0.006947845 +-0.0064410274 +0.004985508 +0.005854829 +-0.00069293525 +0.0071477685 +-0.027603326 +-0.034348845 +-0.014832504 +-0.01667282 +0.06486946 +0.0065548033 +-0.0013739114 +-0.0054021673 +-0.004416162 +0.014267476 +-0.0020632285 +-0.0066978303 +0.013283359 +0.02001974 +0.012105849 +-0.020335905 +0.024662234 +-0.009107293 +-0.014986338 +0.010665999 +0.0017737437 +-0.002652347 +0.014207412 +0.009827145 +0.0037713444 +0.013201292 +-0.008558687 +-0.024545144 +0.009513578 +-0.011206637 +-0.028337162 +-0.00989119 +0.0058637136 +0.0072870166 +0.005224781 +-0.010748774 +0.033151664 +0.007834451 +0.0018941534 +-0.006156631 +-0.0125939185 +0.011800463 +0.0136940405 +-0.0027096178 +0.0058733933 +-0.02078724 +-0.017237416 +-0.005381 +-0.017138522 +0.018166626 +0.020006148 +0.004698947 +-0.0118234055 +0.007226072 +0.01641238 +-0.014623867 +0.0023177369 +-0.0004798122 +-0.003582512 +-0.010375952 +-0.0116950385 +0.02949975 +-0.023648938 +-0.016561337 +0.023878792 +0.0021293433 +-0.02596646 +-0.030029677 +0.0009958821 +-0.037792392 +-0.028847924 +0.003209341 +-0.008667961 +-0.048566632 +0.005257663 +0.032720424 +0.0023035828 +-0.00767494 +0.027153226 +0.014936243 +-0.0011035297 +0.02277367 +-0.027736427 +-0.022435071 +-0.002353713 +0.018026428 +-0.02026719 +-0.012990168 +-0.0058331657 +0.018431462 +0.02109431 +0.020213723 +0.02180297 +0.0129456 +0.010144197 +0.0066545988 +0.021529544 +-0.0025409586 +-0.040444754 +0.017801689 +0.003563975 +0.003427251 +-0.032353424 +-0.004804423 +0.007817678 +-0.0042764465 +0.0110327285 +-0.031127578 +0.024809955 +0.05004822 +0.025688209 +0.018272439 +-0.018258687 +-0.022034258 +-0.0016177593 +0.094564 +-0.0068993135 +0.02278865 +-0.019883873 +-0.001436929 +-0.030600008 +-0.026877977 +-0.0006349475 +0.0009135971 +-0.004871322 +-0.009582003 +-0.011904822 +0.014992051 +-0.036385775 +0.0011708637 +-0.015520305 +-0.030603917 +0.028124722 +0.031853657 +-0.013334925 +-0.016748896 +-0.0047322903 +-0.003753222 +-0.0019598333 +-0.016482472 +0.018114265 +-0.0102850385 +0.0065742754 +0.02021626 +-0.0034836964 +-0.025430812 +-0.008282154 +0.0029253734 +0.006944254 +-0.0008234108 +0.044640124 +-0.010528394 +-0.0100087905 +-0.008542695 +0.013653127 +-0.017112354 +0.011990861 +0.008083285 +0.0021670465 +0.013781927 +-0.0059496243 +-0.031283192 +-0.032804217 +-0.003992311 +0.0028654565 +-0.011249703 +-0.019978812 +0.0050537884 +0.010447667 +-0.038924634 +0.011219497 +-0.0143933445 +-0.019127056 +0.031187557 +0.005641595 +-0.041549027 +-0.022074651 +0.013374366 +0.0063821343 +0.01415215 +0.0011158581 +0.021683497 +0.038830046 +-0.01375914 +-0.010346542 +0.0064379806 +-0.01688766 +0.002378582 +-0.015760347 +0.017218465 +0.012910825 +-0.03291051 +-0.02049067 +-0.041199967 +-0.012103005 +0.021726118 +0.014269363 +0.009949415 +0.0035765094 +-0.0402366 +-0.017684555 +-0.01555159 +0.007652988 +0.012697272 +0.027855678 +-0.005311315 +0.005838759 +0.034132678 +-0.01285149 +-0.009720671 +0.024113936 +0.0058584497 +-0.0019183907 +0.0066288426 +0.046648536 +0.004872332 +0.020779535 +-0.028332435 +0.014371842 +0.003118022 +0.0013707259 +-0.020359697 +-0.00043985536 +-0.04956831 +0.009123392 +0.013132786 +-0.045088246 +-0.015608637 +-0.0056705894 +0.012295549 +-0.010363704 +-0.017128568 +0.0014224801 +0.0044883224 +0.010828775 +0.0189506 +9.193904e-05 +0.014672203 +-0.0021482958 +0.0039423117 +-0.025999798 +0.0049947095 +-0.01600338 +0.023869125 +-0.005591638 +0.040204912 +-0.015812099 +-0.011194527 +0.03950735 +0.003576163 +0.001762119 +0.027852934 +0.025972702 +0.00045929075 +-0.039873704 +-0.015588694 +0.004010048 +-0.0317708 +-0.023010185 +0.030156778 +-0.019597352 +-0.021099197 +-0.011334265 +0.02416999 +0.0033535198 +0.00054438645 +0.024571024 +-0.015446113 +0.006229033 +-0.00069340324 +-0.012988857 +0.012897179 +-0.009583097 +-0.003055573 +0.0019711214 +0.00075905106 +-0.028813854 +0.02326244 +0.016552899 +-0.011700379 +-0.0044808122 +-0.038903695 +-0.047837984 +0.036921903 +0.001132301 +-0.012071064 +0.0026846488 +0.0029414508 +0.0057714134 +-0.018424446 +-0.028294157 +-0.0064534293 +-0.0010849796 +-0.004785968 +-0.011387687 +0.009707218 +-0.0023016327 +-0.012141095 +-0.019371292 +0.018117357 +-0.0122649595 +-0.02956993 +0.01768176 +-0.01999294 +-0.012953173 +-0.004943228 +0.012391585 +-0.012785593 +-0.01955776 +-0.009266034 +-0.014575068 +-0.013349864 +-0.00027082587 +0.026726216 +0.0317219 +-0.0348329 +0.018755976 +-0.0079554375 +0.030501308 +-0.0042231097 +0.005625009 +-0.0020850785 +-0.0024838494 +0.014664552 +0.007517962 +-0.0010771011 +0.011953332 +-0.017422104 +-0.013769011 +0.0015735142 +0.04832465 +0.01791133 +-0.028022932 +-0.024564052 +-0.009736288 +0.0007584576 +0.0027839742 +0.0031392118 +-0.010874909 +0.0019049983 +0.02051188 +-0.002355765 +0.028133739 +-0.030983176 +-0.0025600737 +-0.015295302 +0.036210347 +-0.019587701 +-0.010972253 +0.008764572 +0.05998139 +-0.016885571 +-0.02860979 +0.017149 +-0.016986929 +-0.03905707 +-0.013840777 +0.019762402 +-0.0054538287 +0.018050004 +0.041583095 +0.0009999406 +-0.016949436 +-0.0152121 +0.014819057 +0.0029269531 +-0.0011647153 +-0.019862402 +0.0057596075 +0.005527794 +-0.0043908805 +-0.013071794 +-0.040336274 +-0.07510196 +0.026129745 +0.017046427 +0.015427739 +0.020133788 +0.01317673 +-0.012894164 +0.0023250668 +0.00939849 +-0.0062641893 +-0.018252788 +0.025321035 +-0.009620436 +0.017353684 +0.025759948 +-0.018598167 +0.0028810801 +0.016131395 +0.020239111 +-0.0031771678 +-0.011016882 +0.016399248 +-0.0053857616 +0.026636591 +0.0009094062 +-0.0198075 +0.011752763 +-0.00037656818 +-0.044010162 +-0.027277894 +-0.012253426 +0.010995836 +-0.008626726 +-0.026644913 +-0.029997982 +-0.010186545 +0.003791554 +-0.010363111 +0.009682536 +0.001789177 +-0.0154664535 +-0.015710525 +0.04960754 +-0.002711855 +-0.0036249417 +-0.034012426 +-0.008863325 +-0.03650517 +-0.021710841 +0.006280694 +0.0062217573 +0.009919622 +-0.009154326 +0.010331064 +-0.0086011775 +-0.000705435 +0.019806826 +-0.031661898 +0.016080879 +0.008141843 +-0.021479493 +-0.027112825 +-0.029451912 +0.0055207238 +-0.024277112 +-0.010407674 +-0.021410422 +-0.0039072144 +0.0073882733 +0.0071504223 +0.029711021 +0.0028509153 +-0.045427214 +0.028770423 +-0.021031566 +-0.0016756388 +-0.019793719 +0.026590548 +-0.0074417647 +0.0061586513 +-0.003998452 +-0.009952613 +0.0032735977 +-0.00068830873 +0.0024011987 +-0.0014992097 +0.008937614 +0.011247419 +-0.05149253 +-0.024812328 +0.064564854 +0.018539065 +0.019786596 +-0.026021158 +0.028002597 +-0.012697188 +-0.09392624 +-0.015959905 +-0.0059416634 +-0.013345433 +0.038141295 +0.0056190877 +-0.07036838 +0.029070746 +0.0013884283 +-0.0060631805 +0.0147985425 +-0.0036000034 +0.028658131 +0.012144576 +0.0018419613 +0.0061203465 +-0.0056258272 +-0.004462969 +0.041931685 +-0.0012875434 +0.01566753 +0.014976806 +-0.015872262 +-0.03979542 +-0.010060229 +0.012905947 +0.019409679 +-0.017668841 +0.028824963 +-0.0018254021 +-0.0065303794 +0.0041921604 +0.0011325345 +-0.002469404 +-0.0103323385 +0.007493112 +-0.0048032263 +0.017251723 +0.0032297547 +-0.005821022 +0.0012206561 +0.002022942 +0.012567626 +0.013827252 +0.026500609 +0.012211628 +0.011961977 +0.013858452 +-0.008092894 +0.034368422 +-0.016218567 +0.019509366 +-0.006013344 +-0.0007200352 +0.0026428476 +-0.007835322 +0.0065062228 +-0.007394161 +-0.008119229 +0.0061501325 +-0.032954857 +0.0024929743 +0.011366825 +-0.029692255 +-0.005478413 +0.0053502363 +-0.02381096 +-0.017049832 +-0.0035223116 +0.014583782 +0.00069309835 +0.0013127397 +-0.020274388 +0.028492501 +0.012880729 +0.008326293 +0.004149933 +0.011464738 +0.010508227 +-0.016713936 +-0.01340313 +-0.0034527688 +0.020915667 +-0.012787175 +0.026335476 +0.016479976 +0.0059976075 +0.014718687 +0.015710842 +0.005946716 +-0.011130184 +0.011592131 +-0.0021478254 +-0.0013015949 +0.023299318 +-0.013382941 +0.018784065 +-0.01111586 +-0.016808057 +-0.00939514 +0.0009567097 +0.014103557 +-0.010959895 +0.008510349 +-0.021573963 +0.0009225496 +0.005794358 +0.029876245 +0.00955514 +0.0374745 +0.010982011 +0.012839134 +-0.012930674 +-0.020802673 +-0.044584762 +-0.005247555 +-0.005758787 +-0.008494949 +0.00073050364 +-0.0277661 +0.041959357 +0.0029027949 +-0.013310727 +-0.0017674607 +0.013634106 +-0.015637984 +0.04208565 +-0.002685672 +0.0060812044 +0.025928961 +-0.004001139 +-0.04287216 +0.009282616 +-0.046727072 +0.0014114294 +-0.0046930783 +-0.01159612 +-0.031080492 +-0.007054279 +0.0048332047 +-0.0033102303 +-0.00049169833 +0.0017524677 +0.018829623 +-0.011371266 +-0.011333899 +-0.0028966442 +-0.01697206 +-0.01631484 +-0.0052844984 +0.030329928 +0.0071137217 +-0.003230854 +-0.0024235374 +-0.00394595 +-0.0037015097 +0.018315766 +-0.0128193945 +-0.0036436417 +-0.010758903 +-6.8556794e-05 +0.019237775 +-0.0013288201 +-0.0032691138 +0.03127462 +0.03606581 +-0.014934319 +0.0036078447 +0.0014467954 +-0.031741504 +-0.011585982 +-0.016060794 +-0.0009763235 +-0.057544906 +-0.0026323497 +0.0081087295 +-0.0037364282 +-0.0015443775 +-0.019133814 +-0.008416333 +-0.03679147 +0.0034194011 +0.00041081532 +-0.01732819 +0.009218063 +0.0098288655 +0.021796413 +0.018639153 +0.00664078 +-0.019182803 +0.029209388 +-0.03265426 +-0.04654031 +-0.007457826 +0.00013878183 +-0.0054671066 +-0.018819919 +0.018889297 +0.011155199 +-0.0052474416 +-0.02386373 +-0.031066852 +0.04905746 +0.015826758 +0.05238649 +-0.00887302 +-0.040796533 +-0.023026736 +-0.02099837 +-0.015398173 +-0.044399127 +0.0045773275 +0.0071253083 +0.00069916353 +0.009385815 +0.01607664 +0.004108949 +-0.006293667 +-0.03193387 +0.0013852512 +-0.005037411 +0.007388047 +-0.008431997 +-0.013887213 +0.009819889 +-0.041638214 +-0.00392674 +0.02417074 +0.0068852487 +-0.0043555233 +0.013051416 +0.007595695 +-0.0027042115 +-0.02398981 +0.014821638 +-0.021640759 +-0.007297294 +0.0022579194 +0.007062573 +0.0072993673 +-0.016346032 +-0.0073866798 +-0.012938356 +-0.004880239 +0.011895991 +0.0044075353 +-0.017202504 +-0.01435132 +0.005430832 +0.013766162 +0.018549142 +0.0026979158 +-0.014056564 +0.02710881 +0.01643491 +0.008197287 +-0.006581136 +0.00017780991 +-0.0041140695 +-0.021986144 +-0.0334658 +-0.024901628 +-0.010889709 +-0.0043693436 +0.028121546 +0.03371937 +0.0028970598 +0.00077966 +0.032085534 +0.033369843 +-0.015163231 +-0.025086021 +-0.020080294 +-0.01724951 +0.039991353 +0.016008327 +-0.009635884 +0.01810182 +-0.04020028 +-0.005297814 +0.009412871 +0.004779401 +7.6523895e-05 +-0.010537542 +-0.020077208 +-0.0037884654 +-0.001675349 +0.01966396 +0.015876401 +0.012191914 +-0.015997998 +0.015631873 +0.02383753 +0.0029849815 +-0.01609026 +-0.020124778 +-0.010884271 +0.0355406 +-0.02294695 +-0.008650791 +0.0070697106 +-0.038870938 +-0.004792907 +-0.0076881675 +0.012549435 +-0.04445179 +0.013011987 +-0.029385481 +0.008956867 +0.017604481 +-0.024936844 +0.020916285 +0.019820498 +-0.016613737 +0.008637995 +0.00822458 +0.010178032 +0.0038560408 +-0.045559417 +0.017906426 +0.03490015 +0.020377396 +-0.0057849637 +0.009142014 +-0.052320696 +-0.019843316 +0.0015532963 +0.016067741 +-0.00593102 +0.0017341295 +0.042395256 +-0.013717534 +-0.0311485 +-0.020014297 +-0.0054203696 +0.008245385 +-0.005259486 +0.010874365 +-0.0019590252 +0.003936456 +-0.0017093758 +0.00444534 +0.0008377682 +-0.0069168173 +-0.011714693 +0.026180828 +0.013857031 +-0.0017212112 +0.03148032 +-0.06408853 +-0.009872133 +-0.022209717 +-0.010163201 +0.0036043616 +0.02266987 +0.02203712 +0.008040207 +-0.018623367 +-0.035592552 +-0.029819157 +-0.009472683 +-0.025307486 +-0.005057304 +-0.020624531 +-0.00924912 +-0.00889454 +0.03010369 +0.0146587035 +-0.0037366785 +-0.02518276 +0.024643235 +-0.05754371 +-0.017388688 +-0.024332218 +-0.015986754 +-0.011804369 +-0.012976486 +-0.031094538 +0.008569686 +-0.028217403 +0.01003195 +-0.0057419357 +-0.018730225 +0.00840095 +0.031149087 +0.015524631 +-0.042195052 +0.011084229 +-0.01226859 +0.014574292 +0.007719322 +0.041411307 +0.001111883 +0.030118363 +0.00676007 +0.007500183 +-0.0040794127 +-0.022050265 +-0.029533058 +-0.00065018446 +-0.020841517 +0.045711327 +-0.006264364 +0.017279653 +0.021246172 +0.0025163875 +0.001572056 +0.017598694 +0.026450844 +0.014526416 +0.0011582207 +-0.019731296 +-0.029549578 +-0.016207239 +0.019344145 +0.007441969 +0.007917105 +-0.007382804 +0.029003017 +-0.012315462 +0.030013323 +0.00992294 +-0.0009823338 +-0.017269677 +-0.0037729593 +-0.0034945542 +-0.0102645 +-0.0109335985 +0.0016920497 +-0.0018458182 +-0.0074514905 +0.0033203138 +0.030734304 +-0.015025251 +-0.0002683753 +0.013104997 +0.0010518306 +-0.051746015 +-0.008296455 +0.015835676 +0.00270773 +0.020151203 +-0.0060823434 +-0.021917192 +-0.027514372 +-0.013548688 +0.020307263 +0.01124545 +0.01685536 +0.007525043 +0.008037543 +0.0042967964 +-0.027331617 +-0.0040122536 +-0.052357823 +-0.012549625 +0.015707344 +-0.007981644 +0.008970979 +-0.0041808654 +0.00605726 +0.0013326991 +-0.0035741737 +0.0038792668 +0.0037177438 +0.055681966 +-0.010382855 +0.016431306 +0.01408171 +-0.07459498 +0.0012470338 +-0.016101433 +0.000435667 +-0.05563051 +-0.054748446 +0.016684752 +-0.029529901 +-0.010288224 +-0.0448028 +-0.010767998 +0.02981711 +0.019897211 +0.016029757 +0.0068436023 +-0.0029703532 +0.016929194 +0.038691886 +-0.0031517036 +-0.0033137815 +-0.015467911 +-0.010259042 +0.0034395647 +-0.025824783 +0.026147118 +0.020208696 +0.0022726378 +-0.018947959 +0.0060538 +-0.01631903 +-0.01173087 +0.00959213 +0.0048481324 +-0.03306598 +0.0071888366 +-0.008294097 +-0.044104703 +0.011244091 +-0.01978487 +-0.038507733 +0.01710783 +-0.013718607 +-0.015337712 +-0.017751236 +-0.013830759 +0.0075333337 +0.021753753 +-0.018995944 +-0.028795518 +0.013944026 +0.010954336 +0.011195728 +0.0031780626 +-0.01005887 +0.0013494547 +0.021920426 +0.024971409 +0.0040485105 +0.013842635 +-0.01874028 +0.03386834 +-0.0043092053 +-0.022640903 +0.00022420935 +-0.020333627 +-0.0110114245 +-0.003686438 +0.02059189 +-0.019529613 +0.02052442 +0.026225379 +-0.06422376 +-0.0061139343 +0.013499627 +0.00097619515 +0.014538444 +0.01062335 +-0.08007063 +-0.035924006 +0.0010518123 +-0.040711973 +0.014369593 +0.027378421 +-0.012624615 +0.010139723 +0.009997924 +0.010456402 +-0.007332775 +-0.008021955 +-0.0020140111 +-0.0062863957 +0.01749709 +0.009800821 +-0.01773241 +-0.025911009 +-0.032361135 +7.7871126e-05 +-0.0003103056 +0.009652585 +0.0036630004 +0.00046972724 +-0.018888155 +-0.0099855885 +-0.018554803 +-0.008841777 +-0.014264089 +0.020550193 +-0.005506911 +0.011118704 +0.003909012 +0.018122347 +-0.0015702761 +0.012483297 +-0.0061218487 +0.00011732411 +0.0015924616 +0.018895846 +0.01812685 +0.013850479 +-0.01793664 +-0.0009765473 +-0.02024717 +0.01444279 +0.0013907179 +0.023168761 +0.004568207 +0.018236764 +-0.002457307 +0.0017917857 +-0.029204773 +-0.0124554075 +-0.053011198 +-0.035872787 +-0.004954432 +0.031721868 +0.028358301 +0.027455833 +-0.013314011 +-0.022705136 +-0.017442565 +0.024302369 +-0.0045320564 +0.008727847 +-0.009280709 +0.009774136 +0.01330848 +-0.0014179017 +-0.00620362 +0.012204119 +0.015437022 +-0.019819118 +0.012713746 +0.0055800853 +-0.003154096 +0.01624485 +-0.010565226 +-0.009414616 +0.01238529 +0.0051403726 +0.0052062497 +-0.02526173 +-0.00049090007 +0.010727554 +-0.029013205 +0.020961069 +0.013998356 +0.009749621 +0.01802934 +-0.030672915 +-0.0023364648 +-0.01686757 +0.00025891786 +0.0020022825 +-0.0007017912 +0.014424174 +0.024398278 +0.023424923 +0.0024179337 +-0.0016891875 +0.023526294 +0.03284903 +-0.0061444016 +-0.025567448 +-0.010117537 +-0.016104046 +-0.017527796 +-0.0010889032 +-0.008032276 +0.012635208 +0.011436807 +0.0010951795 +0.058589414 +-0.004480818 +-0.017054345 +0.0057061496 +-0.010048038 +-0.016526923 +0.028013524 +0.003351137 +-0.0027918522 +-0.035653204 +0.023461917 +-0.03011063 +-0.012124331 +0.002870644 +-0.013722704 +0.016996961 +-0.009281926 +-0.022954095 +-0.001365503 +-0.013314425 +-0.0020790985 +-0.011789377 +-0.015144694 +0.03028042 +0.008391054 +-0.029653136 +-0.0030886997 +0.026465211 +-0.0016284788 +0.022791293 +-0.009915176 +-0.00019010846 +0.007000893 +0.0028288811 +0.017486421 +0.0010256425 +-0.031257283 +0.0014429023 +-0.010223379 +-0.008052105 +-0.0041822866 +0.011539428 +-0.004094219 +-0.010344321 +0.009686505 +0.0020141837 +-0.008977632 +0.016436016 +-7.225747e-05 +-0.02891379 +-0.0033553059 +-0.013013351 +-0.025228677 +-0.023136577 +-0.0051116184 +-0.0048095067 +-0.010330257 +0.009227582 +0.025932059 +0.014282851 +0.011150795 +0.0057260874 +-0.0038875707 +0.0032046218 +0.010967399 +0.016740825 +-0.04789132 +0.009895531 +0.017007856 +0.0024257586 +0.0050345007 +-0.018768175 +0.006790511 +-0.03802757 +-0.005925314 +0.022513378 +0.005510849 +-0.0036561317 +0.012585683 +0.015899105 +-0.015065677 +0.0015729442 +0.012744561 +-0.018040316 +-0.019855693 +0.00943232 +-0.0005347857 +-0.0063928682 +0.0010101418 +0.018784994 +-0.008502043 +-0.014257378 +0.023480667 +0.0017560673 +-0.017773604 +0.0041271904 +0.0045839893 +0.01585633 +0.004749382 +-0.0044787484 +-0.0012310215 +0.014102811 +-0.004504098 +0.0051401365 +-0.001062007 +-0.0079945475 +-0.004384982 +0.020326717 +0.006904029 +-0.018374918 +-0.0101640485 +-0.0032717106 +0.00631981 +-0.032506526 +-0.01897476 +0.003437713 +-0.0101053305 +0.0044030924 +-0.023560971 +0.0022335516 +-0.0006428817 +0.04206883 +0.01737747 +0.009442641 +-0.0053343764 +0.011683299 +-0.0027018073 +-0.013661074 +0.022702418 +-0.06103218 +-0.008706058 +-0.007811017 +-0.014883409 +0.021581981 +-0.007676769 +0.0070174374 +-0.010775621 +0.017983504 +0.0018515759 +-0.012070557 +0.037191577 +-0.0065367133 +-0.033019386 +0.0033049544 +-0.012647271 +-0.030687595 +-0.004175186 +0.008565164 +-0.029073967 +-0.016719524 +-0.01858528 +0.04095932 +-0.008273033 +0.007847361 +0.02307012 +0.0042765792 +-0.011900112 +-0.046417482 +0.0071823015 +0.015055815 +0.012619611 +0.011748356 +-0.0053499816 +-0.012986605 +-0.041497562 +-0.0066294693 +0.009625993 +0.010795551 +-0.012598203 +0.014826436 +0.0015484842 +-0.011575457 +-0.022156656 +-0.0018028597 +-0.0027084032 +0.00662424 +0.009148079 +-0.01608141 +0.032337457 +-0.023519171 +-0.071237534 +0.016678745 +0.015258142 +0.008376636 +0.024380818 +-0.03590485 +-0.051326662 +0.013126559 +-0.008439138 +-0.0019829578 +-0.007507358 +-0.005235461 +-0.0015058689 +0.01841861 +0.0117813805 +0.017871814 +0.016959252 +-0.011998781 +-0.009756515 +-0.026691755 +0.01512496 +-0.0035840496 +-0.006786557 +-0.02573998 +0.026487952 +0.008414331 +-0.002329456 +0.038090084 +0.0040767333 +-0.00069620623 +-0.00417877 +-0.009736154 +-0.009262812 +-0.0034954716 +0.020101996 +-0.0070442013 +0.016782807 +0.031875934 +-0.010433242 +0.009453385 +0.0065185586 +0.0051565804 +0.0024518296 +0.002993353 +0.032752298 +-0.00599171 +-0.0041182972 +0.0018163695 +0.006659831 +0.023478633 +-0.013828758 +0.025179911 +0.0065831905 +0.0056412127 +0.009291025 +-0.002562448 +-0.024159363 +0.033680487 +-0.003659772 +-0.020950038 +-0.02726173 +0.0125207985 +-0.0069651892 +-0.025907237 +-0.01343063 +-0.023386309 +0.013834656 +-0.0016570928 +-0.008909227 +-0.022438232 +0.034768354 +-0.0019332862 +-0.0028608565 +0.018185744 +-0.0014935626 +0.024970911 +0.007088694 +-0.015434809 +-0.003488894 +-0.033124655 +-0.009598354 +-0.018784702 +-0.0069254953 +0.006643624 +0.034781527 +0.008315276 +-0.02904007 +0.02256992 +-0.010117901 +0.017409526 +-0.009517234 +-0.009557413 +-0.005012024 +0.017261868 +0.04532421 +-0.0005004808 +0.0129934745 +-0.009379081 +-0.037120145 +-0.006939794 +-0.0065088095 +0.028889505 +-0.0062805847 +0.007354339 +-0.011202354 +-0.0075004385 +0.018004883 +0.028693466 +-0.0023066113 +0.023103043 +-0.0019141396 +0.022898348 +-0.002526125 +0.026977781 +-0.008482279 +0.014844194 +-0.008708842 +0.008738441 +-0.016406823 +-0.022170478 +0.0142944865 +-0.015742162 +-0.00045278715 +-0.010465477 +0.00889073 +0.008859392 +0.016679471 +-0.020539999 +-0.007261547 +-0.0008026136 +-0.019077692 +-0.040546924 +-0.018593954 +-0.021498466 +0.004410238 +-0.0148937795 +-0.0067992033 +-0.015081222 +-0.0014413623 +0.027853807 +0.001044333 +0.0037462362 +-0.011536817 +0.023543488 +-0.0074811685 +-0.0018270398 +-0.019424593 +-0.015871277 +0.0020829085 +-0.015180794 +0.028451223 +0.028690726 +0.0005696781 +0.006031322 +-0.0054966114 +-0.0024668868 +0.0032328584 +-0.017791374 +-6.746061e-05 +-0.0021943888 +0.0038769504 +0.04957083 +0.0037876396 +-0.006212564 +0.02338275 +-0.0199194 +-0.014563077 +-0.0060579055 +0.00522493 +0.006991009 +-0.008205213 +-0.015584663 +-0.035747968 +-0.05708428 +-0.0054376437 +0.008514016 +0.016256608 +-0.0031946737 +-0.0023334755 +0.020921439 +-0.00078371575 +0.03366531 +-0.024620036 +-0.02602148 +-0.021766338 +-0.0054073893 +0.046069417 +0.026864298 +-0.0006708426 +-0.042834185 +0.021420207 +-0.030341702 +-0.032628227 +-0.01095325 +-0.016237246 +0.0022385647 +-0.0148115605 +0.031760816 +-0.007833217 +0.00059398124 +-0.041972097 +-0.027244572 +0.02730992 +0.013662634 +0.052590866 +-0.008511975 +-0.015274044 +-0.024348836 +0.0037519496 +0.02919544 +-0.027250636 +-0.00220407 +0.025777636 +-0.0045561832 +0.035433877 +-0.0036097514 +0.02350665 +-0.009104219 +-0.04073098 +-0.017079772 +0.009594314 +0.011959159 +-0.01763111 +-0.0069250395 +0.016944408 +-0.045058455 +-0.0016479882 +0.020315675 +0.009755547 +0.024805171 +0.0044009443 +-0.010553059 +0.0008598662 +0.0062146704 +0.0022998895 +-0.020131275 +-0.021106295 +0.02024241 +0.018187914 +-0.009430109 +0.02263834 +-0.018348297 +-0.009478015 +0.015627837 +-0.01185606 +-0.027461866 +-0.0016899476 +0.007961279 +-0.0019028089 +-0.028163824 +-0.0012541051 +-0.020968582 +-0.000514491 +-0.012855261 +-0.007208103 +-0.0034362394 +0.001565326 +-0.0121424375 +-0.009813704 +0.021211246 +-0.0026075304 +-0.0194204 +-0.013133895 +0.014250463 +0.010099307 +-0.022576468 +-0.017669499 +-0.0149889635 +0.0054566343 +0.010082127 +0.042767674 +-0.01418936 +-0.007466813 +0.0011254459 +-0.004644325 +-0.016185699 +-0.024975454 +-0.029463373 +-0.008940309 +0.00017606857 +-0.0021502613 +-0.0020155078 +0.004874352 +-0.016810574 +-0.022571364 +-0.0024786985 +-0.01266494 +-0.011423225 +-0.0076106344 +-0.029550377 +-0.011176402 +0.011295742 +-0.00035898515 +0.0008639827 +-0.017425133 +-0.0066665676 +-0.0066207713 +0.028129658 +-0.003779483 +0.021502664 +-0.024572533 +-0.053062055 +-0.009201804 +0.028401647 +0.0060905875 +-0.0053403275 +0.028041352 +-0.010287982 +0.008769336 +0.01589175 +-0.014040249 +-0.032083686 +-0.012428249 +-0.0168651 +0.014481122 +0.0032618293 +0.021394255 +0.0076237773 +-0.013558491 +0.029906545 +0.020467622 +-0.024462711 +0.023544582 +0.036505014 +-0.034337807 +-0.021326698 +-0.032722816 +0.0005851704 +-0.0263484 +-0.017149577 +0.03178079 +-0.020930164 +-0.021766031 +0.0011465691 +0.021079876 +-0.009707507 +-0.008528899 +0.023411188 +-0.019156454 +-0.00022446265 +-0.0198057 +0.0077520707 +0.002404719 +0.0045035207 +-0.01575194 +0.0028588339 +-0.013935045 +-0.0049139042 +0.047896884 +0.005548372 +-0.013702792 +-0.0065331957 +-0.036783997 +-0.023452029 +0.036699682 +0.01999919 +-0.004289087 +0.0018577602 +-0.011186683 +0.010122063 +0.0017004458 +0.006942331 +0.0034230154 +-0.0014273892 +-0.00039069023 +0.016728828 +0.00673383 +0.008952857 +0.0105141355 +-0.027938703 +0.01907326 +-0.04988839 +1.504983e-05 +-0.00015921825 +-0.024799416 +-0.014868214 +-0.016692348 +-0.0033059658 +0.02351895 +-0.0005252348 +-0.024598097 +0.0010329993 +-0.02222939 +0.013062022 +-0.005537669 +0.005783154 +-0.027948903 +-0.024004677 +-0.021467078 +-0.00319584 +0.0011137392 +-0.00803236 +0.006518602 +-0.010588494 +0.014153774 +0.002529604 +0.0010320896 +-0.03390454 +-0.0043664873 +0.0021736177 +0.0068271467 +0.07054011 +-0.0012398012 +-0.006274426 +0.0041281544 +-0.004819541 +-0.012057012 +0.0035295791 +0.0031233777 +0.009347154 +0.013766488 +-0.017240904 +-0.0013000155 +-0.032013822 +0.0056749466 +0.0126442835 +0.024061102 +-0.03147277 +0.004166914 +-0.0067859553 +0.014909279 +-0.01889427 +-0.025114743 +-0.010695678 +0.005690629 +0.0021329715 +0.009953444 +0.0013919617 +0.009325317 +0.027420374 +0.01268941 +-0.061493386 +0.0025078023 +-0.030851018 +0.0018477285 +-0.0016120288 +0.017729146 +-0.023445867 +-0.0030642068 +0.0254802 +-0.0022637015 +-0.007230216 +0.025232235 +-0.023872765 +-0.009376082 +-0.0069219675 +0.0040318114 +0.011549039 +0.02562081 +-0.007042916 +0.0073263817 +0.011590381 +-0.0009940702 +-0.013402173 +-0.030277975 +-0.006151997 +-0.014473411 +0.027295468 +-0.02466298 +0.022384964 +0.0028540199 +0.0005901311 +-0.0077122813 +-0.009191875 +0.010769754 +-0.007741333 +-0.009852613 +-0.016173203 +0.01657104 +-0.030801497 +-0.0047749346 +-0.032242157 +0.007729001 +-0.031541705 +-0.016989952 +0.015831523 +0.0010505831 +0.0072801337 +-0.0052714804 +0.003636743 +-0.0029927932 +0.01456907 +0.0034070255 +0.0040989267 +-0.014965296 +0.0004347695 +-0.006155853 +0.022101697 +0.009592591 +-0.0019831248 +-0.024985377 +0.0074010813 +0.015477245 +-0.0036827151 +0.011028516 +0.0056550726 +-0.015967142 +0.022260224 +0.014837448 +0.004116952 +0.011427197 +0.009142183 +0.0014340493 +0.004807707 +-0.021525713 +-0.034390315 +0.012050577 +-0.023863045 +-0.0052117333 +-0.0039520888 +-0.015274874 +-0.02469121 +-0.022365784 +-0.01672061 +0.005816604 +-0.0017169408 +0.0059066587 +-0.006755057 +0.011219651 +0.025450893 +0.0058320826 +-0.009005086 +-0.01215781 +0.015649937 +-0.008368078 +0.012265884 +0.0026852738 +0.022931455 +-0.029107258 +-0.0035200547 +-0.013426695 +0.00927468 +0.005466619 +0.008300958 +-0.0051015546 +-0.02316382 +-0.0035525013 +-0.009174028 +0.022394482 +-0.00019605386 +-0.016350716 +-0.008725425 +0.0050936462 +0.012261768 +0.0110672135 +-0.0056322217 +-0.037367985 +-0.018344074 +-0.010691923 +-0.0017970422 +-0.007913084 +-0.015295752 +-0.016585903 +-0.03197616 +0.019352566 +0.017277472 +-0.00545025 +-0.0034067174 +-0.0021337427 +0.008601819 +-5.908856e-05 +0.007785864 +-0.0103300875 +-0.012575318 +0.009956099 +0.0017377427 +-0.017223641 +-0.0014020933 +0.005040487 +0.011302003 +0.019202927 +-0.014171319 +0.00052824034 +-0.02427354 +-0.027727826 +-0.019248452 +-0.00572211 +0.037570555 +0.0027917204 +0.025529573 +0.0050618574 +0.023278307 +0.018547393 +-0.00078978424 +0.012398585 +0.01409687 +0.012181195 +-0.00799717 +0.0013297681 +-0.011516175 +-0.021651788 +0.013767824 +-0.016817031 +0.020160688 +-0.00564444 +0.0044577913 +-0.012025925 +-0.0005335713 +-0.0117688505 +0.05351081 +-0.044194877 +-0.0056682564 +-0.012682302 +0.01273145 +0.008924311 +0.038271204 +-0.03017775 +-0.012700969 +-0.035332434 +-0.013620445 +-0.02714281 +0.00086586294 +0.01683552 +0.00430207 +0.018754525 +0.013948771 +0.003302602 +0.0111813415 +-0.010456867 +0.0029129956 +0.025020506 +0.0040832795 +-0.0033514367 +0.027620124 +-0.006397539 +0.013546247 +0.004946869 +0.0005151009 +-0.018136568 +-0.0200688 +-0.02116353 +-0.017480256 +-0.023210702 +-0.0010978775 +0.039709136 +-0.0018571854 +0.025703922 +0.0069040544 +0.010045822 +0.0097296005 +0.011054907 +-0.010012553 +-0.009637677 +0.014490154 +0.031562485 +0.0067399805 +-0.0044548623 +0.023906557 +0.004074493 +0.0019421973 +0.0054095183 +0.0093316715 +0.015714185 +0.018088482 +-0.011861234 +0.0010151283 +-0.006539376 +-0.0029427551 +-0.013826522 +-0.0053066523 +0.003389718 +0.019749146 +-0.008623851 +0.011241568 +-0.020957498 +0.019063326 +0.012416972 +-0.006156218 +0.020517599 +-0.024667166 +0.021250885 +-0.0074019125 +0.0057388777 +0.015762186 +-0.0032940554 +0.057400648 +0.0042543593 +0.0016014869 +-7.298159e-05 +-0.0069429805 +-0.0064670155 +0.01549701 +-0.018307917 +0.0020925123 +0.0075545134 +0.0015173256 +0.016266106 +0.017121326 +0.0064604124 +0.0009981466 +0.006028614 +0.013781303 +0.0033269115 +0.0031095215 +-0.006255639 +-0.008431488 +-0.019385975 +-0.023417532 +0.009663281 +-0.00382611 +0.0024131392 +-0.028868053 +-0.0027020373 +-0.01683823 +0.0022569834 +0.019128866 +-0.008226835 +0.0131419655 +-0.001299491 +-0.0020888578 +-0.0052350624 +-0.022615146 +0.007326236 +-0.018978596 +-0.009058596 +-0.0037807035 +0.003131953 +-0.016370976 +0.007891398 +-0.022376392 +0.015980568 +-0.017426353 +-0.008924876 +-0.007573865 +0.019009357 +-0.009442262 +-0.017219821 +0.009680042 +-0.003934107 +0.0095753865 +-0.004580809 +-0.047985855 +-0.007656091 +0.006354849 +0.002892885 +0.011211454 +0.018314105 +-0.035309892 +0.013378307 +-0.0131485015 +-0.029652875 +-0.039119847 +0.028296547 +-0.019348867 +0.01085657 +-0.0030449238 +0.0009281565 +0.0081834495 +0.030568851 +0.020119036 +-0.008983731 +-0.010551369 +0.01879673 +-0.019330328 +-0.013662528 +-0.012123845 +0.0020262103 +-0.010392412 +0.000178916 +-0.030332552 +-0.0050193192 +0.011599701 +-0.0026335188 +-0.011214571 +-0.0024170505 +-0.009426269 +0.0035602304 +0.02138438 +0.009253495 +0.0027160482 +-0.000496605 +-0.016820535 +0.009275381 +-0.010951751 +-0.040256158 +0.01726184 +-0.0017347613 +0.033134654 +-0.02570984 +0.009462705 +-0.033874884 +0.017482786 +0.015082813 +-0.005103825 +0.013759883 +0.043858733 +-0.008109719 +-0.006125614 +0.0023002354 +-0.0068935873 +-0.00056813186 +0.005179931 +0.025440473 +-0.0040840073 +0.007901966 +0.010087486 +-0.0039421935 +-0.010196281 +-0.024213899 +0.0132702235 +0.016294064 +0.0042814226 +0.009050362 +-0.008466393 +-0.00842658 +-0.009907953 +0.003046552 +0.023752907 +-0.03353245 +-0.0036835866 +-0.016647615 +0.006336475 +-0.017577918 +0.015444301 +0.014134244 +-0.0018502744 +0.017757164 +0.020888254 +-0.014541087 +0.01739177 +-0.00042520114 +0.004835731 +-0.015286221 +0.007997723 +-0.013236549 +-0.005616187 +0.017418642 +0.01846131 +-0.0014727248 +0.005655099 +-0.014092957 +0.015332056 +0.0131397415 +0.026354175 +0.0074460683 +-0.0025867443 +-0.016351815 +-0.008602816 +0.013064157 +-0.0072772405 +0.008498938 +-0.009280974 +-0.018431848 +-0.0063021327 +0.008139796 +-0.034203865 +-0.006631619 +0.004300845 +-0.052972876 +-0.003568752 +0.0026443526 +-0.0061041988 +-0.0029789787 +0.029019952 +-0.019135164 +-0.020469278 +0.008231259 +-0.0131169995 +-0.003499991 +-0.018530458 +-0.009994779 +0.0017650397 +0.0018650822 +-0.017004289 +0.018512417 +0.0054834536 +-0.035398256 +0.0043193954 +-0.024619961 +0.012197113 +0.012757079 +0.007943767 +0.005410334 +-0.015423304 +-0.0008651166 +0.004030425 +-0.0027288257 +-0.020190168 +0.009277464 +-0.0033459764 +-0.02071008 +0.045112163 +0.0032555382 +0.022704648 +0.02992127 +-0.007421156 +0.0046737073 +-0.020963198 +0.020775033 +-0.00020773726 +-0.00904041 +-0.021943128 +-0.014034616 +0.004807949 +0.005619816 +0.030839901 +0.027072124 +0.028174901 +-0.0035871172 +-0.0064140926 +-0.024062818 +-0.024501706 +-0.01595611 +-0.0067858556 +0.0010570653 +-0.01334145 +0.025641313 +-0.028069647 +-0.0123592 +-0.04161138 +0.022385418 +0.0057876483 +-0.0033201051 +0.021521447 +-0.0018524949 +0.007251391 +0.00096120936 +-0.034003448 +0.004308842 +-0.009437983 +0.008966865 +0.0047762594 +-0.034719083 +0.0038716663 +0.032873724 +-0.012207509 +-0.011902313 +0.019805199 +-0.01727069 +0.017122176 +0.0025323976 +0.016984783 +-0.011141423 +0.014060549 +-0.017206935 +-0.003134967 +-0.0071821962 +-0.017937934 +-0.012068494 +-0.010912031 +-0.007447866 +0.0069904886 +-0.0032405562 +-0.014320782 +0.0071201148 +0.00773591 +-0.008223587 +0.024251824 +0.009299225 +-0.0074077067 +-0.0040316726 +-0.012936219 +-0.0019736493 +0.024077896 +-0.022569276 +0.016102262 +0.003807075 +0.005097742 +0.005947818 +-0.017689776 +0.010756197 +-0.008536602 +-0.019966153 +-0.01171846 +0.010878394 +0.0067303833 +0.0128390165 +0.0009507086 +-0.019531617 +0.020723155 +-0.0312629 +0.011892158 +0.015258558 +-0.0007559464 +-0.0051129144 +-0.01667717 +0.011987852 +0.007480959 +0.0032128575 +-0.032615058 +-0.0002628574 +0.010781384 +-0.011997316 +0.016586978 +0.005622558 +0.020153098 +-0.0067201713 +-0.027577145 +-0.0027502135 +-0.0048587956 +-0.005936068 +0.010882904 +-0.0060517783 +0.005461942 +0.008759172 +-0.00030682227 +-0.01622956 +-0.0008291907 +0.0035761145 +-0.010340228 +0.010764488 +0.06787772 +0.004642443 +0.026936278 +0.0011010044 +0.010686056 +0.0034648387 +-0.01286 +-0.0023329884 +0.021998664 +0.0081383055 +-0.0254315 +-0.015479009 +-0.030180017 +0.006052572 +-0.0005467214 +0.0010934408 +0.0029319238 +-0.010380458 +0.013561129 +0.023229169 +0.01670582 +-0.020019578 +-0.03439571 +-0.011643351 +-0.018811218 +0.058995295 +0.018939292 +0.00036415787 +-0.03155975 +0.035640102 +-0.007907247 +0.007568584 +-0.0055329567 +0.00985466 +0.012578124 +-0.0062352493 +-0.030240417 +-0.022740845 +0.014086165 +-0.031697053 +0.035892565 +0.011565501 +-0.0048821815 +0.044295058 +-0.0031113143 +-0.005672538 +-0.031774387 +-0.02458755 +0.020068565 +0.006309352 +-0.01282556 +0.0054729925 +-0.003324602 +-0.048388734 +-0.012000324 +-0.0007516762 +-0.0074441065 +0.025471086 +-0.005075153 +0.001135162 +0.0010067524 +0.002327097 +0.014138679 +0.0067062327 +0.003990881 +-0.0039337147 +0.005615632 +-0.019973831 +-0.040869277 +0.012113457 +-0.017166723 +0.010223194 +0.014628265 +-0.010143591 +0.011446141 +-0.015724136 +-0.014440463 +0.00039856893 +-0.033206753 +-4.3956956e-05 +-0.007737821 +-0.022252942 +0.019226192 +-0.0060136174 +-0.0013056842 +0.021387193 +0.005505455 +0.009732127 +0.02524306 +0.011947809 +-0.024471251 +-0.0011083946 +-0.014301826 +-0.009543253 +0.04084986 +0.0013014053 +-0.011574583 +0.005943941 +0.0018405108 +-0.00491713 +-0.008764927 +0.0015869486 +-0.009614135 +0.0017893028 +-9.2396505e-05 +0.0038001589 +0.0070418185 +0.0023851085 +-0.0067159203 +0.011435479 +0.019712556 +0.0021943478 +0.0039921626 +-0.0057563926 +0.00038609508 +0.00020038444 +-0.022334147 +0.0027256212 +-0.012051511 +-0.0026860456 +-0.0025640754 +0.016211763 +-0.004744989 +-0.021900171 +-0.0062095933 +-0.0139131155 +0.006617545 +0.007929001 +0.01753098 +-0.0066173878 +-0.030673532 +0.0009020054 +-0.008606225 +0.010088026 +-0.022208583 +0.013604982 +-0.00029795253 +0.0022305772 +0.0036863375 +-0.012530419 +-0.029142458 +0.0058811875 +0.0016184384 +-0.01387924 +-0.00050646224 +0.009551702 +-0.022280006 +-0.0057103727 +0.01856095 +-0.024584219 +-0.003909525 +-0.04430907 +0.025390428 +0.027532429 +-0.0033645772 +0.004444312 +0.0053715263 +-0.0013505722 +-0.042416606 +0.018969687 +-0.056090355 +-0.0009269038 +0.03139902 +-0.0029902628 +-0.012610649 +-0.019102402 +0.041303508 +-0.018510593 +-0.005193882 +-0.009904836 +0.013395745 +-0.015427941 +0.0025326363 +0.024411326 +0.0032837798 +0.0025298574 +-0.022659695 +-0.052086752 +-0.016994756 +0.0013163558 +0.023263862 +-0.0060630874 +-0.0022646151 +-0.008095484 +0.017069785 +-0.013376657 +0.012963345 +0.012219348 +0.01479916 +0.01852402 +-0.0048613707 +-0.035395637 +-0.006664512 +0.0001897091 +-0.021519903 +0.0004444624 +0.0017165041 +0.006745825 +0.0150411045 +0.006983259 +0.017289037 +-0.018928755 +-0.018205514 +0.010011454 +0.00028921128 +-0.0046949284 +-0.020960985 +0.010686996 +0.0036877375 +0.0122667905 +0.0063290535 +0.011398318 +0.008186053 +-0.012322376 +-0.027845487 +-0.011688628 +-0.005020775 +0.008635108 +-0.0066112005 +-0.0179388 +-0.0008235984 +0.009517858 +-0.0006431927 +0.006751716 +0.014599435 +-0.0014165692 +-0.026459375 +0.014900697 +0.02101799 +0.0071516596 +0.010072463 +0.0052439678 +-0.0028013957 +0.0042086546 +-0.0035416323 +0.013908017 +-0.031000383 +0.006204024 +-0.016541686 +-0.003378873 +0.06599287 +0.0041507958 +0.018880822 +0.0106248325 +-0.0107616475 +0.00020172213 +-0.008387668 +0.007123301 +0.0066945576 +-0.008038059 +-0.0049032304 +-0.0147170285 +0.00040678657 +0.0046537984 +0.0056691337 +0.005611796 +-0.0024221106 +0.013036975 +-0.00904154 +-0.0037541308 +-0.02499731 +-0.003932083 +0.0005613141 +-0.0023687044 +-0.0016998681 +0.0139734745 +-0.0062198946 +-0.02801606 +0.024916505 +0.0077371253 +-0.016591584 +-0.040283702 +0.018394347 +0.034137066 +-0.0062390543 +0.0087403655 +-0.0012606692 +0.016966559 +-0.051377572 +-0.03114235 +-0.011326398 +0.011596621 +-0.0035827013 +-0.0020957352 +-0.0036509717 +-0.01721855 +0.018855937 +-0.019445442 +-0.025489591 +-0.00980113 +-0.01923613 +-0.018286346 +-0.006654227 +0.0071694762 +-0.0008823326 +0.012174976 +-0.043838687 +-0.016718317 +0.0040912903 +-0.010290516 +0.013720683 +0.005134732 +-0.009257885 +0.00405973 +-0.019110769 +-0.0060620797 +0.009881208 +0.027252195 +-0.009423367 +0.02055944 +0.02973523 +0.010984135 +0.0041417745 +-0.03148344 +0.0027726314 +-0.003662108 +0.024919739 +-0.008040028 +0.0043305303 +-0.03861387 +-0.011929348 +0.0045190537 +-0.015735533 +0.0058363075 +0.010322523 +-0.001018531 +0.014288015 +0.015098135 +0.00489113 +-0.02202039 +-0.030369457 +-0.006876343 +-0.0044403174 +0.017573975 +0.0041615325 +0.0064919875 +0.012936292 +-0.019257572 +0.0033725232 +0.015104428 +0.007966792 +0.0070930216 +0.025561718 +-0.028217398 +-0.0011784969 +0.0025817647 +-0.011831087 +0.020785922 +-0.0010793619 +-0.016619638 +-0.022844063 +0.0005179053 +0.016007274 +-0.00082755915 +-0.031726785 +0.0055196453 +0.009794319 +0.0046284427 +0.015201721 +0.0014330689 +0.018470665 +-0.003744164 +-0.009795215 +-0.006322388 +0.0014545489 +0.015784055 +0.039167613 +-0.034919277 +-0.0072108107 +-0.0048640766 +0.003487961 +0.012961623 +0.007068858 +-0.029891172 +-0.018500615 +-0.009704526 +0.017862352 +0.0066481703 +0.009812877 +-0.032299254 +-0.014685223 +0.0040393183 +0.03759497 +0.011635892 +-0.025460063 +-0.02813913 +0.016481578 +-0.022169404 +-0.00802383 +-0.015328242 +-0.0171083 +0.008978121 +0.0021235463 +0.004511048 +-0.0108600985 +0.006154302 +0.019692054 +0.0037988105 +-0.014550044 +-0.010882637 +-8.809567e-05 +-0.011165229 +-0.01379244 +-0.0007495503 +-0.005139278 +-0.010975502 +-0.004551606 +0.01969659 +0.0013307739 +0.00014679613 +0.0059137642 +0.013243828 +-0.0053165415 +0.0066444916 +-0.0061871056 +-0.0011560443 +-0.022646429 +0.0022838118 +-0.0065157916 +-0.003381494 +0.0005260748 +-0.001108212 +0.024833785 +0.008309471 +-0.00048261182 +0.005508657 +-0.01293218 +-0.0056319516 +0.025894586 +-0.013008286 +-0.0027660704 +-0.0016968228 +-0.0028947678 +-0.018297957 +0.0056556095 +0.012530459 +0.026443232 +0.00808305 +0.016696772 +-0.0047899275 +-0.01218172 +-0.0006232161 +-0.0029282223 +-0.005411914 +-0.0023860147 +-0.006939272 +0.007031357 +0.0023120574 +-0.008972512 +-0.015900576 +-0.046215754 +-0.036705308 +-0.02399585 +0.017472617 +0.014904386 +-0.008733231 +0.016356803 +0.0028295275 +-0.002626857 +0.019500397 +-0.013383852 +0.024055237 +0.009890658 +-0.0063269106 +-0.016688693 +-0.010303848 +-0.0004562603 +0.019663965 +-0.009878763 +-0.014377907 +-0.012672802 +0.02270943 +0.013277841 +-0.018054282 +-0.010726702 +0.0026231324 +0.004007357 +-0.0067270314 +-0.0107810665 +0.016231675 +0.013075822 +0.0012578467 +-0.0033811 +0.0034062068 +-0.011050348 +0.0018153609 +0.0019705214 +0.007263389 +-0.013673876 +-0.0065753567 +-0.013351828 +0.017374441 +0.012703093 +0.004347455 +-0.0109726265 +-0.0047093127 +0.025357945 +-0.005489014 +-0.018639272 +-0.00024832602 +0.0022715416 +-0.016382348 +0.0028116172 +-0.011032724 +0.017580908 +-0.00052314 +0.013839391 +0.034824412 +-0.013061157 +-0.00569282 +0.0068749385 +0.0038847846 +0.013092986 +-0.008092857 +0.07910693 +0.00017542641 +0.008382866 +-0.00428173 +-0.003463427 +-0.0014953265 +0.024459494 +-0.009113699 +0.031321533 +0.018144688 +-0.0038756456 +0.0075067338 +0.00041017184 +-0.0136833 +0.007195522 +-0.005783546 +-0.021561991 +-0.01361995 +-0.008541423 +0.018964142 +-0.008484439 +0.014350917 +-0.007502425 +0.015926028 +-0.004756866 +0.009091477 +-0.0059046075 +-0.003243963 +-0.03344014 +0.006534388 +0.0048323995 +-0.018089095 +0.021885818 +-0.0031685655 +0.0010243236 +-0.013286603 +0.0015193946 +-0.016785434 +0.01776768 +0.018473718 +-0.00808997 +-0.017972684 +-0.022766039 +0.013099715 +0.00736556 +-0.008431938 +-0.010816836 +-0.040470913 +0.024391362 +-0.011077519 +-0.009672668 +0.00060208875 +0.0055079083 +0.028243998 +0.00084125245 +0.0054849815 +-0.015924213 +-0.0018811987 +0.01014266 +-0.02116591 +0.07121471 +0.012822467 +-0.011338639 +0.0033278638 +0.008888803 +-0.0023453836 +-0.019899156 +-0.0015044209 +-0.001715957 +0.004001724 +-0.015853936 +-0.005779816 +0.004175606 +-0.022946736 +0.0031140912 +0.013845734 +0.0069683357 +-0.011121801 +-0.0003654133 +0.015304757 +0.0008998306 +0.0035860082 +-0.021385359 +0.0044454224 +-0.016506637 +-0.0113183055 +-0.0036565016 +-0.0015817637 +0.007082279 +-0.008957415 +0.004128604 +0.0026666264 +0.02833481 +0.016031366 +0.021782815 +-0.0075582927 +-0.027710216 +-0.018816685 +-0.011455407 +-0.008715296 +-0.0015752547 +-0.0032829028 +0.0026175263 +-0.0072774068 +-0.007798432 +-0.004144189 +0.01019966 +-0.01673602 +-0.009813581 +0.011112078 +-0.014514611 +0.0073087164 +-0.00060197274 +0.015682107 +0.0074208006 +-0.024119018 +-0.024075381 +-0.013784736 +-0.022121014 +0.014382752 +0.0049779178 +-0.0051759896 +0.009124734 +-0.023782365 +0.007961114 +0.0062006433 +-0.029215906 +0.025732446 +-0.006554989 +-0.004583357 +-0.0041981246 +0.0029467065 +0.017400946 +0.019708214 +-0.016793126 +-0.027888011 +-0.0008086381 +0.00038904388 +-0.00909313 +0.017003523 +-0.00453704 +0.015990319 +-0.0011413164 +-0.03298515 +-0.0094667 +0.009020967 +0.00030138186 +0.006402304 +-0.0038543774 +0.02009331 +0.01336943 +0.0048322543 +0.022490509 +0.0029312081 +-0.0037153286 +-0.013890131 +-0.007715662 +0.0015808984 +0.026439581 +0.0034588194 +0.0080955755 +-0.01164266 +0.012354488 +0.015953394 +0.0050341645 +0.020937892 +0.0030458742 +-0.026028568 +-0.027775342 +0.014751801 +0.013778608 +0.010054133 +0.007313201 +-0.00055298663 +-0.012244919 +0.016861353 +0.01567494 +0.021300383 +0.025210075 +-0.012864182 +-0.0093049 +-0.01318406 +-0.008964567 +-0.014365867 +-0.00015082603 +-0.000969226 +-0.0047548586 +4.4536064e-05 +-0.0124936905 +0.008924859 +-0.0058621685 +-0.0030929781 +-0.009388653 +-0.027129631 +-0.022231696 +0.0036769202 +0.00399582 +-0.002058709 +0.018874459 +0.0036012859 +0.007876939 +0.013447703 +-0.018386023 +0.004777945 +-0.0077642673 +-0.018353999 +0.01173309 +-0.018727466 +0.022778645 +0.0067607975 +-0.011326545 +0.016212212 +-0.014567181 +0.027850972 +0.015534549 +-0.009980973 +-0.0124635985 +0.0030329046 +-0.004296339 +0.0038716735 +-0.014737374 +0.010298529 +-0.011437557 +-0.0035501358 +0.0010294938 +-0.0069431723 +-0.0032775973 +-0.01605654 +0.007194421 +-0.0018955426 +-0.020359995 +0.00018013551 +-0.03432736 +-0.011244979 +0.011879144 +0.0005241409 +0.010009427 +0.0033268093 +0.007478643 +0.0024815742 +-0.005801259 +-0.005464419 +0.015676843 +0.0034511113 +0.020770518 +0.012324751 +-0.00322036 +-0.014297092 +-0.0010461375 +-0.009687363 +0.0071157347 +0.0038753885 +0.014036682 +-0.013235086 +-0.00047807302 +-0.012565772 +0.0071372204 +5.4794084e-05 +-0.0005292994 +0.019963322 +-0.0048531075 +-0.023183772 +-0.0150941415 +-0.008952038 +0.006110045 +-0.007834569 +-0.008819009 +-0.0064095645 +0.015033976 +-2.809414e-05 +0.021468103 +-0.001053959 +0.005015553 +-0.018273821 +0.026141753 +-0.007706765 +-0.0016872855 +-0.030928986 +-0.00069458055 +0.0030026678 +0.0018219422 +0.02337297 +-0.008169422 +0.019853884 +0.00085004163 +0.0060922443 +0.0075403186 +-0.021617569 +-0.009247316 +9.635925e-05 +0.0041748467 +0.0069868355 +0.008238567 +-0.04970493 +-0.0005445259 +0.0001058006 +0.013152147 +-0.011742907 +0.0014650754 +-0.005152776 +-0.02913909 +0.0076514985 +-0.004982673 +-0.01855259 +0.0050946428 +0.010024957 +-0.0034614655 +0.0011440451 +0.008899152 +0.0020357799 +0.010047407 +0.0048981453 +-0.016641198 +-0.004552295 +-0.008001873 +-0.01081867 +-0.002737427 +-0.007733028 +-0.0073893657 +0.0053303787 +0.0042587994 +-0.013452141 +-0.0079780035 +0.0007239822 +-0.0047552595 +-0.0270917 +0.06557446 +-0.006234273 +0.0629861 +0.0038260845 +0.015037196 +0.01817731 +-0.0052923504 +-0.0018658376 +1.17325e-05 +0.0073661213 +0.0037544302 +0.017227592 +0.012964939 +0.0067878473 +-0.008096503 +-0.02148731 +0.0032017657 +-0.0092451675 +-0.0015442537 +0.015714092 +0.014754555 +-0.013949754 +-0.023653913 +0.014571651 +-0.0020615929 +0.045425337 +-0.011972075 +-0.001944839 +-0.0018443955 +0.032238316 +-0.010618142 +0.009109832 +-0.017407129 +-0.008280314 +0.006515276 +-0.010084106 +-0.01826632 +-0.0046711024 +0.020654997 +-0.010245079 +0.008352313 +0.014519485 +-0.009620893 +-0.022603218 +-0.016599894 +0.0048756003 +-0.00051822455 +0.01845519 +0.0026062448 +0.0012598658 +0.016087713 +0.01333023 +0.00020350583 +-0.017597642 +0.0020014064 +-0.029999109 +0.0068281973 +-0.0059322775 +-0.014039415 +-0.014966874 +-0.00059054303 +-0.015762933 +-0.00072877534 +-0.015659159 +-0.001700733 +0.009572376 +-0.004970183 +-0.026298674 +-0.024650943 +-0.004988081 +0.009244049 +0.011125788 +-0.03246183 +0.00045178368 +-0.0008402531 +-0.023178827 +-0.021031434 +0.01680411 +-0.018244423 +-0.004964652 +-0.007947505 +-0.0075695934 +-0.016189195 +-0.020912705 +0.005808867 +0.0037145372 +0.0016934981 +0.025863225 +0.007725425 +0.004552467 +0.016221967 +0.014626022 +0.0082598515 +-0.0063111484 +0.05019047 +0.012811496 +0.0034199534 +0.006293334 +0.004823186 +0.0011214353 +-0.0013874861 +-0.0068331426 +0.011375087 +0.015737096 +0.0058491714 +0.0047192317 +0.0075769546 +-0.014282617 +-0.013288628 +-0.005241175 +-0.011233582 +0.0014049017 +-0.0026229776 +0.007785683 +-0.0036776173 +0.01455344 +0.0011747107 +-0.0044262474 +-0.0073331245 +0.008848823 +-0.016634826 +-0.012764031 +-0.04271572 +-0.022848822 +0.009197337 +-0.01564866 +0.012265909 +0.010753818 +0.027221529 +0.0066308477 +-0.016333006 +0.003621964 +-0.014073889 +0.0059588016 +0.015295974 +0.0033236567 +0.013842411 +-0.0026490465 +0.0059852717 +-0.038822126 +-0.0044081686 +-0.0023082984 +0.009395003 +-0.020508915 +0.016664024 +0.008636095 +-0.004271413 +-0.006047693 +-0.04781377 +-0.022859259 +-0.0020512051 +-0.01848542 +0.010652023 +-0.007579682 +0.02044193 +-0.006459961 +0.014617174 +0.009229751 +-0.020627817 +0.023782473 +-0.040366456 +-0.01667908 +0.030825498 +0.0057379603 +-0.017777229 +-0.0050723944 +0.039526556 +-0.029364325 +-0.020100687 +-0.0013895542 +-0.009111007 +-0.0151679255 +-0.0017492068 +0.018170118 +-0.012728881 +0.028039224 +0.0011730483 +-0.026384516 +-0.004812928 +0.003288196 +0.01057158 +-0.0049982006 +0.018519158 +-0.0048809163 +0.001338796 +0.004776653 +0.030425146 +0.022828395 +0.0071546924 +-0.005457201 +0.021987803 +0.009786544 +0.019305957 +-0.0029096063 +0.0062557203 +-0.010845907 +0.013391483 +-0.005991067 +-0.007688685 +0.0034212486 +-0.0059811906 +-0.016859531 +-0.010682021 +0.005296777 +0.006587383 +-0.008094667 +-0.010058993 +-0.026997907 +0.003336184 +0.012676907 +0.013000913 +0.0032570763 +0.0036836083 +0.010214396 +-0.014410389 +-0.0064327386 +0.005269255 +-0.010382432 +0.009186913 +0.015837912 +0.006406638 +0.0008334227 +-0.021398073 +-0.0118188495 +0.0083537 +0.011316708 +-0.014346049 +-0.0015786922 +-0.004264683 +-0.005714135 +-0.00053711655 +-0.0032648747 +-0.007023044 +-0.0030878973 +0.004969356 +0.0034362106 +-0.0023022087 +0.0077023045 +-0.0026702413 +-0.021646632 +0.04578412 +0.0018775705 +0.064440645 +-0.006018784 +0.011640721 +0.012862286 +0.0066245385 +-0.0010643813 +0.0011470957 +-0.008828566 +-0.014595448 +0.0025615816 +-0.0013636512 +0.003531476 +-0.002725257 +-0.014704239 +0.012679911 +0.0011070543 +-0.0023329537 +0.000678692 +-0.009293844 +-0.022311624 +0.010346982 +-0.012869757 +0.019291654 +0.002917334 +-0.012568208 +0.012310207 +-0.031800915 +0.014446485 +-0.0063091917 +-0.0035101268 +0.006456722 +0.009954476 +0.032112587 +0.010228062 +-0.016909149 +0.006824884 +0.0016611901 +0.003780399 +-0.0119190095 +-0.029969187 +0.011561368 +0.0018250715 +0.0047405893 +-0.012020498 +-0.0018423955 +-0.04834947 +-0.00631784 +0.0071019344 +0.006876028 +-0.024414295 +0.01645661 +0.0063301567 +-0.0057395343 +-0.008737817 +0.0071018566 +0.009578426 +-0.0034941938 +0.00077761954 +0.00861462 +-0.00010774509 +-0.0027192817 +-0.0083559295 +0.014818067 +-0.008475806 +0.018788 +0.0082057165 +-0.0042443005 +0.0001828069 +0.028477889 +0.018134631 +-0.0019495765 +-0.03269152 +0.017994994 +-0.013540627 +0.020731416 +-0.0014966769 +-0.0016297974 +-0.0064076493 +-0.006866243 +0.008875117 +0.0013591492 +0.016167443 +-0.011589246 +-0.019332798 +0.01211371 +-0.019967943 +-0.006824583 +-0.013643717 +-0.030396145 +-0.0063207257 +-0.002537533 +0.006461738 +0.018038724 +-0.0014909806 +0.0010594808 +0.01157639 +-0.0048119924 +-0.0019468324 +-2.2364991e-05 +-0.013015087 +0.009319719 +-0.00612574 +0.007680051 +-0.0028677683 +-0.00026620037 +0.006857276 +0.0047114724 +-0.016421804 +0.008787264 +0.0042564045 +0.0012064907 +-0.0058536613 +-0.0060684048 +-0.012085674 +-0.01088201 +-0.009095019 +0.004377889 +-0.006401289 +0.0039123343 +0.012517731 +0.013291121 +-0.002146697 +-0.008656074 +-0.003304949 +0.022097146 +-0.0013549762 +-0.0055037234 +-0.007851328 +-0.019457446 +-0.026357425 +-0.00035466973 +-0.027041232 +-0.0041552805 +0.011656597 +0.019888429 +-0.014949764 +-0.015212391 +0.0077545377 +0.021164449 +0.0008188498 +0.005792004 +-0.018764488 +-0.0063616275 +-0.0042391443 +0.019310348 +-0.0056468933 +-0.03221397 +0.01566484 +7.3034375e-05 +0.034928605 +-0.01847778 +-0.040707756 +0.012932162 +0.004603292 +0.02968697 +-0.012346708 +-0.006596394 +-0.021525541 +-0.0014475874 +-0.02740363 +-0.0005325904 +0.009318489 +-0.0021827624 +5.1460043e-05 +0.011968038 +-0.0501294 +-0.01848639 +0.0065139066 +0.023002958 +-0.010553904 +-0.0053171962 +0.0047218613 +-0.0018857286 +-0.0051239734 +-0.026671596 +0.025365885 +-0.018452413 +-0.020853098 +-0.005498628 +-0.017416488 +0.0115958685 +-0.015855474 +-0.0213736 +-0.018038208 +-0.035150588 +0.032973662 +0.026565725 +-0.007220164 +-0.040191777 +0.009350971 +-0.007862937 +0.018755736 +-0.011247889 +0.0043903035 +0.00772938 +0.01909772 +-0.01597227 +-0.013608327 +-0.026448201 +0.004995489 +0.015975 +0.0034886985 +-0.0012571344 +-0.00013919496 +0.013604052 +0.0051637175 +0.018225992 +-0.00509327 +-0.036516957 +-0.014772577 +0.0012868396 +0.012026492 +-0.0004756469 +-0.0020700472 +0.0005428844 +0.0033102708 +0.0062547466 +0.009984732 +-0.002946334 +0.00791839 +0.0056809853 +-0.02154582 +0.0073046805 +-0.02572474 +-0.008600244 +-0.010601197 +0.0018110336 +-0.0021117057 +0.01661602 +0.012661246 +0.015526136 +0.017852208 +-0.0061677936 +-0.02655769 +0.0003880277 +-0.0041185464 +0.0006026383 +0.004924191 +0.011800568 +-0.008650183 +0.004424362 +0.0094855735 +0.0062023443 +-0.023196407 +0.00023353685 +0.012220249 +0.011485702 +-0.010526494 +-0.024968881 +-0.01110701 +-0.003165886 +-0.010741354 +-0.005385053 +0.02255978 +-0.014860486 +0.007951492 +-0.004127975 +-0.023007892 +0.005125057 +-0.0022539478 +0.0024994838 +-0.013368594 +-0.0017246879 +-0.005138356 +0.0008059457 +0.040161587 +-0.017020753 +0.003929732 +0.0012400566 +0.009720315 +-0.0003100862 +-0.01044842 +0.039900843 +-0.007928178 +0.002931376 +0.019516682 +-0.009009137 +-0.007351623 +0.015325598 +0.012472158 +0.025004487 +0.003981484 +-0.01775323 +0.0020090125 +-0.0032132233 +0.004085219 +0.0006975282 +-0.017378725 +-0.005696604 +-0.0076621254 +-0.000641865 +-0.009935586 +-0.011072788 +0.012274825 +-0.0073541673 +0.0012945979 +0.014635918 +0.017562497 +-0.017263 +-0.0023327537 +-0.06719954 +-0.0129138585 +0.00263932 +-0.02807572 +0.009899672 +-0.0006122549 +0.005328941 +0.0005478259 +0.015710717 +0.023585292 +0.012940976 +0.013751759 +0.028976472 +0.0115428325 +0.0066653034 +-0.013730066 +-0.003225586 +-0.0028640877 +0.011012829 +-0.029319953 +0.0061241547 +-0.0107521415 +0.016869003 +0.0136400135 +0.023920003 +0.0066061867 +0.006881355 +0.007724999 +0.022129346 +0.012846766 +-0.004791547 +-0.014164218 +0.07288006 +0.009112036 +0.0049827145 +0.00032723555 +-0.0018708517 +-0.014298048 +-0.031244032 +0.0020399669 +0.0017814445 +0.009872279 +-0.022948682 +0.012223478 +0.0024955128 +-0.018579919 +-0.013865593 +0.0031329093 +0.0016143678 +-0.0050850273 +-0.0121088745 +0.02154117 +-0.0010434906 +-0.0026102948 +-0.01617548 +-0.0016998192 +-0.020695591 +0.032979645 +-0.005682915 +-0.0019001216 +-0.05613458 +-0.025646258 +-0.00860116 +-0.011123036 +0.022159725 +0.015928647 +0.013758378 +-0.008614507 +-0.01230837 +-0.0077826288 +0.0063734534 +-0.0008002861 +0.014705306 +0.009635933 +0.018997058 +-0.020736279 +0.013762875 +-0.034489788 +-0.018838668 +-0.018806277 +-0.02535426 +-0.013032855 +-0.01021709 +0.007046082 +-0.014066056 +0.012925144 +0.019526377 +-0.001862914 +-0.011540026 +0.00686709 +-0.016489504 +0.026003096 +0.013241319 +-0.006695131 +-0.006095557 +-0.016806625 +0.017572928 +-0.0013155503 +-0.02243534 +0.017859315 +-0.008827367 +-0.0024220427 +0.0079417145 +0.004208638 +0.019730682 +0.030343594 +0.023337368 +-0.009070739 +-0.016784644 +-0.015061886 +0.0038524023 +0.010917494 +-0.004137717 +-0.021848844 +0.005168416 +-0.037046105 +0.008054148 +0.0038566329 +0.004199542 +0.002959837 +-0.0018371041 +-0.0094955 +0.01169992 +0.011180393 +0.02922311 +-0.014673016 +-0.005716965 +0.009129258 +0.009969647 +0.010781838 +0.033091743 +-0.019985154 +0.01687492 +-0.0020862631 +0.008092476 +0.011108935 +-0.008930297 +0.02294855 +0.012181765 +-0.026188478 +-0.021230508 +0.0013843308 +0.004119401 +-0.006863046 +0.006726649 +-0.010275945 +-0.0048655695 +0.012922206 +0.0190827 +0.017205399 +0.015206404 +-0.01877951 +0.0066513047 +0.00029619242 +-0.0048591015 +-0.0035305326 +9.337663e-05 +-0.0055205845 +0.004297921 +-0.0021133395 +-0.0046058525 +-0.00013010227 +0.0035384716 +0.020812895 +-0.0056391624 +-0.011770709 +-0.018340679 +-0.0063300687 +-0.007947905 +-0.003727588 +-0.02065734 +0.0029699958 +0.010541084 +0.007587898 +0.0035707266 +0.0056947256 +0.012010468 +-0.0026145543 +-0.00082951214 +-0.024841864 +0.023000976 +0.0073175384 +-0.0008577245 +0.010133235 +-0.0038221406 +0.0040599317 +0.008300181 +-0.015954426 +-0.009452069 +0.019537654 +0.007053385 +0.020223316 +-0.019439712 +0.00051580847 +0.011867977 +0.0019227937 +0.007549535 +-0.004754907 +-0.0019425779 +0.021537306 +-0.0021232076 +0.0024879265 +-0.005071645 +-0.014798247 +3.875834e-05 +0.0050997175 +-0.009265837 +0.008427165 +0.013270955 +-0.0013421965 +-0.0053422097 +0.0067194244 +-0.006687914 +0.00036608885 +0.011113977 +-0.008169284 +0.0076368884 +-0.0039377054 +0.0060417624 +-0.0018232138 +0.001594805 +0.017317431 +0.024158597 +0.02126236 +0.013484674 +0.0035613552 +0.012361987 +0.00815327 +0.009257828 +0.011271133 +-0.015621103 +0.010424623 +0.015365083 +-0.0022235615 +-0.0052003535 +0.009428815 +-0.010205862 +-0.015468391 +-0.007692362 +-0.003234861 +-0.011979452 +-0.013942479 +0.01439309 +0.0058427667 +0.011232523 +-0.04093858 +0.0010153279 +-0.0026129803 +-0.02212285 +0.0018242737 +-0.009153399 +0.013306669 +-0.004508918 +-0.0049180016 +0.004728856 +0.01981984 +-0.03475947 +0.003534932 +0.0029781437 +-0.010762147 +-0.006372661 +0.014930837 +0.0049676816 +0.011424155 +0.01958255 +-0.051688485 +0.004228708 +0.032023624 +0.012477955 +-0.022747057 +-0.008160217 +-0.012265758 +-0.032277185 +-0.0067094644 +-0.0064074737 +-0.0045562247 +-0.0031024837 +0.01379385 +0.004341441 +0.008692998 +0.019098481 +-0.006551594 +-0.011101079 +0.013994797 +-0.013022594 +0.003592907 +-0.029400256 +-0.0049987966 +-0.021044537 +-0.012046591 +0.021235717 +-0.010636975 +-0.0060602925 +0.0032517163 +0.02590824 +-0.015220141 +-0.01308287 +-0.043430205 +0.054191496 +-0.01927325 +0.08590469 +0.032466024 +-3.541523e-05 +0.030877871 +0.010028941 +0.004743324 +-0.019415038 +0.0131198345 +-0.0013813591 +0.017237581 +0.010031396 +-0.0063181175 +-0.0063929027 +-0.010756625 +0.0086806975 +-0.004883064 +0.0064283046 +0.0046253996 +-0.027344989 +0.018070232 +-0.0076556397 +0.01986423 +-0.0057128095 +0.002012173 +0.0019790065 +0.0047991546 +0.0063454327 +0.019068861 +-0.044173565 +0.0007348425 +-0.018268269 +0.014309024 +-0.019629756 +-0.0049780477 +-0.014651013 +-0.0016987136 +0.006703515 +-0.0057465364 +-0.0025843661 +0.01259647 +0.0067180195 +0.0023016278 +0.0143502625 +-0.0035330455 +0.008931148 +0.02727457 +0.003542315 +-0.0058456603 +0.0013430434 +-0.020594018 +0.02356601 +-0.012079201 +0.023050738 +-0.007705499 +-0.0039502666 +-0.026441252 +-0.0027550969 +-0.015690975 +-0.0019019572 +0.010182486 +-0.007265391 +0.0075606545 +0.0018533927 +-0.0069633964 +0.015817387 +-0.006241654 +-0.047461905 +-0.01851534 +0.004308835 +-0.0075994604 +-0.025916219 +-0.0066105747 +0.0046399203 +-0.012722679 +0.022487191 +0.009863725 +-0.0044404585 +-0.018020682 +0.025920901 +-0.0013096898 +0.013072866 +-0.0022409963 +-0.001610163 +-0.004371397 +-0.013081379 +0.049872793 +0.003976624 +0.026449183 +0.018692309 +0.005126329 +-0.006704817 +-0.038995814 +0.032053433 +-0.0008928408 +-0.019352844 +0.027448153 +-0.0073269503 +0.012564201 +0.019521797 +-0.010895962 +0.00018038985 +0.008857177 +0.031089924 +0.0016656222 +0.011378423 +0.003130143 +0.009132332 +0.009711205 +-0.0017063066 +-0.014365848 +0.011932283 +0.013011728 +0.016529271 +0.018045915 +-0.01048424 +-0.008006261 +-0.00364297 +0.021638362 +0.0002995564 +0.0013608136 +-0.051162384 +-0.0038996849 +0.004230872 +-0.007409106 +0.016211908 +-0.008906401 +0.0018840901 +-0.012433594 +-0.017435344 +0.0056426227 +0.00039508447 +-0.0024300872 +0.020305887 +-0.0037572396 +0.005812221 +0.0038835625 +-0.0101802675 +-0.0013398116 +0.0030704497 +-0.013630455 +-0.017621897 +-0.024701176 +-0.0061304057 +0.019060412 +-0.01809177 +0.012448735 +-0.010857578 +-0.0030904994 +-0.019945314 +-0.0118313795 +-0.00910761 +0.0043396256 +0.031743996 +-0.019955218 +-0.022740258 +-0.016124208 +0.0041889744 +0.0008618179 +-0.02912781 +-0.0072959894 +0.021533413 +0.0058838027 +-0.019559726 +0.0147563685 +0.011026163 +0.01644074 +-0.017414954 +-0.025966648 +-0.021316197 +-0.01622998 +0.009315827 +-0.0023433212 +0.0018839152 +-0.0021728175 +0.023967423 +-0.02793369 +0.01634659 +0.0047358167 +0.018341029 +0.0029087905 +-0.00615315 +0.008360033 +-0.0051431064 +0.006523947 +0.02638485 +0.008963559 +0.006163244 +-0.014826935 +-0.015222524 +0.0042689005 +0.052293934 +-0.0045288582 +-0.009180004 +-0.012168175 +0.0027492444 +-0.013002419 +0.011988687 +0.0008089271 +-0.005852489 +-0.022803297 +-0.014374354 +0.012430436 +-0.00269087 +0.0021534353 +-0.0021264919 +-0.03284875 +0.00999745 +0.024885548 +0.0062560984 +0.011497207 +-0.012555291 +-0.0110216895 +-0.023394583 +0.004367558 +0.003286457 +-0.008438161 +-0.012547225 +0.004571019 +0.0038064383 +0.015530079 +0.0064103734 +-0.0059027127 +-0.007183424 +-0.0035664795 +0.0033366499 +-0.0109117 +0.0035518168 +0.007551447 +-0.019462664 +-0.01322118 +0.008611383 +-0.0145727405 +-0.009407512 +-0.016009565 +-0.0017291543 +-0.0032137453 +0.0008304954 +-0.03140269 +0.060149804 +0.009849149 +0.08471278 +0.0028454019 +0.009418961 +0.020572215 +0.0055088485 +-0.008660724 +-0.0026757813 +-0.014828552 +0.006972962 +0.0017517743 +0.002309001 +-0.006418038 +0.012626741 +-0.017857974 +0.010040806 +-0.0009293207 +0.0118124345 +0.0018634154 +0.009705395 +-0.004139745 +0.024249475 +0.0016781101 +-0.031410947 +-0.0054021142 +0.0023745093 +-0.012481025 +0.0104965465 +-0.004239929 +-0.011694846 +0.0040562344 +-0.018880213 +-0.011353994 +0.012996021 +-0.003421772 +0.026271205 +-0.00527652 +0.020102838 +-0.016527452 +-0.0065365825 +0.00013018462 +-0.015645066 +0.011765897 +0.011282334 +-0.014394079 +0.0025779924 +0.0027989268 +-0.018423282 +0.015148707 +-0.0033188723 +-0.011209933 +-0.035900112 +0.011011414 +-0.0281448 +-0.000918322 +0.01943339 +-0.002820183 +-0.005605084 +-0.018825602 +-0.0037779135 +-0.014500143 +-0.0089024985 +-0.035058256 +-0.005124983 +0.022537999 +0.001584599 +0.0008946078 +0.007004238 +-0.00829051 +-0.010051637 +-0.016912995 +0.020897571 +-0.015332611 +0.007729262 +0.002310206 +0.0067466395 +0.0079353405 +0.0087739555 +0.036825534 +0.016833374 +0.002342031 +-0.017619455 +-0.002585122 +0.016104667 +0.0037690266 +0.013307941 +0.017955491 +0.015262347 +0.014337139 +0.0032161416 +0.032766536 +0.03544505 +-0.006873293 +-0.008873896 +-0.009686444 +-0.0104609225 +-0.016759772 +-9.76986e-05 +-0.009220172 +0.0124307135 +-0.004628146 +-0.010837488 +-0.023194745 +-0.03260698 +0.012290698 +0.0093375845 +0.008404367 +-0.011690496 +0.020026507 +-0.024837062 +-0.018761903 +0.009358591 +0.0014705261 +0.0027698136 +-0.001159236 +0.0060348506 +0.011965553 +0.009806397 +0.003483858 +-0.010620198 +-0.007988802 +-0.0044380813 +-0.0023356518 +0.0049377372 +0.006433103 +0.014417684 +-0.0018193002 +0.013190257 +0.012134947 +0.013140006 +0.018880375 +-0.008830531 +0.000804252 +0.002107618 +-0.005425868 +-0.0078081177 +-0.026657596 +-0.0036627916 +0.00017060443 +0.012899006 +-0.015551707 +-0.008815659 +0.01994882 +-0.0006127052 +-0.0037642056 +0.0030083342 +-0.006084457 +0.0020201006 +0.014908747 +-0.000569973 +-0.009157131 +-0.0028504105 +-0.018509816 +0.01511683 +-0.0006382019 +0.016866922 +-0.016007837 +-0.0012217283 +0.0025088005 +-0.011143936 +0.02755588 +0.015619085 +0.015429924 +-0.0032890358 +-0.0016306357 +-0.0007222193 +0.02533241 +0.002389851 +-0.023747513 +-0.015913282 +-0.024905695 +-0.01733989 +0.003379837 +-0.021431731 +0.015730876 +-0.0042401017 +0.0067997323 +-0.010574494 +-0.022326834 +0.00268365 +-0.010149112 +-0.0032923513 +-0.022312442 +0.00710233 +0.016380178 +-0.010407611 +0.010227555 +0.0017684583 +-0.01774059 +-0.012007657 +0.011495039 +0.024012472 +0.0028837058 +0.018717049 +-0.007452249 +0.006268495 +-0.008023402 +0.007934733 +0.0065966845 +-0.00086351833 +-0.01180772 +0.0069575985 +0.014035281 +-0.0029122944 +-0.00803295 +-0.00074464886 +-0.0074897073 +-0.015946163 +0.008108798 +0.0007046257 +0.0055475794 +0.018230913 +-0.01943326 +-0.03319802 +0.0072841323 +-0.0057765422 +0.0045591663 +-0.008794951 +-0.006946457 +0.0044093505 +-0.009093102 +0.024106953 +-0.017307885 +-0.0004674973 +-0.008865393 +0.014592242 +-0.019618826 +-0.016813923 +0.015949838 +-0.00623171 +0.0069575678 +-0.011058512 +0.002231742 +-0.014397285 +0.013243712 +0.008646326 +0.004428568 +-0.0021882954 +-0.036313724 +0.013741238 +-0.01139027 +0.063575804 +0.016967362 +-0.0069443006 +-0.015148108 +-0.00011637939 +0.010595607 +0.00833554 +-0.019948402 +0.020653902 +0.008431372 +-0.0023124195 +0.008144314 +0.00075092015 +0.004769139 +0.0050496915 +-0.00880168 +0.005464723 +-0.0015671086 +0.001648287 +-0.0075644185 +-0.0115064215 +0.009100518 +0.00499857 +0.0025894777 +0.004357899 +-0.034176365 +0.004695576 +0.0052224747 +0.012532239 +0.015421067 +0.0038473643 +-0.004905996 +-0.052289292 +-0.0047654966 +-0.023428807 +0.006773075 +-0.0030047353 +-0.020299688 +-0.002731822 +-0.019033736 +-0.0335116 +0.021932283 +-0.024495766 +0.006264395 +-0.009509471 +-0.005044017 +-0.013926622 +0.011309634 +-0.010555797 +-0.012746482 +0.02796842 +-0.0048208525 +0.0077312347 +-0.014622175 +-0.011650283 +-0.009228538 +0.010413361 +-0.02642489 +0.03536778 +-0.003711699 +0.06349597 +-0.0011612122 +0.0014762454 +0.013013539 +0.006079087 +0.0011981681 +0.01839352 +-0.008973983 +0.011472763 +0.01192336 +0.0016338963 +0.023164371 +-0.003484268 +0.0035095173 +0.00089686597 +-0.0008788185 +-0.0015948601 +0.010296351 +-0.0010739153 +-0.031824786 +-0.008480435 +-0.026617816 +0.005878082 +0.0006839931 +0.0071277027 +0.0060827252 +0.0021697585 +-0.0053064832 +-0.012177793 +0.004079262 +-0.006662378 +-0.031957183 +0.044620313 +-0.00077670027 +-0.014308879 +-0.013458057 +-0.008798526 +-0.0036738536 +-0.0057948753 +-0.011365801 +-0.0091341445 +0.008003058 +0.011138085 +0.0030968916 +0.014602263 +0.0059549185 +-0.0013456654 +0.0026359716 +0.0063842335 +0.002186261 +-0.013844355 +-0.0024902043 +-0.003227611 +0.008292621 +-0.009485245 +0.0023336154 +-0.017690593 +-0.015323625 +-4.0793857e-05 +-0.0016180122 +-0.0102892695 +-0.027013116 +-0.007960702 +0.010350561 +0.023609417 +-0.02075418 +0.011714291 +-0.003193488 +0.0015982816 +-0.030199839 +0.02436128 +0.009452665 +0.009556277 +-0.005606677 +-0.005338841 +0.0014857954 +-0.003171066 +0.012046628 +0.006676767 +0.00043847703 +-0.015780376 +-0.011745008 +-0.009261328 +0.00078324456 +-0.015071074 +0.015770251 +-0.006377609 +0.01182793 +0.0006304307 +0.009822286 +0.020689085 +0.010066074 +0.011152496 +-0.017669119 +0.018332245 +-0.017912595 +-0.020917956 +0.003948088 +-0.0022479726 +-0.01831387 +0.024664117 +-0.038736057 +0.005712342 +-0.006014715 +0.028454239 +-0.015998313 +-0.0026160001 +-0.0059607644 +-0.016232323 +0.008057032 +0.00298013 +-0.026206525 +0.00087796355 +-0.012685023 +0.012854337 +-0.00048319285 +-0.010892761 +0.015647136 +-0.006139769 +-0.0023770258 +0.009461721 +-0.01744313 +-0.00720354 +-0.023977904 +0.0095179705 +0.024402443 +0.0048574167 +-6.0453665e-05 +0.004966814 +-0.016960109 +-0.019289514 +-0.010558998 +-0.007855212 +-0.005283118 +0.0007500701 +-0.017526383 +-0.00446808 +-0.0019111545 +-0.0058350856 +-0.016409671 +0.014626611 +0.001163595 +-0.023592193 +0.0027203471 +0.01757262 +-0.006781169 +0.004933721 +-0.0038684774 +-0.0044357157 +-0.01462478 +0.0052290377 +-0.014202406 +-0.002693228 +0.0010040418 +0.027170317 +-0.0096476665 +-0.04602571 +0.016111646 +0.008915918 +0.015454914 +-0.00970091 +0.018172637 +0.008543997 +-0.027426064 +-0.026413122 +-0.023202132 +-0.010340434 +-0.005930504 +0.02759682 +-0.019543499 +-0.0119186845 +0.025411496 +0.02327228 +-0.0014011484 +0.0029080145 +-0.0005546557 +0.014154203 +-0.0058654645 +0.012045143 +0.0052068187 +0.0065620095 +0.018500874 +0.0075591127 +0.0029888542 +-0.023268381 +-0.011663937 +-0.017660784 +-0.011613426 +-0.0342389 +-0.015071772 +0.015584938 +-0.0016890228 +0.018787902 +0.0017534043 +0.02897964 +-0.0032139146 +-0.008723531 +-0.051851884 +-0.011510396 +-0.0045136856 +0.019819723 +-0.00017342344 +0.014618198 +-0.008176551 +-0.008948507 +0.04013974 +-0.0130744 +-0.03301121 +-0.00749258 +-0.013544936 +0.00059229636 +0.03320332 +-0.003997805 +0.030868126 +0.022010442 +-0.003981208 +-0.0017250064 +0.0044621667 +-0.02254619 +0.0018286764 +0.0048333285 +-0.002691866 +0.017002316 +0.003956435 +0.013532914 +0.014540113 +0.013322395 +-0.02338967 +-0.0072166417 +0.0059809866 +0.007418843 +0.038195968 +0.007898532 +0.009497665 +-0.023645496 +-0.02438826 +-0.012658192 +0.0026800584 +-0.020569228 +0.009053544 +-0.009527887 +-0.01627556 +0.019983076 +-0.012497462 +0.014691156 +-0.014374651 +-0.0043076505 +-0.0020162852 +-0.028072782 +-0.01398341 +0.0050496203 +-0.010539688 +0.0023516717 +-0.001716681 +0.0074480586 +0.0015535378 +-0.038980994 +-0.018795181 +-0.03081024 +0.0058317124 +-0.0059300913 +0.009593018 +0.01654104 +0.011167354 +-0.01303845 +0.0055685164 +-0.015996078 +0.024901072 +-0.026866674 +-0.013058415 +-0.005338367 +0.0050781444 +0.0010009296 +-0.0057339105 +-0.017389026 +0.013385487 +-0.041610535 +-0.01825043 +0.0022781652 +0.0048147975 +0.017655231 +-0.030466344 +-0.015684491 +-0.018728776 +0.040191904 +-0.012042925 +0.0352211 +-0.002219682 +0.0015114717 +-0.0014800068 +-0.0058700643 +0.0015508792 +0.004647437 +-0.006184845 +0.0034511902 +-0.015972633 +-0.005589481 +-0.0002298133 +0.06169619 +0.0039158547 +0.014290663 +0.026557893 +0.0058876346 +-0.0036711006 +0.014353788 +0.010449216 +-0.0032980188 +-0.0088653015 +0.018766947 +-0.00044522816 +-0.0196938 +0.0004575129 +0.001978784 +-0.008805445 +0.005113658 +0.012065222 +-0.0026747384 +-0.032577068 +-0.0044919965 +0.02403225 +-0.0056142057 +0.008810182 +-0.027746355 +0.0045746975 +-0.002249536 +0.010126163 +-0.010968981 +-0.024442391 +0.0050089676 +-0.00013417743 +0.009699119 +0.064411335 +-0.013947009 +0.029289193 +-0.007750351 +0.016888063 +-0.010940623 +0.0047725704 +-0.007176298 +0.0063135023 +-0.011970317 +-0.011745699 +-0.0024364053 +-0.0062883683 +0.022819933 +-0.004921586 +0.010208272 +-0.012491606 +-0.006571999 +-0.0030134951 +-0.002963194 +0.01782588 +0.017382199 +-0.010129436 +-5.6817484e-05 +-0.01501093 +0.0024616653 +-0.0069861873 +0.0146274725 +0.010478684 +-0.011858372 +0.012485265 +0.0029806863 +-0.008314599 +0.015075019 +-0.007706417 +-0.031974684 +-0.0066419505 +-0.021309197 +-0.0162936 +-0.020045618 +-0.011832992 +-0.011306546 +0.0057191704 +-0.007820453 +-0.010059787 +-0.007867414 +0.005481768 +-0.006478295 +0.0063746953 +0.011112887 +-0.010900415 +0.00047906872 +0.0010348082 +0.005228043 +-0.010053515 +-0.00922971 +0.016613862 +-0.001291957 +-0.017235009 +-0.027001783 +0.001865687 +-0.027148316 +-0.0058950535 +-0.0046426365 +0.013265224 +0.015621436 +-0.011498928 +-0.011258831 +-0.010776425 +-0.012077647 +0.01849169 +-0.0035528282 +-0.012826683 +0.009306583 +0.0065903156 +0.005864389 +-0.0033616144 +0.001990652 +0.0029558341 +0.019539475 +0.013162643 +0.012917984 +-0.02355055 +-0.0032455502 +-0.013107629 +0.0030782656 +-0.016619714 +0.023116337 +-0.0019474077 +0.025569769 +-0.005563324 +-0.00077302585 +0.0008085696 +0.0021790962 +0.0031244326 +0.008686905 +0.0028854178 +-0.004383639 +-0.008453644 +-0.011116537 +0.018792683 +-0.0024595738 +-0.007224107 +-0.017235918 +0.034569353 +0.0101268785 +-0.008704431 +-0.014727285 +0.031668752 +-0.014411958 +-0.00413488 +0.023324704 +-0.0021379641 +-0.02856126 +0.016253207 +-0.02850633 +0.020273754 +0.0013405808 +0.018674657 +0.0019698767 +0.010491426 +0.0031961414 +-0.012946781 +0.040173974 +0.006598729 +-0.041984517 +0.0007851261 +0.011020326 +-0.00464423 +0.017918883 +-0.036520176 +0.014728658 +-0.0117675895 +0.021205932 +-0.031286087 +0.019013377 +0.02861029 +0.009308229 +-0.0068037994 +-0.009490403 +-0.022876665 +0.008372066 +-0.01871405 +0.016533805 +0.011403023 +-0.0077559515 +0.017876657 +-0.00538726 +-0.003298099 +0.013012984 +0.0066698403 +-0.009478007 +-0.020772818 +0.02134066 +-0.03564061 +0.002987225 +-0.0020622949 +0.028815132 +-0.02184118 +-0.03683712 +-0.0011257959 +-0.026786191 +-0.017106831 +0.004502147 +0.025103321 +-0.0017517563 +-0.020730034 +0.009658051 +0.009388711 +-0.0028314844 +-0.0037907185 +-0.0017948524 +0.013373492 +-0.01390026 +0.04110368 +-0.021320524 +-0.00075975154 +-0.02350581 +0.011013788 +0.004031531 +0.008072834 +0.06423317 +-0.01792732 +-0.012162849 +0.0030907379 +-0.012568791 +0.008473038 +0.012392415 +-0.020726632 +-0.0054284087 +0.0073398924 +-0.019524755 +0.010123316 +0.0062990775 +0.013425009 +0.02054752 +-0.001394722 +-0.008126295 +-0.012031969 +-0.0022563816 +-0.027309382 +0.003237478 +-0.0018072352 +-0.018982457 +-0.0012840263 +0.011516908 +0.021506608 +0.0017661768 +0.0104987575 +-0.047966324 +0.01693569 +0.002826609 +-0.007691557 +0.030680498 +0.008303819 +-0.00042217138 +-0.009817174 +-0.0006964964 +-0.005306354 +0.0177849 +-0.014491486 +0.005478131 +0.0004428098 +-0.019788496 +-0.029056102 +0.00077693607 +0.022239128 +-0.020034496 +0.01618211 +0.0002664788 +-0.0056558712 +-0.0030335262 +-0.027060324 +0.005105784 +0.0028829074 +0.008336067 +0.0012896976 +-0.006021865 +0.009818996 +-0.021953354 +-0.015934475 +0.020849692 +0.0050577917 +-0.0014065105 +-0.00031274636 +-0.0120376 +-0.021135574 +0.024950175 +0.01267783 +-0.006113009 +-0.011713805 +-0.0112089515 +-0.0064710896 +-0.016585886 +-0.011053057 +-0.017339299 +0.036296755 +0.011590204 +0.0076013855 +-0.011966402 +-0.016370444 +-0.022803972 +0.008969567 +0.012790353 +-0.0038900194 +0.017745009 +0.0019175432 +0.009018462 +-0.006940546 +4.2117692e-05 +-0.011633961 +-0.005740672 +0.0151578095 +0.0024438938 +-0.026882306 +0.00011803757 +0.00725967 +0.0018472966 +0.0041849804 +0.0006881967 +0.011888106 +-0.004745173 +-0.0073310966 +0.022048388 +0.027176179 +-0.0075881053 +0.027057601 +0.0039239316 +-0.008386859 +-0.009763514 +-0.0042334013 +-0.05020567 +0.007726262 +-0.0030493732 +0.00091434375 +-0.006011563 +0.0072038914 +0.009031173 +-0.01918874 +0.03543909 +-0.002336824 +0.019862931 +-0.0068569896 +0.009233432 +-0.03623346 +0.00024065138 +0.026077935 +0.020048793 +-0.016768852 +0.020745333 +-0.0071691293 +-0.036902834 +0.0061343946 +0.03146733 +-0.0041674143 +-0.018586405 +-0.011138065 +-0.02609997 +0.0076686298 +0.006737515 +0.013201423 +-0.025692746 +0.009391594 +0.01584498 +0.011803083 +-0.0028002746 +0.011014256 +0.010437704 +-0.005706262 +-0.015187599 +0.009394113 +-0.0048413225 +-0.000375921 +0.003418314 +0.008476065 +-0.008421051 +0.002684203 +-0.00813396 +-0.009063146 +-0.012581099 +0.0052448856 +0.038796056 +0.017775469 +0.014300047 +-0.01981344 +-0.019674307 +0.01627108 +0.0037716958 +-0.031445596 +0.024726981 +0.019448942 +0.014180446 +-0.00881176 +-0.008149223 +0.0033093658 +0.009401206 +-0.0060568033 +-0.011404851 +-0.024418185 +-0.017974624 +-0.019544348 +0.018205334 +0.005265028 +0.0326715 +-0.028739125 +-0.014064397 +0.020039642 +0.00030781186 +0.03344863 +-0.007855308 +-0.0052613276 +0.008841161 +0.004562225 +-0.011871647 +0.008289008 +-0.0020822708 +-0.0076273745 +0.023811264 +0.0056583416 +-0.0025039895 +0.005560424 +-0.005908316 +0.009717163 +0.0043668724 +0.007352595 +-0.0033182602 +-0.009125486 +0.017300153 +0.00528315 +0.0073844627 +-0.003472898 +0.016503768 +0.025036694 +0.0035242015 +-0.014931012 +-0.010597688 +-0.001701559 +-0.035912972 +-0.0044726334 +0.022869708 +-0.017526086 +0.021298537 +-0.0074578663 +0.0088045625 +0.008582013 +-0.002541646 +0.010688965 +0.021050936 +0.0014896209 +-0.006327516 +0.00905011 +-0.003090608 +0.011687964 +0.0050511835 +-0.0047874046 +-0.011952269 +0.01600096 +0.017608786 +0.005951147 +0.016416749 +-0.0012156136 +-0.007887747 +0.0062238947 +0.005042505 +-0.018662104 +0.0036319506 +0.01188488 +0.011620057 +-0.0019561187 +0.03130656 +-0.033313595 +-0.010843545 +-0.0022978026 +-0.0062411227 +-0.0029370917 +-0.0097336 +-0.010157449 +-0.017280031 +0.02557518 +-0.006290501 +0.015131363 +0.0058096726 +0.0035881305 +-0.0063515375 +0.012601387 +-0.019650467 +-0.0065234606 +0.036215823 +-0.0006497448 +0.008861161 +-0.01164405 +0.021657025 +-0.00093356567 +-0.014514346 +-0.009363489 +-0.027485376 +-0.003008145 +0.02114786 +-0.0023222086 +-0.00954295 +0.025330955 +0.014059693 +0.0071628606 +0.015771316 +-0.008467193 +-0.013114586 +-0.022111056 +0.006138781 +-0.006823675 +-0.0087376265 +0.01895492 +0.0027052802 +0.007494235 +0.0041440725 +-0.023372075 +-0.0014719566 +0.011772382 +-0.0103639215 +0.014451587 +0.0022088778 +0.005557029 +-0.015860893 +-0.00644285 +0.014042608 +-0.0035500578 +0.004307356 +-0.007579278 +0.0046312967 +0.02312011 +-0.0102580795 +0.019253146 +0.008296735 +0.01255438 +-0.00644109 +0.013404454 +0.0016495086 +0.013812234 +-0.006032278 +-0.019684644 +-0.010864272 +-0.0017881341 +-0.013181393 +0.0060051573 +0.0009185521 +-0.0051664906 +-0.0012878267 +0.011120675 +0.034116827 +-0.0072368267 +0.018162709 +-0.008503742 +0.01450405 +0.009041853 +-0.0033641653 +-0.006470481 +0.0025980833 +-0.014858393 +0.0044033807 +0.0110630775 +0.0098525975 +-0.0034169191 +0.010441689 +0.018081963 +-0.0070071565 +-0.0020210054 +0.008485243 +0.0073102713 +0.0055115004 +-0.002070197 +-0.011069546 +-0.01536169 +0.005718533 +-0.0028191109 +-0.0038078127 +-0.013149023 +-0.0059463372 +0.015967825 +-0.015021722 +0.0037193059 +-0.02154936 +-0.014408602 +0.03060447 +0.009191212 +-0.016913349 +-0.0027955293 +-0.0021503922 +-0.022576904 +0.0075980425 +0.008081914 +-0.01039712 +-0.010858024 +-0.0004146285 +0.0075089354 +0.004994685 +0.010114254 +0.030902639 +-0.0005069283 +0.0014727016 +-0.007490557 +-0.0020106395 +-0.0023902485 +-0.013225155 +0.010175947 +-0.011140742 +-0.006684561 +-0.0063199583 +-0.016831214 +0.006199181 +-0.007993361 +-0.02745928 +-0.027588654 +-0.008055212 +0.02674124 +0.01933632 +-0.014976918 +-0.017984701 +0.009229097 +0.014430739 +-0.032734424 +0.00335511 +0.008422522 +0.00106629 +-0.014761515 +0.00884762 +0.016732605 +0.00802258 +0.022285799 +0.032846145 +0.0014399373 +-0.015566781 +0.0024919184 +-0.0053793397 +0.019001972 +-0.00880035 +0.0014265893 +0.0041370005 +-0.005530978 +0.04674471 +0.033229973 +-0.0026356245 +-0.0014150012 +0.025789931 +-0.0019438736 +-0.0033167999 +-0.03373196 +0.0073321643 +0.015538229 +-0.0010497442 +0.011874068 +0.0074021714 +-0.047380812 +-0.03108516 +-0.023425627 +0.004793343 +0.007911746 +-0.015868293 +0.01901261 +-0.03909183 +-0.0033012878 +-0.006086103 +0.001445336 +0.008984603 +0.012897021 +0.00034993305 +0.0077673947 +-0.003696381 +0.0012959735 +0.024603145 +-0.004716107 +0.009641036 +0.009019267 +0.029543506 +-0.006831701 +0.009170295 +0.009913786 +-0.039181698 +-0.008966747 +0.0054841563 +-0.038023632 +-0.005484943 +-0.004196831 +-0.0020735422 +-0.001232431 +-0.013005138 +-0.0382465 +0.0069427025 +-0.01838735 +-0.018215815 +-0.009171927 +-0.0021269189 +0.008266999 +0.023840923 +0.0046040853 +-0.0017277218 +-0.0009886019 +-0.013156707 +-0.0073452266 +-0.012495906 +-0.016975408 +0.02212365 +-0.0017433648 +0.008797906 +-0.009512727 +0.001998913 +0.005372106 +-0.010242902 +-0.01399141 +0.022357898 +-0.017246565 +0.011749137 +0.016689008 +0.0038241136 +0.023651825 +-0.025928203 +-0.0011264844 +-0.0043365736 +-0.013155422 +-0.022462802 +-0.010270715 +-0.0062553543 +-0.00033140695 +0.005689783 +-0.021005053 +-0.013322868 +0.014430744 +0.008655154 +0.0041809985 +0.013282176 +0.0071325004 +0.004279674 +0.032058332 +0.021496065 +0.009126427 +0.010269454 +-0.00054154673 +-0.009172052 +-0.0042953747 +-0.0002620609 +0.0047510127 +-0.0047285436 +-0.025111202 +0.0051663476 +-0.0028531563 +-0.010186513 +0.007145228 +0.01907555 +-0.01101336 +0.012185054 +-0.0014331936 +0.007332223 +0.007014429 +0.010736992 +-0.010296729 +-0.016546352 +-0.0020915407 +-0.014143145 +-0.008611206 +0.017639993 +0.016905105 +-0.022419367 +0.017024519 +0.01582017 +-0.008011413 +0.010746252 +0.0013563029 +0.014108614 +-0.007378819 +-0.007756497 +0.0005974077 +-0.002842085 +0.015132783 +-0.0072143776 +-0.012732472 +0.012767933 +-0.0034749967 +0.025870929 +-0.010147548 +-0.017256757 +-0.0036581894 +-0.0014877806 +0.010850367 +0.0059475023 +0.0051132697 +-0.02128119 +-0.0102994675 +0.00034679403 +0.022809457 +-0.0047098356 +0.0046956628 +0.010056288 +0.005280152 +-0.009225433 +0.016283777 +0.010539795 +0.00811965 +0.01206548 +0.0026559476 +-0.02320107 +0.012108264 +-0.023653252 +-0.0045911213 +-0.009816679 +-0.014809396 +-0.0086968765 +0.013242525 +-0.010161761 +-0.02487271 +-0.007602866 +0.017664243 +-0.008998298 +0.019472115 +-0.005437715 +-0.0023388169 +0.012551472 +-0.00022888916 +0.008110351 +0.030642254 +-0.016253235 +-0.03386407 +-0.0065862616 +0.016370429 +0.012851968 +-0.0049758903 +-0.0007335832 +0.011467003 +-0.013887658 +0.013509342 +0.011065909 +0.0129305115 +0.002244447 +-0.015499841 +-0.0040105865 +-0.012973299 +0.013042941 +-0.013591461 +-0.0018751153 +-0.012430234 +-0.0066598677 +0.014441678 +-0.0014115288 +-0.01579716 +-0.0033439968 +-0.005626485 +0.02346633 +0.007011591 +-0.00047939148 +-0.0071123117 +0.030865824 +0.0010690055 +0.00053628307 +0.031480484 +-0.0065281447 +-0.012490556 +0.008853717 +0.001817603 +-0.028853634 +-0.0119438125 +-0.008144889 +-0.001067161 +-0.032064296 +0.004528305 +-0.022086082 +0.0023441545 +-4.138314e-05 +0.0014772576 +-0.016316982 +-0.016913198 +-0.0075753336 +0.008394926 +-0.0032079755 +0.015818125 +-0.044047307 +-0.0044652666 +0.028774092 +-0.015307618 +-0.0041759196 +0.017912485 +-0.002091908 +-0.007615762 +0.0014777118 +0.027032046 +0.018474806 +-0.01433984 +-0.017935751 +0.021586612 +0.012817684 +0.02251496 +0.006999578 +-0.005985876 +0.008022287 +0.028970601 +-0.015060862 +-0.017112847 +0.012764083 +0.0046100877 +-0.010427514 +-0.010198659 +-0.019156562 +-0.013115114 +0.017680058 +-0.012590722 +-0.0036529528 +-0.012495284 +0.0005133768 +-0.01379618 +0.023820015 +-0.017051008 +0.016288353 +-0.008610823 +-0.019050756 +0.005332275 +-0.0102553 +0.00020836169 +0.014780168 +0.0031623114 +-0.010618754 +-0.007611175 +-0.020988395 +-0.0069276607 +-0.02802979 +0.0018426694 +-0.0025610947 +0.010230614 +-0.010802004 +0.006275145 +-0.012776695 +-0.010144667 +-0.024293656 +0.0073307464 +-0.007349984 +0.0027485867 +0.014526994 +-0.005169336 +-0.005411031 +0.0115065845 +-0.013756055 +-0.0040057376 +-0.015787134 +-0.013848507 +-0.0037718136 +-0.0044108196 +-0.0025122934 +-0.008927427 +0.011576353 +0.021571636 +0.021258162 +-0.017743547 +0.015851153 +0.0022100029 +-0.012225757 +0.033469476 +-0.007804258 +-0.0009853084 +-0.013679526 +-0.008760556 +-0.00923892 +0.014404638 +0.0053753164 +-0.013556649 +0.0057134153 +-0.0298576 +-0.001185663 +-0.017865896 +-0.0009956666 +0.016030204 +-0.0027128756 +0.008906702 +0.015150553 +-0.008158283 +0.008807209 +-0.01636646 +0.010965642 +0.014796315 +0.003007605 +-0.007491917 +0.0017935827 +0.0074585457 +-0.01959329 +-0.0016288497 +-0.033181634 +0.0037052245 +0.003919887 +-0.004018069 +-0.02691049 +-0.0027753671 +0.024765583 +0.012440631 +0.0070577445 +0.020047551 +-0.031744193 +-0.0010328444 +0.00923973 +-0.0033869292 +-0.020644711 +0.0057779416 +-0.024085006 +0.008362404 +0.006901618 +0.012976185 +0.008376334 +0.0044086217 +0.0037759948 +-0.0031631317 +0.00917909 +0.0037456292 +-0.016225105 +0.0017291944 +0.0032579782 +-0.01412895 +0.034253623 +-0.044053026 +-0.0066230055 +0.003391176 +0.025457023 +-0.014454797 +-0.0018807073 +0.0118927825 +-0.0044910223 +0.008784025 +-0.019119132 +-0.018739197 +-0.0017266372 +-0.025046028 +0.0076431567 +0.00403885 +-0.023116454 +0.0005702635 +-0.0028789758 +0.0017557779 +0.012383473 +0.013433733 +-0.0014193791 +-0.021387342 +0.0285471 +-0.027026717 +-0.018521855 +-0.005831828 +0.012814594 +-0.032912143 +-0.02063387 +0.0098116305 +-0.027123738 +-0.0071680397 +-0.016372142 +0.0016997679 +-0.017050875 +-0.014898812 +0.012704307 +-0.020884782 +-0.008882606 +0.009947578 +-0.001751181 +-0.003378772 +0.0036582744 +0.012266929 +-0.006470775 +-0.011952575 +-0.00055532344 +-0.0022973556 +0.008793085 +-0.017406775 +0.05994067 +0.012756219 +0.0005606906 +0.008669198 +-0.015940702 +0.008151084 +0.029547213 +0.0021340314 +0.018000867 +-0.0036195135 +-0.0056315567 +-0.0014525256 +-0.00028131926 +-0.014487449 +-0.020563023 +0.006641736 +0.0050730035 +0.002025325 +0.0007345158 +0.013265331 +-0.005607032 +0.021422531 +-0.011637878 +0.019367646 +-0.021790935 +-0.008219816 +-0.0209091 +0.011172563 +-0.04648663 +0.02662941 +0.0105081005 +-0.012015367 +0.020369327 +0.010621673 +-0.01709542 +-0.0081964005 +-0.00885021 +-0.002603571 +0.021460405 +0.0010288089 +-6.699174e-05 +-0.0009265815 +-0.0010978093 +-0.0026845532 +-0.00013563716 +-0.017943425 +-0.03719169 +0.009843152 +-0.0074896184 +-0.0061540282 +-0.0054271184 +-0.006484501 +-0.011823087 +0.012756384 +0.010810063 +0.0100874 +-0.0009674425 +-0.010726451 +-0.016210578 +-0.005099836 +0.0016120084 +0.018314715 +-0.011785217 +0.0057140985 +-0.002474498 +-0.014764539 +-0.0028826827 +-0.024871198 +-0.015684325 +-0.022098567 +0.01638538 +0.013302681 +-0.0077201505 +0.009196896 +-0.01201275 +0.024677841 +0.020680798 +-0.0034254126 +-0.013234443 +-0.0014535612 +0.0018426188 +-0.011146053 +0.019407632 +0.015305798 +-0.0014680341 +0.007055942 +0.0079256985 +0.0035037752 +-0.042868264 +-0.016623523 +-0.003117566 +-0.014452843 +0.01134376 +-0.018179834 +-0.01696273 +0.015102014 +0.021504804 +-0.0035152852 +-0.0054031033 +0.0033904936 +0.00014367062 +-0.008846734 +0.013379802 +0.023423748 +0.006480626 +0.01873798 +-0.010795649 +-0.012306886 +-0.0167305 +-0.010327527 +-0.003370171 +0.03887292 +-0.015367066 +-0.0074276603 +0.030104905 +-0.007441191 +0.026884247 +-0.03337159 +0.015656197 +-0.008397609 +-0.011321418 +0.0019945859 +0.008194527 +0.018858379 +0.0021857491 +0.013612764 +0.008696404 +-0.0071354765 +0.028016273 +0.026454877 +-0.011524878 +-0.020182792 +-0.00724902 +-0.027184606 +-0.017310876 +-0.009148217 +0.001581879 +0.003899416 +0.007725784 +0.009029278 +-0.016018491 +-0.0027829167 +0.022165276 +-0.0009075596 +-0.017774768 +-0.0029031287 +-0.0037085244 +-0.006911834 +-0.0015779247 +-0.011900937 +-0.0020477497 +-0.009087211 +-0.011851687 +0.011455514 +-0.016507274 +-0.0039629173 +9.0394955e-05 +-0.017664576 +-0.03620615 +0.017540565 +0.0035242112 +-0.023034718 +-0.0064768684 +0.0044485624 +0.01956194 +-0.0067126206 +-0.03168636 +-0.0042350213 +-0.013141695 +-0.010348621 +0.0147351315 +0.0116635235 +-0.03364637 +-0.0034856668 +0.033491857 +-0.012067867 +-0.04046173 +-0.052471735 +0.0217791 +0.0027755108 +-0.016434865 +0.017609913 +-0.02295125 +0.036244955 +-0.025889393 +0.00030742283 +0.026678381 +0.00548347 +-0.008385163 +-0.006417092 +0.016990965 +0.013321578 +0.008139508 +-0.0038166246 +-0.006308609 +-0.012426031 +0.03568581 +-0.007854499 +-0.00651269 +-0.017629132 +-0.014063783 +0.028969577 +0.005366872 +0.05191558 +0.00188128 +0.0051766546 +0.029993055 +0.006050748 +-0.0039313966 +0.0021354463 +0.025552757 +0.008345969 +-0.010358383 +0.0009397803 +-0.019106477 +0.0046982565 +0.0032836956 +0.014635888 +-0.0021258513 +-0.055249628 +0.006771978 +0.0010532482 +-0.0029353204 +-0.018351572 +-0.009422464 +0.021798132 +0.029888267 +0.013102881 +-0.010349614 +5.354239e-05 +0.0023804703 +0.025259087 +0.003835411 +-0.00016384291 +0.0033678426 +0.0047816373 +0.017348662 +0.02658858 +-0.018354917 +0.0037435887 +0.00013590364 +-0.009780967 +-0.016470896 +-0.011832237 +0.017617898 +0.004335889 +0.024235819 +0.013403409 +0.015863845 +-0.007531491 +0.0051271534 +-0.005170706 +-0.0016992599 +-0.03751253 +-0.01645572 +0.008563482 +-0.0011713958 +0.039593313 +-0.0057442905 +-0.010611391 +-0.007539859 +0.0007031957 +-0.01783685 +0.010978293 +-0.016324935 +0.011985109 +0.0033851583 +-0.0048993304 +0.01770311 +0.012349744 +-0.003096963 +-0.02310271 +-0.01476371 +0.00444915 +-0.025565716 +-0.0075050993 +-0.0025857615 +-0.014835685 +-0.033312876 +0.0069612563 +0.01972526 +-0.014554799 +0.0045087966 +-0.0075737024 +0.006929421 +-0.0045125135 +-0.017888129 +-0.008467618 +0.013283937 +0.02988868 +-0.021253213 +-0.007343659 +-0.01628629 +-0.0062836614 +0.010640886 +0.024370875 +0.008188935 +-0.009179561 +0.028431289 +-0.005829516 +-0.028117374 +0.0019266785 +0.005229165 +-0.027468957 +-0.0150704 +-0.012340549 +0.0059619164 +0.0038378772 +-0.027887335 +0.016395623 +0.015417883 +0.004349879 +0.023363473 +0.020868734 +0.0023074872 +0.0005175199 +0.0038408744 +-0.0059853727 +-0.01762433 +0.017126545 +-0.003870072 +-0.00010554276 +0.006949262 +5.5903984e-05 +0.01437968 +0.0027789434 +0.035300687 +0.014415118 +-0.0012032731 +-0.028172702 +0.0009959732 +0.017615234 +-0.016503919 +-0.019263038 +0.0023257204 +0.032097008 +0.0016448993 +0.009596331 +0.011795734 +-0.021130515 +0.0076712132 +-0.0047768047 +0.0059377817 +-0.011336614 +-0.04136706 +-0.0043424624 +-0.022093415 +-0.004868644 +-0.011276845 +0.006866648 +0.009017455 +-0.008837353 +-0.0068053347 +-0.0007504005 +0.0058206497 +0.0075251576 +-0.025756823 +0.008183948 +-0.01972151 +0.0011152352 +0.0070123263 +-0.014631109 +-0.015745945 +-0.0070875506 +0.005728066 +-0.032066938 +-0.0009667986 +-0.010967315 +-0.03685221 +-0.040977824 +-0.021615997 +0.0005165521 +0.005730531 +0.001695528 +-0.0014660921 +0.030671924 +0.0011263504 +-0.009777653 +-0.029721329 +-0.023694977 +-0.0054455358 +-0.0039523793 +-0.019716827 +0.017344702 +0.015043631 +-0.0014933456 +0.0025433977 +0.005453767 +-0.008901629 +-0.040914252 +0.01315305 +0.007194475 +0.015241678 +-0.015618727 +-0.0054025045 +0.02939848 +0.019072723 +0.008407996 +0.00637188 +0.0063424325 +-0.0058287536 +0.0031097722 +-0.0016485966 +0.021210905 +0.014822857 +0.030907769 +0.010102987 +-0.00023885668 +-0.021683898 +0.005075492 +-0.0028533398 +0.018055666 +-0.019915733 +0.0024076644 +0.0037504218 +-0.0024367794 +0.007384494 +0.022269698 +-0.003674335 +0.008350924 +-0.010073788 +0.011130387 +-0.04035053 +-0.013001654 +0.015937457 +0.016820699 +0.011866965 +0.021465339 +0.027406553 +-0.031599656 +0.005326853 +-0.01888604 +0.021101695 +-0.0168228 +-0.021503199 +0.029005995 +-0.008258652 +-0.019284286 +0.0147133805 +-0.04765509 +0.022609424 +0.012388445 +-0.0043770284 +0.006129944 +0.0011147932 +0.012384531 +0.012643292 +-0.0014189641 +0.0036256982 +-0.0019274111 +0.010172363 +-0.027925914 +0.014471873 +0.03413905 +-0.039510585 +-0.002968034 +-0.026790423 +-0.03768961 +-0.064251095 +-0.012866505 +0.018305816 +-0.027435731 +-0.0062332135 +-0.019396018 +-0.028815402 +-0.02251749 +-0.012624801 +-0.0037942484 +-0.016383499 +0.010556941 +0.02317196 +-0.035954442 +0.029442776 +-0.0053733876 +-0.0045915735 +-0.017793514 +-0.0006865622 +0.0047210683 +0.023433609 +0.023458907 +0.028695121 +-0.007863519 +-0.0027865483 +0.027043816 +0.014183647 +0.0010482869 +0.014120107 +-0.026748694 +-0.012377366 +0.010578487 +-0.006430346 +0.02097867 +-0.028608033 +0.016990026 +0.0063938834 +-0.008541767 +-0.03479752 +-0.013486919 +-0.0012535583 +-0.012760465 +0.015204472 +-0.024387103 +0.003102495 +0.029618045 +-0.003321844 +0.001416282 +0.008239746 +0.027251266 +0.014969575 +0.016937919 +0.042298697 +0.00934217 +0.015966788 +-0.027721232 +0.013947346 +-0.016333913 +0.009066057 +0.007585342 +0.0107209785 +-0.012872546 +-0.0047626835 +0.0021942854 +-0.022729151 +0.010544844 +0.028807605 +-0.014570805 +0.017344689 +-0.011241688 +-0.011070248 +0.0034845064 +-0.0032740266 +-0.018140858 +-0.0036417635 +0.0019224898 +0.004483283 +0.001211726 +-0.02895734 +-0.0078553045 +0.0296174 +-0.0029443237 +0.011490836 +-0.002664661 +0.012941897 +0.0137835415 +-0.014531378 +0.00040008323 +0.016913641 +0.022816027 +0.011184523 +-0.0010737106 +0.0049183695 +-0.0022850074 +0.0047447234 +-0.020525292 +0.002327144 +-0.026217122 +-0.013258406 +-0.010190898 +0.0049316534 +-0.0001535528 +-0.015079229 +0.020749176 +0.011677617 +-0.0029025497 +-0.0015721924 +0.0044297087 +-0.0064545404 +-0.009917738 +0.013999248 +-0.015395923 +0.003130128 +0.012282273 +0.0030891092 +0.026563907 +0.036547754 +-0.0010070312 +-0.0044409116 +0.020809788 +-0.024002245 +-0.031618945 +-0.0009529862 +0.011951497 +-0.012581351 +-0.022672525 +-0.0064048893 +-0.00048096877 +0.03084655 +-0.00021359997 +-0.00884117 +-0.0007287262 +-0.01818982 +-0.0008712607 +0.020546982 +0.014569127 +-0.008914907 +0.020986522 +-0.01352551 +-0.031654436 +-0.023366865 +0.008253426 +-0.0021735528 +-0.020676255 +-0.016746331 +0.010765287 +-8.7247514e-05 +0.03152559 +-0.0028467241 +0.0053105946 +0.015465653 +0.004189064 +0.0039694556 +-0.01794274 +0.007364517 +-0.02390216 +-0.010187879 +-0.00621708 +-0.010085081 +0.017479092 +0.0001758313 +-0.03399936 +0.010754505 +-0.007848648 +-0.00071983505 +-0.0016441217 +-0.015381196 +-0.007468294 +0.03468702 +-0.009723861 +0.009615092 +0.02579358 +-0.005350369 +-0.027113078 +-0.0008118502 +-0.008731162 +-0.015439202 +-0.010237824 +0.0012612941 +-0.0056054415 +-0.043405663 +0.011361539 +-0.014478403 +-0.008894729 +-0.011150264 +0.0043907403 +-0.0010710197 +-0.009212491 +-0.008252825 +0.010617284 +-0.009015673 +0.014936848 +-0.028070645 +-0.019703168 +0.00043380592 +-0.027431147 +-0.0124975145 +0.017886052 +-0.030046785 +0.010116667 +-0.021236146 +0.007744775 +0.014175268 +0.0056588063 +-0.017194016 +0.0011523863 +0.025530372 +-0.02201523 +0.020386934 +0.0064821565 +-0.011954591 +0.0438881 +-0.004228501 +-0.040519435 +-0.0075855725 +-0.008612004 +-0.02182523 +0.0147949755 +0.009201636 +-0.02010822 +0.013997597 +-0.026189707 +-0.007583624 +0.008917771 +0.012522706 +-0.040562365 +0.021303343 +-0.0051618963 +-0.0029769433 +0.0033695898 +-0.0014998834 +0.00803752 +-0.0367853 +0.030564154 +-0.0007121871 +0.015138965 +0.014438296 +-0.01813537 +-0.014008033 +-0.01164689 +-0.023059677 +0.013544282 +-0.006163185 +0.00068049243 +0.016006509 +-0.00888689 +-0.0020818561 +-0.0172023 +-0.034583434 +-0.011318791 +-0.02792009 +0.026777767 +-0.021873016 +-0.007711229 +-0.0019766102 +-0.009403192 +-0.0027086418 +0.009846948 +-0.0063150474 +-0.015134109 +0.014630604 +-0.0037285627 +-0.011362906 +-0.005338443 +-0.009489895 +-0.019438852 +0.0043463004 +-0.01809907 +0.010574983 +-0.035783734 +-0.03214249 +0.035404038 +-0.006703333 +0.0058978084 +0.020135589 +0.011013032 +-0.0026567602 +-0.0005493716 +0.0027794004 +0.004413081 +-0.010349484 +-0.00437671 +0.001496233 +-0.026424244 +-0.005881794 +5.669734e-05 +0.0017180879 +0.016810484 +0.012752922 +0.0012996697 +-0.003164741 +-0.04221248 +0.008078054 +0.022706268 +0.0011998989 +-0.008590935 +0.0032678468 +-0.008770792 +-0.001546158 +0.018095678 +0.0043556285 +-0.016025512 +-0.00784113 +0.0074282424 +-0.0025849843 +0.01546971 +-0.035472225 +0.015663639 +0.038087092 +-0.009528834 +-0.019668758 +-0.002032711 +-0.023749776 +0.003797479 +-0.009764215 +0.01482575 +-0.020842006 +-0.010054364 +0.042856146 +0.024779014 +-0.009285493 +0.006196127 +0.020646717 +-0.0044562076 +-0.02558413 +-0.014721211 +0.0036010884 +0.008784813 +-0.008979259 +-0.010628299 +0.020700824 +-0.055409886 +-0.016181055 +0.010934229 +-0.0023968578 +0.010713803 +0.0058411746 +-0.006896187 +-0.030841013 +0.015912196 +-0.010603389 +-0.036902223 +0.027562823 +-0.0034489364 +0.016965596 +0.022906136 +-0.020739608 +-0.009037006 +-0.013733314 +0.0012408822 +0.017175473 +-0.0032170012 +0.004547525 +-0.02411861 +0.0066498886 +-0.012083443 +-0.039808407 +-0.00963847 +0.011399572 +-0.041053288 +-0.01976442 +0.017936386 +0.013118385 +-0.01054356 +-0.038381584 +-0.014582642 +-0.0016668172 +-0.009858013 +-0.028511105 +-0.0106131965 +-0.0054256986 +0.009042175 +0.002800694 +0.0058586705 +-0.0038855937 +0.012295315 +-0.00842331 +0.019587079 +-0.013410096 +-0.0121492855 +-0.016986487 +-0.016044214 +0.047745556 +0.0007933606 +-0.005149964 +0.0047394293 +-0.017155915 +0.023761282 +0.037357938 +-0.011060588 +0.014448046 +0.010301373 +-0.0052173897 +-0.020037914 +0.031416655 +-0.013484343 +-0.0039840606 +0.011917137 +0.012263524 +-0.008563109 +0.017910486 +-0.0056562107 +-0.009869027 +-0.0046310592 +0.0016491142 +-0.0070823487 +0.002742551 +-0.006103985 +-0.0013526343 +0.0049119196 +0.010329329 +0.03157731 +0.027205402 +-0.013684845 +0.03757119 +-3.0133693e-05 +-0.020479169 +-0.0011495869 +-0.0060393093 +-0.018536562 +-0.016210426 +0.008146043 +0.0059776492 +-0.016960476 +-0.017110035 +-0.0145069035 +0.010091304 +-0.025012245 +0.015033407 +-0.0057249484 +-0.011971828 +0.009099698 +0.020734496 +-0.0102478815 +0.011875434 +0.018291472 +-0.012293175 +0.010335477 +-0.04846516 +-0.0145444125 +-0.039280817 +0.0049797045 +0.011634035 +-0.008960528 +0.0070122997 +-0.0019786595 +0.010171266 +-0.0023525367 +-0.036550224 +0.0032702228 +-0.007305095 +-0.010230902 +-0.009507072 +-0.0008369475 +-0.027407724 +0.010169376 +0.0061794575 +-0.0139800655 +0.019622324 +0.02772462 +-0.0069330614 +-0.01592851 +0.003449412 +-0.0024716402 +0.02068082 +-0.010684666 +-0.0048840204 +0.010699799 +0.008908157 +0.008562532 +0.0080835745 +-0.0039377003 +-0.0148340715 +-0.0032485956 +0.004124824 +-0.022673706 +-0.019799726 +0.005753674 +0.003655289 +-0.02472355 +-0.009465736 +0.024755193 +0.018964753 +0.0038189813 +-0.021863554 +0.020875072 +0.0029843864 +-0.009054104 +-0.011081817 +0.007022105 +-0.01827947 +-0.006126693 +-0.00075189024 +0.05365642 +-0.017320916 +-0.018040165 +0.009759643 +0.0007914135 +-0.047983646 +-0.04622136 +0.011738509 +0.0034174847 +-0.01060062 +-0.02147587 +0.0011997906 +0.023866652 +-0.03368648 +0.00798755 +-0.014729647 +-0.01633959 +0.035136733 +0.06213443 +0.01020884 +-0.033179775 +0.00073801586 +-0.0052530356 +0.004035447 +-0.028433662 +0.010131258 +-0.007767872 +0.028529342 +0.025693253 +0.025741875 +-0.017220164 +-0.008155389 +-0.0033925306 +-0.0050201043 +-0.013897277 +0.021052277 +-0.015939634 +0.0010112176 +-0.0041597215 +-0.01153447 +-0.013109297 +0.017979437 +0.020027447 +0.046919286 +0.019968944 +-0.02129251 +-0.011522663 +-0.023874812 +-0.021679062 +-0.02295299 +0.000789628 +0.0041098064 +0.029079815 +0.016148763 +-0.033527393 +-0.03344583 +-0.00477685 +0.012868087 +0.025524741 +-0.02523768 +-0.032674603 +-0.006685623 +0.008340788 +0.0014662328 +0.010845049 +0.0070636356 +-0.011681359 +0.05679202 +0.012924388 +0.008787967 +-0.02542078 +0.0036306232 +0.010623168 +0.0028921904 +0.025743987 +0.004767484 +-0.026957558 +-0.0066041094 +-0.014956668 +-0.028270666 +0.01946967 +0.015783431 +0.044899292 +0.013837786 +-0.023123106 +-0.029461516 +-0.011677733 +0.016365929 +0.01870985 +0.011169489 +-0.03081126 +0.004390146 +0.015680118 +-0.0057829926 +0.0032754927 +0.03747785 +0.006637738 +0.0039752075 +-0.017589614 +0.047051944 +0.015593453 +0.01570179 +-0.024980256 +0.013356671 +0.0030864922 +0.019309452 +0.008663218 +0.012599876 +-0.024248047 +0.0008215896 +0.018551162 +-0.007661888 +-0.0199254 +-0.015368685 +0.024487644 +0.02610053 +-0.01457254 +0.025137966 +0.0011855885 +0.02505818 +-0.0023092816 +0.009609629 +0.0050659054 +0.023174068 +0.012644897 +-0.05248794 +-0.0014910629 +-0.03148808 +0.004801473 +-0.0018129019 +0.0050574285 +-0.010207316 +0.014577259 +-0.0088070715 +-0.0058050086 +-0.017583985 +0.043664135 +0.01823974 +-0.010789807 +0.0014115437 +0.008231934 +-0.010728102 +-0.03625343 +0.0063939663 +-0.011714946 +-0.01006539 +0.025011992 +0.0063651893 +0.014835144 +0.02152517 +0.01569131 +-0.007154814 +-0.02173831 +-0.005223941 +0.005082915 +0.0014922433 +-0.0027256734 +0.006695208 +0.017013514 +0.010145075 +-0.00978124 +0.02372465 +0.015689211 +0.01928719 +0.006669105 +-0.02242846 +0.027787318 +-0.059753206 +-0.027129682 +-0.009343255 +-0.0059266067 +0.001509728 +-0.014250845 +0.027582075 +-0.0110253645 +-0.025853017 +-0.012616713 +0.006987545 +0.0023876817 +-0.025159836 +0.010069101 +-0.006679121 +0.009144306 +-0.007829273 +0.03030363 +0.00075415144 +-0.021620318 +0.011104886 +-0.0150672365 +-0.017358279 +0.010962554 +0.0034272068 +-0.017861733 +0.010292829 +0.015624121 +-0.005357208 +-0.024922783 +-0.00060380256 +0.0020830473 +0.020949079 +-0.010450432 +0.009676741 +-0.010733516 +0.02224041 +-0.0043432387 +-0.0079125725 +0.0021027846 +-0.010054173 +0.0013948483 +-0.010822131 +-0.03357043 +0.024025882 +-0.004102389 +0.004158941 +0.0039569833 +0.045237903 +0.031633124 +-0.013916096 +-0.026961204 +0.0039194743 +-0.0007382602 +-0.010633958 +-0.006631742 +-0.03697398 +0.003193775 +0.0028808615 +-0.014585143 +0.031853963 +0.0022660096 +0.012380033 +-0.022444224 +0.034665193 +0.0016002015 +-0.020547299 +-0.018786458 +-0.017616525 +-0.004163447 +-0.015747698 +-0.010822357 +-0.027550582 +-0.028690923 +-0.02960004 +0.019814448 +-0.0081493445 +0.029202383 +0.011373954 +-0.02233569 +-0.00037236718 +-0.012902795 +0.014407701 +-0.0019785634 +0.0069797765 +-0.026379615 +0.013487454 +-0.020716937 +-0.008002874 +-0.027790261 +-0.04124061 +-0.044336032 +-0.011737905 +0.0055153756 +-0.0002816689 +0.030508732 +0.014294807 +0.0009679901 +0.0107852705 +-0.019391237 +0.009478058 +-0.021066418 +0.014705273 +-0.014953793 +0.004797093 +0.019460402 +0.014534825 +0.007987079 +0.020061301 +0.015254658 +-0.007614491 +-0.01739882 +0.006886686 +0.01979692 +0.01383261 +-0.03426802 +-0.011492189 +0.0062575727 +0.009613308 +-0.04631136 +0.00018936928 +0.002574978 +0.009668383 +-0.0004286976 +-0.0059097153 +0.019046104 +-0.01864581 +-0.0016226552 +0.0057297493 +-0.004719155 +-0.022037137 +-0.012843853 +0.039975848 +0.0035314362 +0.0058818106 +-0.007546205 +0.018735195 +-0.006149782 +-0.074151486 +-0.030811133 +-0.0046371347 +0.03026415 +-8.390649e-05 +0.014423058 +0.0040760227 +0.022573864 +0.006209647 +0.0024241034 +-0.03083259 +0.043682914 +0.020568287 +-0.0058650067 +0.017443888 +-0.018385034 +-0.011793216 +-0.024498703 +-0.0164077 +-0.021077069 +-0.002990809 +-0.020975413 +0.010494042 +0.016053958 +0.010478501 +0.020562952 +0.0073458743 +-0.032426313 +-0.017398698 +0.002031889 +0.004680543 +-0.008216246 +0.00089575397 +-0.03128489 +0.008647002 +-0.008811525 +0.009898442 +0.03769739 +0.023080826 +-0.0008567947 +-0.026152633 +0.009185463 +-0.043285448 +0.02334724 +0.014016118 +0.026453141 +-0.00036920107 +0.0037684815 +0.017182201 +-0.029548025 +-0.022747003 +-0.0022356056 +0.003305701 +0.018473648 +-0.0039231526 +-0.05841317 +0.016681422 +-0.01285171 +0.00017293265 +-0.02045312 +-0.0051202103 +-0.001760009 +0.013406985 +0.0095400745 +0.017451726 +-0.005453425 +0.0007863289 +0.022168728 +-0.019804923 +0.0013005465 +0.0029829268 +-0.038197257 +-0.02315209 +0.01706365 +-0.0147517305 +0.013441076 +0.007094106 +0.027053615 +0.009344767 +0.0018440203 +-0.0018633931 +-0.014698556 +0.0018449682 +0.002316064 +-0.011970662 +-0.022497872 +0.02397851 +0.012091149 +-0.003420178 +0.009485448 +0.023538036 +0.021125792 +0.0037171678 +0.006136181 +0.023784276 +0.011017071 +-0.0044740574 +-0.029336574 +0.014796757 +-0.0076045576 +0.013849346 +-0.0015134173 +0.013482309 +-9.8013326e-05 +0.005455297 +0.010298614 +0.0018257906 +-0.0044918624 +-0.0115129575 +-0.036950335 +-0.03969817 +-0.0017897055 +0.004932961 +-0.02648709 +-0.04093058 +-0.020059159 +-0.0037867008 +-0.0019370492 +0.0073039825 +-0.0023298976 +0.0024715038 +-0.036346704 +0.044804968 +0.008003009 +0.017157491 +-0.0050797444 +-0.017944653 +-0.027773611 +-0.016970381 +0.004117586 +0.0033049707 +-0.0078033847 +-0.015514675 +0.02491201 +-0.012203295 +-0.018736936 +0.022023866 +0.014762833 +0.015595965 +-0.014710802 +-0.02962135 +-0.008946597 +0.0059089353 +0.005515972 +-0.012644189 +-0.0071225385 +-0.004915275 +-0.03727698 +0.007342696 +0.0064809844 +0.01417007 +-0.006172032 +0.017331574 +-0.028755052 +-0.0070357607 +0.003146285 +0.017650997 +-0.0023600971 +-0.002389343 +-0.0104837725 +0.012302318 +0.022406908 +0.018030552 +-0.008691299 +0.0019768097 +-0.018466495 +-0.027139388 +-0.006225913 +-0.014316166 +0.032917153 +0.016715776 +0.005359698 +0.009092879 +-0.002194619 +0.0061957627 +0.012459592 +0.033400662 +0.021990983 +-0.009823439 +0.016430212 +-0.028591003 +0.010955726 +-0.03460947 +-0.011919016 +0.00044758947 +-0.026456296 +-0.035237294 +0.017880999 +0.010972181 +-0.0064498084 +0.0004073427 +0.01110226 +-0.0039434517 +0.005256523 +-0.010099842 +-0.009480305 +-0.023340119 +-0.009268808 +-0.012927215 +0.018600315 +0.008988606 +0.0478687 +0.0010333157 +-0.024674656 +-0.0032751686 +0.009122006 +-0.012318448 +-0.003394611 +-0.014024351 +-0.0005584635 +0.021601995 +-0.009665412 +0.0030679358 +0.01056497 +-0.012654586 +-0.03303063 +-0.013449296 +0.005571533 +-0.0027846892 +-0.023069786 +-0.010499831 +0.004285349 +-0.034490906 +0.013291653 +-0.00856749 +-0.015271927 +0.005560778 +-0.0063643004 +0.008942601 +-0.023055967 +-0.028849434 +0.00065526407 +-0.010256947 +0.020001955 +0.017322902 +0.016541665 +0.030610006 +-0.021653831 +-0.006516956 +0.010539287 +-0.031539306 +0.023399908 +-0.027605072 +-0.013647011 +0.00937626 +-0.0050323564 +0.0062815645 +0.007131962 +0.03243483 +-0.044236876 +0.005355982 +0.031888038 +0.0073233824 +0.04063916 +-0.0015550789 +-0.02196812 +-0.026310915 +-0.023772014 +0.007814044 +0.025006616 +0.006976807 +-0.02274916 +0.0038842587 +0.012634522 +-0.011768842 +0.0027856007 +-0.007887935 +-0.069321595 +0.025484236 +-0.0014135453 +-0.007906292 +-0.002299021 +-0.004711718 +0.010339303 +-0.031077208 +0.017554842 +0.006650638 +0.0035687715 +0.014993541 +-0.010839192 +-0.024134742 +0.008673078 +-0.0032007825 +0.016500287 +-0.042064436 +0.0036437782 +0.013322047 +0.020175288 +0.0027078632 +0.022977274 +-0.00931334 +0.011762603 +-0.0011106281 +-0.011761697 +-0.016061045 +-0.0149970725 +-0.014828011 +0.0012567538 +-0.030248582 +0.00050238107 +0.009653622 +0.008090466 +0.0066398587 +0.024987387 +0.0027575803 +-0.011342211 +0.015463532 +-0.02221037 +0.0056459657 +-0.004050901 +0.001614831 +-0.034885097 +-0.007766088 +0.02848985 +-0.0037151328 +-0.026629196 +0.017051827 +-0.018341536 +0.013070007 +0.028453901 +-0.0060376753 +0.014655219 +-0.0135611445 +-0.008418124 +-0.01843093 +-0.025253396 +0.03492836 +-0.02668003 +0.011273138 +0.011543398 +0.01319918 +0.019504752 +-0.025989648 +-0.030708604 +-0.018351074 +0.014556657 +-0.031209277 +-0.026013322 +-0.03329666 +-0.006806317 +0.010587562 +-0.012608565 +0.032833997 +0.017156512 +0.0049358765 +-0.008767929 +0.016936127 +0.0010437892 +0.018530775 +0.02778192 +0.03948484 +0.0116790915 +-0.008535217 +0.008267128 +0.0027260373 +0.0008859577 +-0.007094871 +0.005177694 +-0.018190641 +-0.0016711107 +0.021308756 +0.0119619705 +-0.01650541 +0.016504133 +0.005703456 +-0.0056717517 +-0.043029185 +-0.030164259 +0.016344773 +0.018366294 +0.016422952 +0.02483157 +0.020102408 +-0.041522786 +0.0031817064 +-0.0067590945 +0.0029061397 +-0.03531264 +-0.012255166 +-0.006754331 +-0.017782047 +0.025648441 +-0.017298637 +-0.03968174 +0.012137265 +0.01624376 +-0.0061235814 +0.032910254 +-0.0032425167 +-0.01259391 +-0.0009279106 +0.0028552248 +0.009768339 +-0.015631106 +0.013282819 +-0.027446032 +0.011609715 +0.010693602 +-0.03091759 +0.0019899104 +-0.031302553 +-0.02255976 +-0.052516237 +0.0039834287 +0.020412587 +-0.017276583 +-0.008653916 +-0.02245728 +-0.019609492 +0.002045106 +-0.032723743 +-0.00569995 +-0.017639635 +0.00076805544 +0.0055331276 +0.016167792 +-0.008119118 +-0.017416297 +-0.0029743675 +0.014323897 +-0.03982958 +-0.005192397 +-0.0209583 +-0.0043983078 +0.0044216802 +-0.012817455 +-0.026158283 +0.0054598204 +-0.01684139 +0.018269036 +0.013277573 +-0.021388352 +0.0023686048 +0.009127622 +0.0019179521 +-0.031328015 +0.024221217 +-0.0066669886 +-0.0064357617 +0.0033763705 +0.030475082 +-0.013592753 +0.021965142 +-0.01216831 +-0.006672447 +-0.010633252 +-0.02053097 +-0.010799434 +-0.013671228 +-0.010829137 +0.03787871 +-0.008002839 +0.009497699 +0.03870588 +0.00046525555 +-0.0031524638 +0.008211822 +0.00052961096 +0.014475313 +0.0070269904 +-0.010669884 +-0.031230275 +-0.026066862 +0.0114252735 +0.00022577646 +-0.0038477432 +-0.025709372 +0.018529192 +-0.0043740235 +0.01715096 +0.042142924 +-0.015616315 +-0.031028599 +0.021861656 +-0.010201534 +-0.016253786 +0.0023353705 +0.009930475 +-0.0386734 +0.022703845 +0.013888698 +0.0053204903 +0.0062514157 +-0.011727047 +0.003022341 +-0.023968954 +-0.014778043 +0.0016219118 +7.655385e-05 +-0.022023037 +0.025813544 +-0.01715065 +-0.03193594 +-0.03131728 +0.0077070086 +0.012341007 +-0.0052094273 +0.0089370925 +0.014498086 +-0.019632569 +0.015590497 +0.022872776 +-0.009791205 +-0.06504614 +0.0030008352 +0.016840711 +-0.042654734 +0.027744278 +-0.011102666 +-0.011118399 +0.0030227767 +0.0012228363 +0.016777838 +0.009656346 +0.010483481 +0.00029429825 +0.032641716 +-0.018858097 +-0.037869938 +-0.0007800911 +-0.048661597 +-0.016153887 +-0.02510569 +-0.01205261 +0.012540747 +-0.017261496 +-0.033615552 +-0.019681344 +-0.01578842 +-0.027233154 +-0.022892365 +-0.011479288 +0.019679116 +0.00091662374 +0.026459953 +0.019230602 +0.008453812 +-0.01827918 +-0.039493583 +-0.0031717785 +-0.008179547 +-0.025174547 +0.06086322 +0.01655138 +0.010657051 +-0.017256772 +0.026388723 +0.019956334 +-0.0479515 +0.0134628685 +-0.00035523943 +-0.039287664 +0.0046073045 +0.01913308 +-0.0052209795 +-0.0013002523 +-0.0044150306 +-0.035140354 +-0.010297925 +-0.013511 +-0.006585434 +-0.012645985 +0.0070572803 +0.001980052 +0.021620695 +-0.010725044 +-0.028021194 +0.011358408 +-0.0142340185 +0.008453933 +0.0036953837 +-0.0006093234 +-0.0077330004 +0.011381808 +0.015955115 +-0.0019645535 +0.023948884 +0.0024384586 +0.016094282 +0.013942935 +-0.026198363 +0.012336631 +0.031149587 +-0.036949337 +-0.022898031 +0.0154527435 +0.0034687214 +0.004989199 +0.020904569 +-0.031004312 +-0.021088528 +-0.0062938323 +0.0008881651 +0.017566562 +0.014644329 +-0.05424578 +-0.0074682813 +-0.00304109 +-0.03183592 +-0.0053941254 +0.01827697 +0.0003383699 +0.012994109 +0.0011704308 +0.022269161 +-0.0031690246 +-0.0045754095 +-0.018939534 +0.0032050526 +0.018659627 +0.002851565 +-0.03623582 +-0.015976235 +-0.03728839 +-0.028594688 +-0.008605987 +0.018346107 +-0.024689708 +0.008659949 +0.035708614 +-0.019611942 +0.0054829763 +-0.008504936 +-0.007850425 +-0.0016490673 +-0.016485747 +0.0060061994 +-0.00055197504 +-0.00096347195 +0.009030909 +0.022982484 +0.005533391 +0.015255069 +-0.031109769 +0.026780833 +0.007402487 +-0.010594068 +-0.03243893 +-0.006616306 +-0.018405193 +0.0176066 +-0.02715889 +0.024646554 +-0.011751967 +0.031620573 +-0.0011648025 +0.013965988 +-0.008977867 +-0.007938854 +-0.025254954 +-0.015201103 +-0.011381673 +0.026462402 +-0.0039365883 +-0.01567896 +0.0057755164 +0.016443389 +-0.003782685 +0.0448755 +0.005426328 +-0.004627965 +-0.046273284 +0.02676897 +0.003221502 +6.9150454e-05 +-0.0066113546 +0.019652199 +0.013283509 +-0.008423389 +-0.008185902 +0.012743036 +0.010643082 +0.006582384 +-0.0074296813 +-0.003452729 +0.013471507 +-0.019251674 +0.042337034 +-0.014602526 +-0.03847229 +-0.016189646 +0.018029533 +-0.0010164845 +0.02001436 +0.017398132 +0.031204585 +-0.031395145 +-0.009025518 +-0.037956655 +0.009471217 +-0.007018256 +0.0015925542 +0.0034160197 +0.004604619 +0.02244994 +-0.0047458834 +0.0010296153 +0.01726829 +0.014498826 +-0.0057585207 +-0.020774188 +0.009881367 +0.005366689 +-0.046740357 +-0.019653514 +0.012173448 +0.0070779934 +-0.029835174 +0.033393364 +-0.004916018 +-0.0031228925 +0.012265819 +-0.009197021 +0.00029420646 +0.0017765657 +0.052490704 +0.0019580433 +-0.0005129295 +-0.025779268 +0.03925299 +-0.019426102 +-0.017607566 +-0.008496299 +0.0021577093 +0.011039793 +-0.012580504 +-0.007654929 +0.008005149 +-0.017469047 +0.009804564 +0.0074741472 +0.00012604412 +0.017968163 +0.028423693 +0.0015924851 +-0.0041107303 +-0.002532763 +0.0017287704 +-0.005627836 +-0.011194894 +0.005680062 +-0.0036675914 +0.0030603602 +0.005691957 +-0.0022322515 +-0.0166166 +-0.0070315124 +-0.0005735029 +-0.0026872342 +-0.010461798 +0.0097584035 +-0.0040743486 +-0.016399523 +-0.00025896126 +-0.010529666 +0.012753572 +0.003920179 +0.005625998 +-0.00053599215 +-0.010438011 +-0.0042410223 +-0.0032082708 +-0.022745067 +0.021725547 +-0.0013661879 +0.000753661 +-0.0045285225 +0.025940293 +0.0071529457 +-0.012956443 +-0.00928016 +0.0075330716 +-0.018210128 +0.009421728 +0.014962904 +-0.044357017 +-0.019559354 +0.006505671 +-0.031780366 +0.018227551 +-0.012100805 +-0.0044957874 +-0.038173225 +-0.017229425 +0.029354956 +0.0022081635 +-0.0006286175 +-0.0139566455 +0.010127441 +-0.014425502 +0.010596094 +-0.024980225 +-0.024003658 +-0.0024181649 +-0.014189901 +0.0024564718 +-0.005828796 +0.00025102912 +0.012640911 +-0.0062233456 +0.000905071 +0.0043827146 +-0.019155242 +-0.03810563 +-0.0058999993 +-0.026540797 +0.03184175 +-0.00772111 +0.0123090455 +0.02050204 +0.0073987595 +0.016237365 +-0.015675656 +-0.0010432213 +0.0020856173 +0.015085162 +0.015425141 +-0.008773624 +0.01125845 +-0.013293925 +0.008898645 +-0.022421284 +-0.028139647 +0.0077916067 +0.010049822 +-0.015411592 +0.0046525756 +-0.005059344 +-0.0069139833 +-0.027183885 +-0.048778094 +-0.013120973 +-0.01069459 +-0.011603965 +-0.0009807223 +-0.002692958 +-0.012366737 +-0.012538071 +0.016443063 +3.138921e-07 +0.011428529 +-0.0671486 +0.05906596 +-0.004245186 +-0.016701816 +-0.0074568745 +0.022830393 +0.01674914 +-0.038912635 +0.014689379 +-0.0072693997 +-0.017216343 +0.00601359 +-0.0022459521 +0.017546054 +-0.0022263278 +0.013058501 +-0.007230074 +-0.0077641415 +-0.0429919 +0.023918629 +-0.009819648 +0.008821424 +0.02640412 +0.0044689053 +0.011758705 +-0.03780922 +0.010800248 +-0.027711242 +0.0036284847 +0.01979375 +-0.012838055 +0.0008477957 +-0.0008266223 +-0.00067406957 +0.0012845708 +0.012529824 +0.013657364 +0.015745517 +0.010246837 +-0.00470023 +-0.006896679 +0.012546652 +-0.04262761 +-0.0036796534 +0.0019491576 +-0.0038762332 +-0.014390715 +0.0069449847 +-0.011184431 +-0.018526139 +0.006549534 +0.0018098033 +0.0023703906 +-0.0555357 +-0.019612914 +-0.018626023 +-0.019398201 +-0.05243507 +-0.011607263 +0.0017106007 +0.006635516 +0.015755327 +-0.011824716 +0.0097783785 +0.0035205306 +-0.009495787 +-0.012921374 +-0.009827203 +0.009436973 +0.016320381 +-0.031570226 +-0.020242311 +0.015576385 +-0.0058327494 +-0.028455243 +0.03800696 +-0.027544314 +-0.0069074305 +0.035084624 +0.009627414 +-0.027886203 +0.0035327168 +-0.017433824 +-0.019736504 +-0.003575953 +0.011910093 +0.010627171 +0.030303225 +-0.0043937513 +0.0341628 +0.004415499 +-0.011123476 +0.020970182 +0.0011154143 +-0.0012080946 +-0.016785251 +-0.00872137 +0.005798376 +-0.006656312 +0.01803005 +-0.025238393 +0.026134418 +0.019901076 +0.016159121 +-0.015646804 +0.028220639 +-0.0166471 +-0.033273984 +-0.010821494 +-0.021018477 +-0.011872453 +0.00502035 +-0.021938618 +-0.021693159 +0.015359034 +-0.012603157 +-0.019211018 +-0.016584432 +0.0061443676 +0.018482072 +-0.023083517 +0.02555586 +-0.023549994 +0.0024526308 +0.0012385051 +0.010289482 +-0.0060196095 +-0.028524315 +-0.0065649794 +-0.018721655 +-0.011561633 +0.0011243315 +0.027222374 +-0.039112695 +-0.022823831 +0.013239809 +-0.015069942 +0.015059497 +-0.014138492 +-0.0068110833 +-0.0016542141 +0.0041713426 +0.004639382 +-0.01751436 +-0.0073879072 +0.009965863 +-0.01567547 +-0.023032561 +0.01092193 +0.034299552 +0.0059639663 +-0.0042802086 +-0.015227719 +-0.0126266675 +-0.0026266768 +0.0018913682 +-0.01833392 +-0.012606334 +0.0051256455 +0.026110033 +0.005325518 +0.0455938 +-0.0040145735 +-0.0021689832 +0.0122118145 +0.023491854 +-0.014576759 +0.013215682 +0.009739473 +0.010494906 +-0.015351981 +-0.0062157954 +0.0051421556 +0.018563554 +0.02117073 +0.024784554 +0.027401945 +-0.0051869815 +-0.00683695 +-0.04244743 +0.008967062 +-0.013461001 +-0.01596434 +-0.0060632178 +-0.01759178 +-0.030860981 +0.018525515 +0.009834928 +-0.030807957 +-0.00476348 +0.011496259 +-0.00079297216 +-0.023529248 +0.016599705 +-0.0008375784 +-0.029252624 +-0.013118275 +-0.006144255 +0.012280323 +0.02078889 +0.012595923 +0.0071481233 +0.004937224 +0.008388468 +0.0011880073 +-0.035400964 +-0.018702226 +-0.015994884 +0.00501139 +0.02393284 +-0.0063216197 +-0.004551234 +0.016851375 +-0.0015046062 +-0.022334294 +0.012800279 +-0.000162052 +0.00836175 +-0.0053071408 +-0.008632626 +-0.0022938205 +-0.040423986 +0.010328712 +-0.009408589 +0.008698873 +0.0006286829 +-0.014334666 +0.0029834728 +-0.02110256 +-0.029327722 +-0.02605051 +0.00020552761 +0.0021847936 +-0.0065931804 +0.04420229 +0.012650689 +-0.015689254 +-0.016797423 +0.026592718 +-0.01665806 +-0.01797124 +0.0029109754 +-0.020584133 +0.010659368 +0.0017850145 +0.021331957 +-0.027702158 +-0.014555716 +-0.04194093 +-0.029571999 +0.006021014 +0.0028726684 +0.049840335 +-0.0071209064 +-0.008218524 +-0.014429548 +0.021163702 +0.018728908 +0.0210807 +-0.008376293 +-0.007008817 +0.006055047 +0.04359502 +-0.020673066 +-0.0060276752 +-0.025199289 +-0.053692076 +-0.007761097 +-0.007526017 +-0.0015800755 +-0.0064113657 +0.008512882 +0.021956434 +-0.036650535 +0.0041351025 +0.013130855 +0.015398849 +0.004592879 +0.003178327 +0.00057853654 +-0.012959741 +0.026140546 +0.0426245 +-0.03310397 +-0.013902765 +0.03863797 +0.027316432 +-0.0026559224 +0.037196185 +0.0203215 +-0.013590905 +-0.012995446 +0.0041617947 +0.03254667 +0.0063250205 +0.0073011275 +0.009299127 +0.029060818 +0.02027 +-0.03395516 +0.033502676 +-0.025074251 +0.007558368 +0.009227945 +0.0062660784 +-0.010959264 +-0.006770847 +-0.018966172 +-0.02793244 +-0.006614661 +0.008476664 +0.005813534 +-0.011793834 +-0.015708303 +0.0044428785 +0.009283374 +-0.0070077833 +0.021151675 +0.011721204 +-0.0015825386 +0.0021570837 +-0.012451346 +0.01068087 +-0.0015752403 +-0.0009871513 +-0.02489559 +-0.022855656 +0.007938788 +0.0027771771 +-0.0011059281 +-0.0064703054 +-0.0051794033 +-0.017585354 +-0.017362041 +0.0020720575 +0.004178212 +-0.012347397 +-0.026324337 +0.0043668593 +-0.01615753 +0.025170475 +-0.035867393 +0.015887033 +-0.013078015 +-0.010324057 +0.0078131715 +0.014979887 +0.008718053 +0.019676117 +0.023783619 +0.0017806141 +0.014809361 +-0.0032304772 +0.022905305 +0.0017128305 +0.01631979 +-0.004471666 +0.0036252197 +0.003628366 +-0.03760269 +-0.016410336 +-0.025989542 +0.015424072 +0.01042142 +-0.0077063846 +-0.038632043 +0.018053072 +0.012379829 +0.010233514 +-0.010782317 +0.03364534 +0.021004427 +-0.017600344 +0.017714724 +-0.010180113 +-6.866631e-05 +-0.017175725 +0.008595659 +-0.020584986 +-0.009067039 +0.021162847 +0.0058780294 +-0.005773081 +0.01563212 +0.013380531 +0.009968546 +-0.018632742 +-0.0037840023 +0.0029545198 +-0.002153852 +0.0019845348 +0.008379492 +-0.015114857 +0.0122183645 +-0.023831205 +0.017446918 +0.029494656 +0.0130701335 +-0.010294315 +-0.022002935 +0.02500164 +-0.0674804 +-0.016027266 +0.012906359 +-0.01565686 +0.0012537655 +-0.02865906 +0.00874543 +0.0057448605 +-0.005709728 +0.010827796 +-0.020329539 +0.010741136 +0.024612844 +0.0058725765 +-0.0043534203 +-0.013648822 +-0.03570261 +0.011638684 +-0.048980426 +0.0064873504 +0.0045226226 +-0.010887695 +-0.024327323 +-0.015024938 +0.014471781 +0.017285526 +-0.032017786 +-0.022048492 +0.008729496 +-0.03693021 +0.024233144 +0.011747906 +0.0037167622 +-0.019377742 +0.012671314 +-0.026535904 +-0.016966168 +0.017293856 +0.020619268 +-2.9397497e-05 +-0.0065942365 +-0.0025728927 +-0.012860902 +-0.0047475495 +-0.022271605 +0.017135004 +-0.00011902531 +-0.0052667777 +0.049648225 +0.001536108 +0.003544478 +-0.0034186377 +0.0072944346 +-0.0032797419 +0.006323438 +0.0038073647 +0.012320469 +0.013149547 +-0.027564147 +0.0049078898 +-0.016714675 +0.030728081 +0.010904314 +0.01236131 +-0.028307103 +0.00550463 +0.00044335978 +0.021608183 +0.02880489 +0.0075971303 +-0.015057898 +0.010221457 +0.016862623 +-0.0066689122 +-0.0005078128 +0.010486116 +-0.015177065 +0.024318768 +-0.035397068 +0.014801975 +-0.034666978 +0.0052957335 +0.0050749485 +0.013924899 +-0.03968402 +-0.014828937 +0.012379809 +-0.027267784 +0.00565848 +0.014554084 +-0.0149809895 +-0.014445292 +-0.00831514 +0.0138130225 +0.017892377 +-0.018234089 +0.014700869 +-0.011012861 +-0.012257919 +0.03657108 +-0.016404994 +-0.036641646 +0.0020159164 +0.0014910508 +0.013086601 +-0.014775473 +0.0060346024 +0.0007258306 +-0.0039998856 +-0.0069826613 +0.002722183 +0.016192565 +0.004642933 +-0.012123649 +-0.0006363672 +0.015266055 +-0.045699902 +-0.010905087 +-0.02870524 +0.027287614 +-0.04243246 +-0.0014398537 +0.028318185 +-0.006272737 +0.0010857848 +-0.0019241027 +-0.0023634504 +-0.0079819895 +-0.0064388597 +-0.010799315 +-0.0145087605 +-0.0048110294 +0.009882286 +-0.008220376 +0.0011944975 +0.0009796155 +-0.0048127435 +-0.026340427 +0.013940615 +-0.0031119974 +0.0022770925 +0.0019323563 +0.0056812465 +-0.018905874 +-0.0005305852 +0.014871838 +-0.0058552693 +0.00028582086 +0.00035428087 +-0.0154937655 +0.021462752 +-0.019622928 +0.0013772706 +-0.004648733 +-0.012230903 +-0.0003017673 +0.017220449 +-0.02056965 +-0.01808756 +-0.0046844985 +0.012277564 +-0.0062347716 +0.009839654 +0.0045606494 +-0.0028976495 +-0.00059940846 +0.0031080493 +0.020345002 +-0.0069309203 +-0.0053949035 +-0.004139184 +0.0012267618 +0.013464004 +0.005862424 +0.022084966 +-0.01840243 +0.016508637 +-0.004785822 +-0.008433378 +0.0029130918 +0.017714312 +-0.003859192 +0.0009766287 +-0.009178821 +0.0013786992 +0.0069001163 +0.0011357364 +-0.001815285 +0.016883926 +-0.0022228463 +-0.001496031 +0.039032664 +0.03212543 +-0.040188253 +0.016481172 +-0.009962726 +0.009740255 +0.011656407 +0.0038371265 +0.021370316 +-0.05124704 +0.0045900564 +0.018881815 +0.015973471 +0.0053591444 +-0.013084162 +0.008959921 +0.008343109 +0.008981723 +0.013101047 +-0.029873379 +-0.014645239 +-0.025786735 +0.0049736565 +0.010133124 +-0.001385074 +0.004960379 +0.02182566 +-0.01824437 +0.0145582305 +-0.03413369 +-0.01333462 +-0.04112613 +-0.019945085 +0.01808016 +0.0029658682 +0.01694298 +-9.7826756e-05 +0.018607853 +0.011714322 +0.014648151 +3.3028075e-05 +0.028364439 +-2.018468e-05 +-0.0052201394 +-0.004449268 +-0.030436475 +-0.010033288 +0.024530785 +-0.004227273 +-0.009248349 +0.0016290973 +0.0036637106 +-0.013308488 +0.022601033 +-0.021623593 +0.032099713 +-0.057122916 +-0.046823677 +-0.011327656 +0.025271276 +-0.012376554 +-0.0014253731 +0.008646568 +0.01998982 +-0.009969048 +-0.022634633 +-0.014704908 +0.01653841 +-0.034788124 +0.011326306 +-0.017433181 +0.008751238 +-0.013121127 +0.010646756 +-0.00020222842 +-0.0010417133 +0.026868075 +0.01527854 +-0.009178264 +0.020550432 +0.01631681 +-0.008042782 +-0.016494269 +-0.00080805214 +-0.018503401 +-0.0068232412 +-0.0018583398 +-0.02118365 +0.020058623 +0.018659884 +-0.003349151 +0.005544988 +0.0095009385 +0.02510099 +0.00994819 +-0.0047122687 +0.015444727 +-0.019162297 +-0.012100937 +0.0053694504 +0.03317885 +0.0043101166 +-0.00643071 +0.01416597 +-0.0023652122 +-0.0044408888 +-0.006919898 +0.003105925 +-0.014000126 +0.01708458 +-0.011792964 +-0.002542167 +-0.0068118474 +-0.0063153775 +-0.033387143 +0.012425564 +-0.009809904 +0.012469497 +0.006384044 +0.013433787 +-0.002519 +0.004213143 +0.009123537 +-0.015771236 +0.011889 +-0.037567835 +0.0040308256 +-0.0059050885 +-0.0081776325 +0.012163813 +-0.0049541113 +0.04322639 +-0.009254913 +-0.002270805 +0.012721647 +-0.014384641 +-0.013272897 +-0.015956208 +-0.02121424 +0.0026889928 +-0.0014336684 +0.003882049 +0.01093081 +0.005703268 +-0.0043996116 +0.0207319 +-0.005486338 +0.0030428753 +-0.008387043 +0.026374605 +0.0093589835 +0.012184902 +0.0009554815 +-0.02781763 +0.006040733 +0.004854782 +-0.0032789994 +-0.011391518 +-0.0020175828 +-0.020238213 +-0.0002332342 +0.010783872 +-0.0059269685 +0.010511103 +-0.009614903 +0.013030669 +0.0011201999 +0.0021098386 +0.004703953 +0.008993676 +0.007335905 +-0.005179361 +0.004220222 +-0.0061252923 +-0.00030725676 +-0.028479612 +0.007962827 +-0.009265092 +-0.0017598524 +-0.010343572 +-0.007522283 +-0.012058999 +-0.017478937 +0.00981693 +0.006320802 +-0.022634167 +-0.0019273703 +-0.019862082 +0.0063504605 +-0.0016853691 +0.0038424549 +0.028547427 +0.020422062 +-0.023987083 +0.0007552808 +0.011447773 +-0.030370224 +-0.0094376 +-0.0035658323 +0.001785144 +0.007344844 +-0.026709111 +0.017082697 +0.009968973 +0.024305314 +0.029036883 +0.003249449 +0.013893584 +0.013282149 +-0.018750843 +-0.022702647 +-0.009304053 +-0.018998956 +0.007844063 +-0.0068407347 +-0.026618006 +-0.0050992137 +-0.0064131864 +-0.004487646 +-0.028518872 +-0.010746775 +-0.009227571 +0.008284715 +0.020586604 +0.007174117 +0.0020156486 +-0.017771728 +-0.005595173 +-0.02716289 +-0.020803278 +0.007515849 +0.005458219 +0.00017012164 +0.024898225 +0.01292735 +0.017347096 +-0.013103319 +-0.007120355 +-0.013024096 +0.00014769287 +-0.0025964123 +0.0053671505 +-0.010229584 +0.008989812 +-0.0033256148 +-0.034578536 +-0.009116081 +0.01827012 +-0.0108134225 +0.010181808 +-0.002863909 +0.014880069 +-0.0056468346 +0.010932302 +0.008117802 +0.006646289 +0.013016011 +0.00501851 +-0.029888976 +0.006968962 +0.0073440457 +0.008471863 +-0.0064735985 +-0.0038298673 +-0.026723007 +-0.008488987 +-0.0184932 +-0.011163598 +-0.013970127 +0.0114039155 +0.0054477067 +0.004113083 +0.0068491506 +0.011809292 +0.014393824 +0.008208687 +0.017053325 +-0.0074572107 +-0.0038904913 +-0.003440281 +-0.023348164 +-0.00028435455 +0.008972268 +0.018496675 +-0.001280845 +0.008353623 +-0.01553643 +-0.011612124 +0.017510256 +0.020006895 +-0.004961843 +0.0018998489 +-0.001197383 +-0.0048179952 +-0.0031625854 +-0.0064259022 +0.021047486 +0.017465375 +-0.01641147 +-0.0049105003 +0.015063414 +-0.033500712 +0.004405683 +-0.005401497 +-0.05483153 +-0.018274415 +0.0016983332 +-0.0046775443 +0.01390983 +0.023231668 +-0.023190014 +-0.0007696009 +-0.0034643216 +-0.007188344 +0.00779237 +-0.022970648 +-0.006678367 +0.0072746067 +-0.00081077847 +0.0011796231 +0.0067416765 +-0.012807217 +-0.034248304 +0.027940229 +-0.017743876 +-0.009804569 +-0.0054581873 +0.005322777 +0.000507305 +-0.006010853 +0.012026181 +-0.02220792 +-0.0061039985 +-0.011264101 +0.008203384 +0.01682802 +-0.018662771 +0.022574076 +0.0027532822 +0.005640912 +0.025685458 +0.0023261493 +0.008316827 +-0.02243183 +0.011492455 +0.0015223676 +0.00688317 +-0.013775643 +-0.020110818 +-0.02844315 +0.011262728 +0.0075385794 +0.02543818 +-0.0021348489 +-0.0052086622 +-0.0096155405 +-0.035128362 +-0.013250665 +-0.0029225384 +0.020824715 +-0.00081832806 +-0.009242939 +0.0061856858 +-0.01956345 +0.0041334745 +-0.02378348 +0.012664077 +0.029076045 +0.0011325254 +0.026058005 +-0.01222468 +-0.010260703 +-0.008276091 +0.012007925 +0.016759802 +-0.026264109 +0.007331164 +0.023089342 +-0.022880143 +0.018047478 +-0.01937135 +-0.015477084 +-0.00365319 +0.008744233 +-0.008520396 +0.002031556 +-0.00045583618 +0.014121665 +-0.019279387 +0.011549957 +-0.00057551864 +0.006533764 +-0.028112506 +-0.008100463 +0.013985378 +-0.010017027 +-0.013035501 +0.007971931 +-0.00353911 +-0.0005843343 +-0.015448762 +0.0046012 +0.010749133 +0.0023850873 +0.0029554237 +0.045069993 +-0.012960291 +-0.014026118 +-0.007823637 +-0.015137424 +-0.020683395 +0.020988096 +0.027148636 +-0.02672225 +0.008230371 +-0.012921321 +-0.004237661 +0.011834207 +-0.015104922 +-0.0030878845 +0.011053563 +0.008228482 +0.0007804256 +0.0101091275 +0.0030067747 +0.00035157154 +0.009292717 +-0.0013011699 +-0.0065715495 +-0.007711865 +-0.0052736574 +-0.018697025 +-0.00646854 +0.00022607399 +-0.0028238005 +0.014003245 +-0.027413042 +-0.008868958 +0.010519359 +0.008234009 +-0.0035838445 +0.020520683 +0.007825702 +-0.03348492 +0.014223226 +0.0062956195 +-0.007984891 +-0.00033844664 +0.0034232081 +-0.006870348 +-0.0013181033 +0.0020748398 +-0.00060789916 +-0.032505598 +-0.00060905656 +-0.0035025366 +0.008229036 +0.032490507 +0.016378256 +-0.0025029902 +-0.0034363708 +-0.0025273806 +0.009718553 +-0.007470005 +0.008910474 +-0.0030794514 +0.011213771 +-0.006699674 +0.011012396 +-0.0009627292 +0.025148848 +-0.011394204 +0.013179702 +0.0079071615 +-0.014735659 +0.003607068 +0.010699059 +-0.025964204 +-0.0022243713 +-0.016080212 +-0.00756043 +-0.0039638695 +0.047831267 +-0.0033553527 +-0.0011164354 +-0.024357544 +0.0153166745 +0.0010634895 +-0.034147937 +0.01043657 +-0.018531393 +-0.015189478 +-0.015160956 +0.0051700403 +-0.011637505 +-0.021135403 +-0.01874934 +0.0351109 +-0.021028625 +0.0033509508 +0.045339085 +0.0068552787 +-0.015326719 +-0.011823799 +-0.018378653 +0.0030299663 +-0.004076573 +0.009862745 +-0.014575907 +-0.0037076701 +-0.025456123 +-0.0013536367 +-0.013993126 +-0.010886834 +0.01788576 +0.0052101016 +-0.011652817 +0.024113359 +0.00014020137 +0.006187869 +0.012703757 +-0.017010836 +0.012003613 +0.0013866381 +-0.0014040684 +-0.013401593 +0.017414289 +-0.016643986 +-0.0056507727 +0.04149751 +0.01676771 +0.0017415856 +-0.0025494478 +-0.012581 +0.027710067 +-0.01786851 +0.022894138 +0.0257908 +-0.008610965 +0.0028437926 +0.001099629 +0.0033456008 +0.015725637 +0.006934104 +0.01339296 +0.0189354 +0.012226021 +-0.017056702 +0.006615531 +0.0045662764 +-0.021918664 +0.022864882 +0.011511827 +0.0010456557 +0.010902654 +-0.0028624479 +-0.02642979 +-0.017598419 +-0.00045906045 +0.00024948205 +0.0077338815 +0.025683993 +0.010834999 +0.016111504 +0.013737792 +-0.010627089 +-0.020803563 +-0.0060756225 +-0.00070195674 +-0.010675795 +0.0071793585 +-0.005778557 +-0.009975666 +-0.033961836 +0.005586128 +-0.019491708 +-0.025869057 +-0.016545335 +-0.0015055068 +-0.0031178484 +-0.040633723 +0.022459084 +-0.017578093 +0.0004691393 +-0.005778577 +0.014085662 +-0.0015408682 +-0.017796518 +0.03531055 +-0.0017988482 +0.0027736025 +-0.016846675 +0.00040555059 +0.014541318 +0.0065096566 +-0.0024513502 +0.0049422197 +-0.007964112 +-0.0014495124 +0.01163412 +-0.016323367 +-0.030675067 +0.00963538 +0.0025913836 +-0.019427361 +0.046415366 +-0.009543851 +-0.026683534 +-0.047698643 +0.010308129 +0.010292519 +0.004969383 +0.00479708 +-0.010983209 +0.024697108 +-0.01523037 +-0.0011320441 +-0.04547101 +0.011064287 +0.02427143 +0.0002934012 +0.011854758 +-0.021448772 +-0.0031159741 +0.0042339703 +-0.004808572 +-0.02841666 +-0.010213754 +-0.0035633675 +0.010726851 +0.026550664 +0.0073789954 +0.025044836 +-0.013212335 +-0.021559872 +-0.023947693 +-0.0024755301 +0.0034268969 +-0.0062512197 +4.353371e-05 +-0.014243814 +0.02057591 +-0.0027411082 +0.022129664 +0.020057065 +0.01634027 +0.0053894515 +0.002196941 +0.022961983 +0.02011768 +-0.045579024 +-0.012855494 +0.0008250975 +0.018442133 +-0.0177982 +0.015744679 +0.006767088 +0.0073480345 +0.002280313 +-0.007898428 +0.010457011 +0.01881387 +0.007265881 +-0.011512186 +-0.0035422759 +-0.02190554 +-0.008262965 +-0.0012221936 +0.006428705 +0.012073688 +0.0021565938 +-0.014648639 +-0.0050510555 +0.0031078702 +0.006563679 +-0.013860498 +-0.023547038 +0.00036351135 +-0.0051432964 +0.009249761 +0.012111197 +0.016222104 +-0.005858458 +-0.018743597 +0.01572413 +0.016402444 +0.009333644 +0.003204742 +-0.014275019 +-0.01648028 +-0.0012514705 +-0.00085767964 +-0.0042329784 +-0.030245464 +-0.0030354855 +-0.020981314 +-0.005072527 +0.059297904 +0.01097938 +0.0136817675 +0.0063238004 +0.0037822397 +0.0065048104 +0.0028312008 +0.013690331 +-0.0024543307 +0.0045051184 +-0.008140768 +-0.019561337 +-0.008890412 +0.014979636 +-0.00063794357 +0.0050679618 +-0.0013454988 +-0.008771496 +-0.017371194 +0.0065210285 +-0.004950859 +0.0069611627 +-0.015609945 +-0.009843854 +-0.027193127 +0.016686173 +0.009819812 +-0.011305873 +0.02907969 +0.016587751 +-0.0197633 +-0.0461164 +0.0057647265 +0.02704664 +0.010103525 +-0.012109673 +-0.014735914 +0.035522193 +0.011952954 +-0.0037234765 +-0.014958619 +0.03523536 +-0.017084325 +-0.011380247 +-0.012639759 +-0.006459136 +0.041963175 +0.014859995 +-0.0044769077 +-0.028630229 +-0.0132570295 +-0.0050486573 +0.002761156 +0.0028947664 +-0.0028601447 +0.01319952 +0.009431245 +-0.009572972 +-0.016023716 +-0.0037309753 +-0.005121342 +-0.0011473354 +-0.0006563571 +-2.9558994e-05 +0.020403108 +-0.0006952154 +0.016118472 +0.024207806 +-0.008883264 +-0.020435082 +0.028188204 +0.002401306 +-0.018773608 +-0.028240023 +0.01368734 +0.007517329 +0.029235516 +-0.0043904753 +0.007727227 +-0.024376443 +-0.027304746 +-0.02727521 +-0.0048017725 +0.008359633 +-0.0061672004 +-0.0050313184 +0.004841396 +-0.0011485614 +0.019168552 +-0.00019597732 +-0.0014953208 +-0.006764491 +-0.010640285 +-0.013220951 +0.012986316 +-0.0047963797 +-0.011759205 +-0.029324088 +0.026513997 +0.0066698897 +-0.005645513 +0.0147041045 +0.0055421535 +-0.021774879 +-0.0037502716 +0.0050056605 +-0.015484319 +0.02748116 +0.009381297 +-0.0042049387 +-0.021739323 +-0.00022753248 +0.01184775 +-0.006104694 +0.013373229 +-0.004979752 +0.019091744 +-0.010614054 +0.0044759763 +0.00629896 +0.0028010411 +-0.009155641 +0.0020062646 +0.019336982 +-0.0082166735 +0.022977302 +0.015991874 +-0.029667277 +-0.031983104 +-0.0096599255 +-0.025002329 +0.010195296 +0.04225537 +-0.007911382 +0.0070803934 +-0.011234134 +0.00057366566 +0.007704009 +-0.006866243 +0.0008729789 +-0.00260951 +-0.019839427 +-0.0023382788 +-0.0051146196 +-0.013500075 +-0.01570173 +0.02644109 +-0.013956575 +0.020554088 +0.016315747 +-0.017972115 +-0.0055039464 +-0.013396862 +-0.010042115 +-0.0010781591 +-0.00025836803 +0.008422618 +-0.009621914 +0.010326126 +-0.0074942205 +-0.028970264 +0.016193349 +-0.02616474 +-0.011336658 +-0.009154318 +0.007156476 +0.0126087265 +0.027818354 +0.01324818 +-0.029723093 +0.01860357 +-0.00052276434 +-0.012783713 +0.013529516 +-0.0030904203 +-0.007053083 +-0.003466509 +-0.01271761 +-0.004429925 +-0.011261273 +0.005854947 +-0.009223282 +0.013055399 +-0.006714925 +-0.0010931161 +-0.006231798 +-0.0049804337 +0.004361225 +0.005571822 +0.008433115 +-0.0053675207 +0.0119116185 +-0.03916262 +-0.018374622 +-0.0028685806 +0.022139587 +-0.00817668 +0.027594337 +0.013851469 +-0.03897326 +-0.03278489 +-0.028863441 +0.015402653 +0.010357989 +-0.0105182445 +-0.0032235729 +0.019102199 +-0.015021759 +-3.803357e-05 +0.024597872 +-0.02336836 +0.0049853125 +-0.0137726655 +-0.010099382 +-0.004177462 +0.010184258 +-0.03519872 +0.023780866 +0.017647475 +0.017224412 +-0.0026650205 +0.0031010332 +-0.005815418 +-0.009183096 +-0.0124192685 +-0.010615062 +-0.012084182 +1.5116757e-07 +0.0159507 +0.017138585 +-0.010508262 +0.019746676 +0.018872276 +-0.018854836 +0.013743675 +-0.013581314 +0.000658376 +0.004185345 +0.0014300906 +0.0062064757 +0.01726693 +-0.003191603 +-0.007006655 +0.021852985 +-0.012009902 +-0.015451524 +0.012075329 +0.0064586652 +-0.0077014873 +0.0036200965 +-0.0105861975 +-0.0041578403 +-0.0026556212 +-0.015843445 +0.004564187 +-0.002223644 +-0.004935435 +0.00067327614 +0.006483378 +-0.007524641 +0.014955029 +0.0072256057 +0.0074691 +-0.015055853 +0.017025668 +-0.00047484922 +0.000136959 +0.031270858 +-0.024412176 +-0.008474392 +0.0012265561 +0.005008862 +0.00544778 +0.001787643 +0.07354723 +-0.01740856 +-0.00085445214 +-0.007921105 +0.00034491872 +-0.00026042858 +-0.009241607 +0.00020997059 +0.01603415 +0.018957868 +-0.010820685 +0.010944366 +-0.0001469985 +-0.012640589 +0.012974064 +-0.0028446096 +-0.028769713 +-0.0192752 +-0.0051723784 +-0.0071743224 +-0.005340628 +0.011775603 +-0.0060167126 +-0.0008489694 +0.0054635913 +0.022815004 +-0.009920019 +0.0034512817 +-0.027998434 +0.0003369697 +0.014681628 +-0.016858973 +0.010752583 +-0.0045547374 +-0.018461864 +-0.016000984 +0.0068220333 +-0.00014657431 +0.028037172 +0.02148399 +-0.0031673762 +0.002289982 +-0.0052871024 +-0.002968341 +-0.013113735 +0.008647727 +-0.0014155617 +-0.02598632 +0.005710102 +0.0016814928 +0.0139145 +-0.001942626 +0.009278307 +0.019718923 +-0.0007937182 +0.006172928 +-0.00937866 +0.00529642 +0.013631294 +-0.02382366 +0.055384852 +0.0076580667 +-0.013874171 +-0.012256042 +-0.010611461 +-0.022432659 +-0.02478376 +-0.007031176 +-0.0066766706 +-0.0046691447 +-0.00382626 +0.021549327 +0.015060687 +-0.019421002 +-0.013916501 +0.0028939974 +-0.004128579 +-0.0010052627 +-0.008739724 +0.004080647 +0.0062755304 +-0.0044544474 +-0.014639668 +0.020357331 +-0.01926861 +0.005972657 +-0.00095498434 +-0.0010005103 +-0.014109672 +-0.0048962887 +-0.0015195603 +0.0023055112 +0.013014374 +0.009610486 +0.004455778 +-0.0025345692 +-0.010343917 +-0.019965313 +0.006359491 +-0.0026936533 +0.0072967536 +0.025384312 +0.016933944 +0.0030743857 +0.0081542395 +0.007803989 +-0.007473946 +-0.021598667 +-0.006042012 +-0.0017612039 +0.0048405216 +0.010112627 +0.0038890296 +-0.010966784 +0.02926557 +0.0011956012 +0.002112317 +-0.025730131 +0.00058568484 +-0.025318988 +0.00357263 +-0.022132955 +-0.013796477 +-0.0078872945 +0.014932334 +0.0037501857 +0.0018627973 +0.0276133 +0.011682853 +-0.006647178 +0.012145323 +0.011397466 +-0.013569469 +0.016123075 +0.019123916 +-0.015280003 +-0.010243711 +0.007528945 +0.007493811 +0.010361609 +0.032784265 +0.0049677626 +-0.001976414 +-0.0067478465 +-0.018104473 +-0.015703237 +-0.0016460837 +-0.009684231 +-0.0062252707 +-0.010629668 +0.017116714 +0.0056076823 +0.012627246 +0.014045594 +0.009489478 +-0.012541782 +-0.028651772 +0.007803732 +0.031603593 +-0.015226497 +0.0010061341 +-0.016731644 +9.454446e-05 +-0.00035769062 +0.018831445 +0.025317088 +0.011864264 +-0.0097356485 +-0.020988218 +0.015980778 +0.017603403 +0.0009168828 +-0.014025746 +-0.009274544 +0.0002720882 +-0.0032041 +0.015536047 +0.019714847 +0.025936322 +-0.014293944 +-0.0067643384 +-0.0033721523 +-0.010465489 +0.004277667 +-0.0033758532 +0.009542069 +-0.0029609057 +-0.0053317808 +-0.011238212 +0.007194475 +-0.0035699503 +0.008253842 +0.0011185628 +-0.031554684 +-0.043731038 +5.7609905e-06 +0.006361608 +0.0008266322 +-0.0034350497 +0.00805116 +0.0046096416 +0.005090108 +-0.007885455 +0.011793461 +-0.0029100229 +-0.032392405 +-0.0046359943 +-0.0149566075 +0.031735092 +0.010626899 +0.01506885 +0.0208938 +-0.014108661 +0.0047749 +0.0148089 +-0.0061767134 +-0.01270034 +0.0019774614 +0.003855921 +0.015809827 +-0.003200588 +-0.0032639292 +0.0095474 +-0.023962634 +-0.010689501 +-0.010534675 +-0.000485126 +0.015956918 +0.0070357174 +-0.0136137 +-0.015413863 +-0.016090577 +-0.010921711 +0.0126206605 +-0.01795687 +0.0013439133 +0.005385824 +0.009048565 +0.02034622 +-0.035496 +0.002244759 +-0.008774453 +0.0012085133 +0.0017784 +-0.0017960954 +0.0119052 +0.008768385 +-0.022404354 +0.026335657 +-0.011906496 +0.017441818 +0.00016484124 +0.007603549 +-0.018569963 +-0.00071006856 +-0.014253213 +0.027741864 +0.01103717 +0.013263999 +0.012999775 +0.002146764 +0.022026341 +0.009989824 +0.0023327298 +-0.009923646 +-0.005803243 +-0.010516932 +0.010620942 +-0.007185621 +-0.010167748 +0.0053141518 +-0.013138318 +0.010920899 +-0.0059488155 +0.006582121 +-0.010497942 +-0.012945674 +-0.016096866 +-0.009502913 +-0.007844308 +0.012562798 +0.02712302 +-0.019137336 +0.025263509 +0.0024648153 +-0.005029374 +-0.0075199 +-0.020737642 +-0.009934947 +0.0018442036 +0.021315956 +0.01288994 +0.009454666 +-0.03231992 +-0.008267287 +0.00040895733 +0.019700684 +-0.001169893 +0.0017000494 +0.009488822 +-0.010601442 +0.0066945846 +0.0069895177 +-0.02157254 +0.009109212 +0.013144431 +-0.004447572 +3.866646e-05 +-0.011977566 +-0.01647503 +0.000495867 +0.0049171564 +-0.045274768 +0.004703177 +-0.017128283 +-0.01286051 +-0.018195057 +0.0019314019 +-0.009861916 +0.0048462832 +-0.012290835 +-0.012301659 +-0.01130248 +0.004626805 +-0.006077003 +0.006458606 +0.06303688 +0.01784081 +0.029452292 +-0.0063335765 +-0.0029614922 +0.0022386792 +-0.023138145 +-0.013500097 +0.0010553133 +0.00593567 +0.003275857 +0.012823255 +-0.008211394 +0.012609549 +-0.014335882 +-0.0015185807 +0.014513447 +-0.0073546744 +0.0022747705 +0.0010385376 +-0.0012610422 +0.010676207 +-0.033128228 +-0.0047151633 +0.009556796 +0.0083044665 +0.0020648595 +-0.001879809 +-0.04347584 +0.019466707 +-0.0028516243 +-0.008620919 +-0.030016849 +0.0023068911 +0.008248779 +-0.015009174 +-0.024116263 +0.0017126208 +-0.013153138 +0.00350321 +0.008067429 +-0.018348698 +-0.0040016817 +0.015055065 +0.011423568 +0.0009415858 +0.0017401522 +-0.019460173 +-0.0069645653 +-0.019281331 +0.002063135 +-0.014892802 +-0.014006689 +-0.012317384 +0.016911615 +-0.010131883 +0.0036187207 +0.004659644 +-0.009465162 +0.0031094917 +0.0069164922 +-0.0050067124 +0.027462242 +0.01814655 +0.007164049 +-0.005488878 +0.031253006 +-0.008617666 +-0.018470645 +0.0017799165 +0.007264676 +0.00818634 +0.016361732 +0.015648039 +0.007865833 +-0.01792713 +-0.017609239 +0.02772414 +-0.02277122 +-0.01226675 +0.008459755 +0.0023413247 +-0.0041910135 +-0.018917168 +0.016398678 +0.012440738 +-0.009656287 +0.02763721 +0.016612861 +0.0040502013 +0.0024878206 +-0.0076856404 +0.011843004 +-0.026973138 +0.024005067 +-0.003119554 +-0.00096161995 +-0.008997172 +0.00887144 +-0.0039520785 +0.0043507805 +0.021094644 +0.010398344 +0.0026409447 +0.018098192 +0.024210554 +0.0066011786 +0.004753892 +0.0006853396 +-0.0034308874 +-0.024649354 +-0.014655313 +-0.00039711158 +0.0043063904 +-0.0074351123 +0.012255773 +-0.012088997 +0.017170738 +-0.014046675 +0.0051484094 +-0.0070775454 +-0.0012369984 +-0.03758922 +-0.0065785297 +0.0005469464 +-0.0027341393 +0.016282137 +0.008927738 +-0.002024555 +0.0016767032 +-0.013963036 +-0.0036266784 +0.018942993 +0.016309217 +0.006610561 +-0.0151134385 +-0.00036723603 +-0.013977526 +0.008137151 +-0.030441867 +-0.042671766 +-0.011046776 +0.0052007795 +-0.014618023 +-0.036958158 +0.0014334695 +0.008073837 +-0.0042543537 +0.02635157 +0.0136784315 +-0.014403833 +-0.049220704 +-0.015695432 +0.0078373505 +0.010299311 +-0.000565337 +-0.0036345043 +-0.0029477908 +-0.014147639 +0.0062069222 +-0.02484421 +-0.007210479 +0.013638679 +0.022811813 +0.010613143 +-0.03712546 +0.0027730253 +-0.026114302 +-0.016565073 +0.0014917406 +-0.01765118 +-0.007513558 +0.020882815 +0.0068570785 +0.010876758 +0.0040571466 +0.0021079164 +-0.013529084 +-0.005073946 +0.002920168 +-0.003738527 +0.0049350383 +0.01015227 +0.0014652759 +0.004146714 +-0.016515022 +0.026592528 +0.041308388 +0.008877509 +-0.0040251017 +0.0005859481 +-0.0126417475 +0.033076122 +-0.041403387 +-0.005208931 +-0.011975905 +-0.009288553 +-0.019271528 +0.031090725 +-0.005114228 +0.005447042 +-0.0077394396 +-0.004082126 +0.0103468895 +0.015899621 +0.008011291 +0.0072838264 +-0.022681344 +0.0008885454 +0.0036742077 +0.0007605384 +-0.00042840626 +-0.010116059 +-0.013778096 +-0.01692522 +0.009248342 +0.0048427405 +-0.00640441 +-0.01604178 +0.006883457 +0.0016437771 +0.009403254 +-0.0006773296 +0.001512338 +-0.00074552017 +0.0033553077 +-0.026335452 +-0.012012697 +0.0035566106 +-0.015686566 +-0.0042530764 +-0.0010474902 +-0.024463572 +0.006698039 +-0.0045840754 +0.0017495671 +-0.008673375 +-0.003285761 +0.0075418972 +-0.00919605 +0.04150986 +-0.0039304537 +0.07445704 +0.0056130853 +0.012231001 +0.010559107 +-0.0029790606 +0.00054783607 +-0.0048008575 +0.010209366 +-0.0037632762 +0.008548534 +0.019980866 +0.006104114 +-0.0010536455 +-0.0020105215 +0.0070647984 +0.012234655 +-0.019222604 +-0.008015421 +-0.01734184 +-0.028617445 +0.0037649127 +0.00043999212 +-0.00056600914 +0.0042944476 +0.0008601586 +0.0050166673 +-0.020863127 +0.013893965 +-0.0047068866 +-0.0073732478 +0.018959992 +0.0018243071 +0.0029124697 +-0.009763461 +-0.014349206 +0.0104659805 +-0.010825411 +-0.00020778332 +0.0076342174 +-0.0099715 +0.0018498144 +-0.017592762 +-0.006717901 +0.0036994205 +0.022404715 +-0.026307492 +-0.019309636 +0.0031895344 +-0.0128389215 +-0.015715083 +0.005168358 +0.004564041 +0.0048839212 +-0.0042186147 +0.020720802 +0.0063295173 +0.017761746 +-0.0027258352 +0.020324118 +-0.00025006867 +0.000102435144 +0.043871604 +0.014003841 +0.0006863132 +0.029469712 +0.02199459 +-0.0078245485 +-0.0033856868 +0.019081421 +0.0022576791 +0.008795617 +-0.030139025 +0.009299831 +-0.0036313185 +0.026449779 +-0.01638673 +0.00996791 +-0.0293411 +-0.028658267 +-0.01012205 +0.00114056 +0.011436709 +-0.025531482 +0.008139535 +0.018547438 +-0.021553118 +0.014657038 +0.012888922 +-0.03177877 +-0.0111956075 +-0.014327787 +0.0025436059 +-0.009930484 +-0.00718001 +0.005949755 +-0.0023583963 +0.009044027 +-0.007244564 +0.0038271197 +0.0021149172 +-0.004773949 +-0.0028285782 +0.005550246 +-0.003398485 +-0.019859893 +0.036090262 +0.015174461 +-0.0031803998 +0.013767539 +0.0077198492 +0.012427526 +-0.015064176 +0.009502478 +-0.016977092 +-0.0037181694 +-0.003235807 +-0.004225187 +0.001972817 +0.018706476 +-0.0062237075 +0.0034618692 +0.026794676 +-0.009009219 +0.0024449436 +0.01996523 +-0.010913209 +-0.0038126772 +-0.0027048993 +-0.023682298 +-0.029604875 +0.00043709375 +-0.022871466 +0.010016817 +0.007561512 +-0.031510063 +6.2021994e-05 +-0.009633232 +0.021701943 +0.020175522 +0.0071855523 +0.0030344753 +0.0006212317 +0.008657994 +0.009414039 +-0.0033928468 +0.006286801 +-0.028507357 +0.015747271 +0.00025061492 +0.0048568966 +-0.0078076976 +-0.031291064 +0.012052967 +-0.0081556 +0.014483292 +-0.012675093 +-0.024354026 +-0.011533257 +-0.011578229 +-0.027742974 +0.00041748336 +0.019372577 +0.0067347754 +0.013401833 +0.005817376 +-0.029508358 +-0.031534374 +0.0063420134 +0.0139219295 +-0.012505246 +-0.02824961 +0.012445052 +-0.022462038 +0.0010270543 +-0.028076237 +0.014792112 +-0.009272055 +-0.03303158 +-0.008205279 +0.0031255004 +0.0068906085 +-0.013285741 +0.0021502618 +0.0014995813 +-0.021980003 +0.016152581 +-0.0041540065 +0.014350614 +-0.031869005 +0.013812843 +0.00080267066 +0.016073776 +-0.020933244 +0.0063526183 +0.006718366 +-0.002569719 +-0.009452767 +-0.012514787 +-0.014846625 +-0.0027716423 +-0.0015638279 +0.0021667848 +-0.032489937 +-0.008004681 +0.041189674 +0.00093595235 +0.017529221 +0.016990507 +-0.019698882 +0.0018606678 +-0.00600842 +-0.01353283 +-0.017682608 +-0.0037749521 +0.009440133 +-0.0039639515 +0.009706978 +0.0026064904 +0.0011794823 +0.015781801 +-0.0013900859 +-0.011539459 +0.0112755895 +-0.0070139132 +-0.005152529 +0.023181977 +-0.005021782 +0.0030496425 +0.02838967 +0.0068715154 +0.021131942 +0.016792415 +0.029075606 +-0.009900325 +0.008597191 +-0.003102585 +-0.010543056 +-0.024436317 +0.009471401 +-0.0074546193 +0.0081597315 +0.0016282008 +0.002920975 +-0.013425937 +-0.00021426953 +0.003786514 +0.01825474 +0.00310664 +-0.019214997 +-0.02095508 +-0.0131156435 +-0.016728194 +0.013475417 +0.005734273 +-0.024192117 +0.014717529 +-0.015396886 +-0.018062513 +-0.0057458114 +-0.004817603 +-0.007192763 +-0.0026127861 +0.007168769 +0.0013050456 +-0.021568712 +0.03918063 +-0.0048194886 +0.0021382791 +-0.02078224 +0.00032836501 +-0.0010419133 +-0.011713803 +0.03316015 +-0.020339409 +0.0044481517 +0.024526745 +-9.743685e-05 +0.011933282 +0.00940868 +-9.4610805e-05 +0.019242423 +-0.0024512988 +-0.014238842 +-0.011667211 +-0.005664421 +-0.01359469 +0.0072675114 +-0.007355981 +-0.006552719 +-0.010155824 +0.011520346 +-0.008185356 +0.0015715224 +-0.0074127 +-0.0220312 +0.008621389 +0.01325043 +0.029046321 +-0.009033866 +-0.0027393866 +-0.06253569 +0.012106905 +-0.003943209 +-0.0150752645 +-0.00364362 +0.013818153 +0.007897529 +-0.012922382 +0.020693872 +0.019323695 +0.003811979 +0.020305725 +0.029449085 +0.009012529 +0.0025532749 +-0.005344365 +0.00856238 +0.012057105 +0.0021579866 +-0.008886522 +0.014561045 +-0.020867622 +0.014095866 +-0.0008396913 +-0.00019623534 +0.030111156 +0.0020221318 +0.003316685 +0.005368253 +0.006530953 +-0.0033159018 +-0.025795959 +0.052619714 +-0.0010746182 +-0.0034888743 +-0.0042487383 +-0.013109831 +0.0037393707 +-0.018008318 +0.0019290957 +0.0047108294 +-0.0042002453 +-0.0037984871 +0.006911679 +0.0069816574 +-0.011861421 +-0.023872826 +0.0122029595 +0.0130578615 +-0.007571553 +-0.0012928136 +-0.0035548767 +-0.018734992 +-0.008721455 +-0.009528729 +0.01229618 +-0.015068357 +0.01836244 +0.0030625574 +5.686817e-05 +-0.016056633 +-0.025128193 +-0.0012195476 +-0.019900877 +-0.0085396515 +0.0059133503 +-0.004304245 +-0.0029050002 +-0.013486236 +-0.0061289864 +0.0036065835 +0.015531427 +-0.0053088423 +-0.0056067426 +0.012470017 +-0.014573528 +0.003437148 +-0.010216763 +-0.014292939 +-0.014230722 +-0.00021313094 +-0.011338641 +-0.011517654 +0.008546774 +0.007808348 +0.0027833001 +0.028008861 +0.015644424 +0.010037405 +-0.013842104 +-0.003567802 +-0.01845529 +-0.00068511313 +-0.014872873 +0.0006580745 +-0.015928902 +0.020949302 +-0.00066794443 +-0.022208055 +0.01025858 +-0.0107715465 +-0.0028853705 +0.009729491 +0.007432669 +0.009215427 +0.00651845 +-0.004171422 +0.004584366 +-0.006066714 +-0.0053143203 +0.017005265 +0.019683238 +0.027962098 +-0.014538533 +0.013637856 +-0.025889687 +-0.004730914 +0.012377048 +-0.00072103966 +-0.01747183 +-0.0034635144 +0.0056220484 +0.0041977856 +0.0004303367 +0.0073689837 +-0.01027288 +-0.018312432 +0.016164595 +-0.006246678 +-0.0022021676 +0.026384143 +-0.024295462 +0.0046784473 +0.0064198677 +-0.0049996525 +0.008754773 +-0.009415014 +0.016590867 +0.0066085258 +-0.010597015 +-0.0078087556 +0.0012287869 +0.018532032 +0.0024061636 +-0.008787031 +0.0013506085 +-0.0050657033 +-0.0045197397 +0.020943493 +0.013023356 +0.021161746 +-0.019494852 +-0.0020539113 +-0.001792472 +-0.010581559 +0.00087039376 +0.0014342619 +0.0065990514 +0.0029603806 +-0.014322784 +-0.02124446 +0.0045029535 +-0.0056115873 +0.017906789 +-0.0019854545 +-0.024698889 +-0.04722057 +0.006900797 +0.001662335 +-0.01460069 +-0.0015140765 +-0.008463351 +-0.008742573 +0.013836118 +-0.0021078235 +0.01102964 +0.0004896407 +-0.014688655 +0.0056318617 +-0.007232734 +0.02412179 +0.0023997372 +0.0026772188 +0.019402975 +-0.013722785 +0.008102003 +0.010880484 +-0.017000562 +0.0070577804 +0.019847175 +0.0023569148 +0.022109015 +-0.0088569615 +-0.001909542 +0.008851727 +-0.018735206 +-0.012671245 +0.017213987 +0.004805431 +0.032492314 +0.0007102755 +0.006669409 +0.019095015 +-0.015706876 +-0.0137403 +0.026422638 +-0.003500769 +0.005396371 +0.009638801 +0.013378423 +0.0017788652 +0.00018163658 +-0.0070100827 +-0.0018284612 +0.009002504 +-0.008257437 +0.019278726 +0.0006997014 +-0.0037469885 +0.00307985 +0.004795674 +0.003601785 +0.018502483 +0.001328343 +0.004506028 +0.0032434845 +0.009282083 +-0.010446991 +-0.0015281838 +0.014384138 +0.00906974 +0.0031179106 +0.008065847 +0.0068978313 +0.014271983 +0.00713408 +0.01331831 +-0.012794319 +-0.016355276 +-0.0005811959 +-0.0131626185 +-0.025291536 +-0.006924733 +-0.0061473963 +0.0044373707 +-0.0073304996 +-0.010511246 +-0.016342295 +-0.002554472 +0.009413408 +0.0021373788 +0.011325238 +0.017783795 +-0.006161539 +-0.014020088 +0.014986259 +-0.029912632 +-0.013959536 +-0.013725921 +-0.01473734 +0.0028952663 +0.008018867 +0.006486517 +0.0043946085 +0.005516045 +-0.05708039 +0.0055240914 +0.019614005 +0.020757966 +-0.0023883462 +-0.0053393412 +-0.014272365 +-0.030567698 +-0.0049277567 +0.00043449714 +-0.021198433 +0.0033617676 +-0.0003737198 +6.60623e-05 +0.007838226 +0.0108191185 +-0.005370862 +-0.020268217 +0.0015387642 +-0.013489311 +0.00439499 +-0.0135812005 +0.016020842 +-0.0034256799 +0.018771628 +0.019320559 +0.008070938 +0.0030712632 +-0.010818553 +0.024969455 +0.017311295 +-0.008772758 +-0.033955973 +0.06900179 +-0.012727981 +0.08617239 +0.023216516 +-0.009009414 +0.004675625 +0.010423465 +0.004738118 +-0.0024814114 +0.00081984646 +0.0072836815 +0.012301063 +0.008420307 +-0.0008045258 +-0.009162722 +-0.008364554 +-0.0029821633 +-0.010514539 +0.02239492 +-0.011771894 +-0.00957706 +0.006088506 +-0.017796177 +0.013706819 +0.010699636 +-0.00445038 +-0.0014350828 +0.012180901 +-0.0162198 +0.020756982 +-0.03248699 +-0.0037051213 +-0.031120367 +-0.00016800207 +-0.011933418 +-0.010962348 +-0.03310827 +-0.023117749 +0.010036029 +0.0017625268 +-0.016756034 +0.00097597146 +0.0034031067 +0.008119045 +0.010564331 +-0.004766279 +0.009800389 +-0.0011862546 +0.0044163605 +-0.01851327 +0.0013234391 +-0.020865405 +0.0013291002 +-0.014902863 +-0.0036902935 +-0.017302005 +0.010247463 +-0.021784412 +0.009241405 +-0.019294431 +0.028742708 +-0.0008691449 +0.016088502 +0.011475469 +0.013475742 +-0.011376506 +0.03467836 +-0.0032863545 +-0.017555822 +-0.01512059 +0.008774136 +0.008990657 +0.006338837 +0.014386114 +0.019365666 +-0.018126916 +0.006595578 +-0.0019313169 +-0.009509469 +-0.036804307 +0.0052639493 +0.0015460956 +-0.0016293636 +-0.018535675 +0.0049976534 +0.020235078 +-0.01648374 +0.02870945 +-0.013665427 +0.021769049 +0.0054811398 +0.003954189 +-0.013423482 +-0.029748127 +0.023847437 +0.0066162534 +-0.013494069 +0.01964128 +-0.0005639024 +-0.013954369 +0.009156351 +-0.0021024768 +0.0345282 +0.004220249 +-0.017997121 +-0.0009458424 +-0.004152927 +0.004204951 +0.0005879692 +0.0071665477 +-0.021340465 +-0.010372144 +0.019533705 +0.004985119 +0.0026813215 +0.03509115 +-0.010498171 +0.0007850066 +0.00744995 +0.027761074 +-0.0064821886 +0.010908275 +-0.039597303 +-0.00918201 +0.0032627038 +0.010787989 +0.021720756 +-6.660175e-05 +0.014822863 +0.0053178524 +0.015614258 +0.020961901 +-0.005093645 +-0.002233542 +0.031091334 +-0.0041862917 +0.004128188 +-0.0017636204 +0.004457478 +-0.025806785 +-0.022191362 +-0.028357558 +0.009909313 +0.0031881193 +0.0055583 +-0.0009253953 +0.010029829 +0.006318951 +0.025643269 +0.021900872 +-0.0089360075 +-0.01137796 +-0.012991503 +-0.027950639 +0.0308465 +-0.01463569 +-0.01477062 +0.0017298305 +0.010552554 +0.010465121 +-0.015593306 +0.005192666 +0.013060989 +0.004031453 +-0.014371515 +-0.0013911704 +0.002935315 +0.024658648 +0.0033074943 +-0.022684563 +-0.0059951968 +0.02645256 +0.010609437 +0.0049478738 +0.02076962 +-0.0018973702 +0.01683897 +-0.0008825047 +-0.021757297 +0.005520383 +0.003656254 +-0.0035964851 +0.0052638357 +-0.021166328 +-0.009013205 +-0.0031118556 +0.024548454 +0.004448252 +0.010615853 +-0.0049608517 +-0.03273111 +-0.0047151153 +0.0299201 +-0.01767704 +-0.010116955 +-0.0076514957 +-0.003429246 +0.000948109 +0.017087031 +0.0035699194 +-0.0053383387 +-0.0047751213 +-0.008136997 +-0.010548152 +-0.013146562 +0.017665891 +0.004987888 +-0.04400015 +0.0009285426 +0.018669177 +0.0025589173 +-0.002746966 +-0.0047252 +-0.017877514 +-0.005808308 +-0.0036999483 +0.0022621667 +-0.025169881 +0.009385353 +0.015973972 +0.014620689 +0.008256291 +-0.0071973396 +-0.002535751 +-0.008714984 +0.0026055868 +-0.005449932 +-0.019564368 +-0.013337288 +-0.0010394771 +-0.010731311 +-0.007727405 +-0.0037391938 +-0.0011384356 +0.0010463905 +-0.0012164959 +-0.006279878 +0.0087074805 +-0.0036402033 +-0.024987223 +0.045766734 +-0.00089322386 +0.089750834 +0.004989187 +0.00077188195 +0.017728854 +0.00645582 +0.0012510492 +-0.0014122297 +-0.009521583 +-0.008913163 +0.0076652584 +-0.00109945 +0.0041836514 +-0.016660657 +-0.019431641 +0.010702062 +-0.0034848968 +0.025643067 +0.00221969 +0.017155504 +-0.0134913325 +0.012347816 +0.02109815 +-0.052145164 +-0.03601342 +-0.0032903806 +-0.01649729 +-0.002142143 +-0.0055672824 +0.003645342 +-0.0084534595 +-0.03133864 +0.0028877084 +-0.00026617618 +-0.033626404 +0.007602579 +-0.0005595564 +0.026922956 +-0.0078105456 +-0.0121569475 +0.009360931 +0.00060195354 +0.023639953 +0.009663833 +-0.008744145 +-0.0026896019 +0.016717479 +-0.003485418 +-0.0107555 +-0.03448149 +-0.016038435 +-0.009988511 +-0.010740983 +-0.0016929364 +0.004487267 +0.01264521 +-0.0105000185 +-0.02384282 +-0.0020353452 +0.005047834 +-0.009131728 +-0.021360919 +-0.023223821 +-0.014072828 +0.007939667 +-0.017894143 +0.0191859 +-0.025878223 +-0.013452183 +-0.009951203 +0.018506132 +0.026183031 +-0.017767617 +0.015182691 +0.0006903987 +0.006711162 +-0.0008599043 +-0.011078476 +0.0025212704 +0.000896992 +-0.014545514 +0.0013923353 +-0.0076340055 +0.014798005 +0.007619491 +0.0068700192 +0.0023935977 +0.014124838 +0.008905527 +0.016455108 +0.020507164 +0.038215224 +-0.010075603 +-0.0044481372 +0.005256711 +0.00088519586 +-0.022193307 +0.0038115801 +-0.0016072775 +-0.003294382 +-0.013399205 +0.0012605507 +-0.030325323 +-0.027074007 +0.02043273 +0.017005747 +-0.0026414183 +-0.0021640605 +0.006058256 +-0.03580521 +0.020811629 +0.008116885 +-0.0010978592 +-0.0077433763 +-0.008617176 +-0.0005942558 +0.014168302 +0.015904477 +0.004783051 +0.0038658895 +-0.0061572613 +0.011247972 +0.00893303 +-0.00982941 +-0.0018597082 +-0.0068142856 +-0.0011517555 +0.0075801904 +-0.00059261324 +0.023840727 +0.012313117 +-0.0100782765 +0.025439065 +0.01291377 +0.0039490582 +-0.013908182 +-0.01859152 +0.002530399 +0.004482249 +0.023247257 +-0.030084133 +0.011078219 +0.010352236 +-0.02177578 +0.018273983 +0.0029440501 +-0.00955926 +-0.0047061597 +-0.0012253657 +-0.0006948417 +-0.03245928 +-0.017321298 +0.008088641 +0.015524687 +0.0020698747 +0.01877616 +-0.027822005 +0.015232689 +0.0032518727 +-0.040807378 +0.031600364 +0.0012422927 +0.0069743935 +0.0023583437 +0.018247925 +0.002469469 +0.029331954 +-0.016825026 +-0.03397044 +-0.02890107 +-0.029478943 +-0.026015367 +0.0038169648 +0.012422122 +0.008661381 +-0.016356764 +0.0011911336 +-0.01342178 +-0.02731009 +0.010457673 +-0.008156305 +-0.0055557746 +-0.011763226 +0.0314356 +0.013919003 +0.02063623 +-0.0053840033 +-0.012214033 +-0.009700321 +-0.034616444 +-0.0037751507 +0.028645499 +-0.006749158 +0.022329308 +0.0078822905 +-0.0070673395 +-0.005683146 +0.020786935 +0.006133952 +-0.0070623322 +-0.030899756 +0.024128577 +-0.0031774165 +-0.0104751745 +0.01334409 +0.016097069 +0.0047414317 +0.015385299 +0.0058436976 +0.025325604 +0.008339874 +0.005951218 +-0.032708477 +-0.016605299 +0.01458012 +0.0024340872 +0.007995841 +0.011070516 +0.017507358 +-0.01697635 +0.011028332 +0.010293308 +-0.00857727 +0.0093475655 +0.014969376 +0.008486641 +-0.008290889 +-0.02617559 +0.010388084 +0.002413936 +-0.008008127 +0.0004100168 +0.0053556846 +-0.004821184 +0.019883128 +0.0101756295 +0.015375909 +-0.007535291 +-0.047381975 +-0.0064096223 +-0.011136858 +0.043974347 +0.016326275 +0.01745269 +-0.0018981752 +0.0016166597 +-0.02556688 +0.004112031 +-0.010601865 +0.0065007186 +0.01965811 +0.013133924 +0.003565605 +0.009170976 +0.0065536057 +0.010719906 +0.013858857 +0.0006970617 +-0.0031526517 +0.021140033 +-0.008702196 +-0.020555127 +0.01081375 +0.019121133 +0.014359846 +-0.0027495632 +-0.044609062 +-0.014710724 +0.0079220915 +0.01616015 +0.019975947 +0.0054065622 +0.023841899 +-0.027939 +-0.0068413815 +-0.041054387 +-0.01167867 +-0.013452493 +-0.0038269742 +-0.0025099826 +-0.019858044 +-0.011331723 +0.0067853224 +-0.00708202 +0.0024791453 +0.03491084 +-0.012061829 +-0.026194837 +-0.00635445 +-0.02134642 +0.0015697009 +0.015357586 +-0.011257593 +0.015266307 +-0.0019830938 +-0.015346005 +-0.0054379916 +0.011394757 +-0.018162861 +0.02399571 +-0.0072946562 +0.04283233 +0.013044828 +-0.0025428352 +-0.00012872106 +0.0147862695 +-0.0023646145 +0.0061790203 +-0.0053008925 +0.003840992 +0.008985487 +0.0062494627 +0.010608378 +-0.019611487 +0.0078080124 +-0.011723064 +-0.013297746 +-0.004588089 +0.0015216026 +0.017426431 +-0.023965787 +-0.00603838 +-0.017019719 +-0.0029079726 +0.013668509 +0.0075273584 +0.012953279 +-0.0061225556 +0.0012384556 +-0.013429968 +-0.020421311 +-0.026614346 +-0.007043157 +0.052891225 +0.0088532455 +-0.011340164 +-0.007713434 +0.011588881 +0.01553926 +-0.019489503 +0.0066396496 +-0.01745908 +0.028479483 +-0.007832727 +0.0038562724 +-0.0025409549 +0.01685014 +0.009209638 +-0.002667579 +0.0073489486 +-0.019925611 +0.0063635977 +0.021694096 +0.0012001808 +0.020410484 +0.010330362 +0.02609101 +-0.005303326 +-0.005450918 +0.002846924 +0.0018894507 +-0.03018829 +-0.026493885 +-0.0052002287 +0.000794042 +0.017694786 +0.004640865 +0.0025861743 +0.0020843775 +-0.021981964 +-0.021352924 +0.005668615 +0.009660934 +0.02858888 +-0.006744512 +-0.02207915 +0.0008233944 +0.0055933534 +0.0029370247 +0.0037349954 +0.0141559215 +0.0073533165 +-0.0032487668 +0.005154565 +0.0012829141 +-0.0051998245 +-0.0059186104 +-0.011945587 +0.011214668 +0.019922573 +0.012509277 +0.0035083066 +0.0022010861 +0.0051478404 +8.8315464e-05 +0.016634837 +-0.0035481264 +-0.012364755 +0.0021596835 +-0.0036212509 +-0.036852274 +0.036059104 +-0.034098405 +-0.010915871 +0.00017546621 +0.009767419 +-0.02567931 +-0.029489359 +0.005997369 +0.00950285 +0.0097984625 +-0.0101624215 +-0.006972575 +-0.023320653 +0.012121829 +-0.007890386 +0.026034562 +-0.0004150144 +-0.0054043126 +-0.009411249 +-0.012527152 +0.011387035 +0.0025977618 +0.00046133995 +-0.034462586 +0.029733675 +0.0011117362 +0.009635554 +-0.01899666 +0.019849798 +-0.010374488 +0.0006608039 +0.012179843 +-0.0017955011 +0.015423692 +-0.003791895 +0.021307888 +0.008732318 +0.0044667004 +0.010999267 +0.0010731544 +0.018616484 +0.01546085 +0.0013346496 +0.0012836732 +-0.0055329204 +-0.017086057 +-0.012700476 +-0.0031742174 +-0.013981721 +-0.022366153 +0.012765709 +-0.0028815886 +-0.0070651667 +-0.0019573562 +0.028829368 +0.00783956 +-0.024388053 +-0.0021541768 +-0.0006419476 +0.016618285 +-0.014670721 +-0.004036417 +0.008283929 +-0.008103731 +-0.00782515 +-0.017383698 +0.00035169875 +-0.02272423 +0.02718144 +-0.0010572259 +-0.009719037 +0.0103389695 +0.0011778731 +-0.009530995 +-0.0149957165 +0.006604945 +-0.0048791794 +-0.0052336766 +0.027232438 +0.015614895 +0.013838445 +0.021784326 +0.011132057 +-0.008661173 +-0.007993545 +-0.006421446 +-0.022045285 +0.0064730644 +-0.016038112 +-0.01704104 +0.0027231893 +-0.02168373 +0.008547622 +-0.0022966776 +0.022914356 +-0.010199706 +0.005367891 +-0.02799592 +-0.03908324 +0.018329097 +0.0027647847 +0.0082950145 +0.026489306 +-0.0060926178 +-0.005279509 +0.006392356 +-0.012068852 +-0.0059368415 +-0.042833827 +-0.008622114 +-0.0017947949 +0.01814254 +0.020085616 +0.0079669375 +0.024654442 +0.020394009 +-0.033108834 +0.003358521 +-0.0024009747 +-0.007240562 +0.0011729309 +-0.0062784767 +0.014725236 +-0.027477473 +0.0010675199 +-0.008061883 +0.016573217 +-0.007245708 +0.020429991 +0.014073366 +0.008667794 +0.01824719 +-0.0042898036 +-0.00616584 +-0.011587042 +-0.009420465 +-0.003877029 +-0.00860792 +0.0031986104 +0.0075286156 +0.012224856 +-0.009783226 +-0.00051975437 +-0.007812634 +0.026577808 +0.00830658 +0.014196999 +-0.0054229703 +-0.023576522 +-0.012187364 +-0.0052784802 +0.00719282 +0.005194874 +0.010213941 +0.014152739 +-0.0010715827 +-0.007348773 +-0.004838403 +-0.023647163 +0.019107753 +-0.015732028 +0.024665099 +0.022059673 +-0.012928588 +-0.0038019542 +-0.003288944 +0.010039768 +0.0012923768 +-0.027249102 +-0.01064389 +-0.035490144 +0.023026647 +-0.007238696 +-0.006501525 +-0.027958157 +-0.02135135 +-0.014146089 +-0.009316184 +0.014169925 +0.002183048 +0.0099099735 +-0.012207688 +0.00041425653 +-0.004818746 +0.006916531 +-0.0090469755 +0.0014293669 +0.0034964778 +0.015483354 +0.009832048 +-0.0056760767 +0.0064086136 +-0.018078191 +-0.006911712 +0.021030355 +0.008836177 +-0.0051669297 +-0.0053508813 +0.032644372 +-0.0036141407 +0.020149395 +0.019290004 +-0.00058283313 +0.014132192 +0.014236879 +-0.0012531606 +-0.0235024 +-0.020616043 +0.016655462 +-0.009009708 +-0.022741668 +-0.0011874018 +-0.0004024506 +-0.004031861 +-0.0031737399 +0.002091562 +-0.022180682 +-0.011657097 +-0.013471308 +0.03680551 +-0.017652385 +-0.00027413934 +-0.011611606 +0.023816973 +0.005115453 +0.009312904 +-0.017441398 +-0.0031023014 +-0.008078644 +0.013837908 +0.0056129517 +0.013222419 +-0.020804644 +0.003140939 +-0.007698214 +0.024605142 +-0.056003522 +0.0077284505 +0.027957657 +-0.0071288235 +-0.0017461054 +-0.015443455 +0.026957132 +-0.03133871 +-0.010433213 +-0.014833654 +0.01733321 +-0.0014319987 +0.0210322 +0.0151536735 +-0.0013230896 +-0.013363518 +-0.011640766 +-0.011764144 +0.009163153 +0.00081461406 +0.013655185 +-0.0066295015 +0.011061438 +0.031035542 +0.0039557056 +0.011159242 +0.002964264 +-0.011984272 +0.022714196 +0.0072793285 +0.0052644336 +0.0006087377 +-0.027975367 +-0.026318576 +-0.03679688 +-0.01391208 +-0.00019510319 +-0.0030119212 +-0.0027422144 +-0.01002795 +0.0048961537 +-0.030268736 +-0.01493741 +0.0033941548 +-0.017435357 +0.0026655036 +0.017208053 +0.002495677 +0.009638619 +-0.011710417 +-0.021401525 +0.022381533 +-0.009464051 +0.014135464 +-0.0143258115 +-0.00034831933 +-0.01923579 +-0.0003450999 +-0.023598643 +0.02515788 +-0.009657223 +-0.009528766 +0.0006120424 +-0.0036434082 +0.007973354 +0.018481322 +-0.0021597105 +-0.0134167075 +0.013484603 +-0.013608648 +-0.002108898 +0.0089305565 +0.017891914 +-0.0045885663 +0.0039035184 +0.005857302 +0.01660654 +-0.0144031625 +-0.014412265 +-0.026470652 +-0.0035775118 +-0.0054155136 +0.022837138 +-0.006072135 +0.014220336 +0.0040934896 +-0.004125726 +0.017256204 +0.011738969 +0.02369011 +0.014115308 +0.0028377892 +0.03026875 +0.00088104355 +-0.026762787 +-0.00088090973 +-0.0122187855 +-0.0051575447 +0.014286256 +0.005649987 +0.0059585376 +0.01758246 +-0.0089409035 +0.008636875 +-0.0030846053 +0.0053636986 +0.021904781 +-0.0036047176 +-0.01647089 +-0.007980248 +-0.013243888 +0.0149473045 +-2.3600296e-06 +0.02078997 +0.0048435815 +-0.027523149 +0.015109256 +-0.0046869474 +-0.018779097 +0.0066069667 +-0.0118387705 +0.0050502988 +0.019053329 +-0.009121859 +0.019278802 +-0.020967979 +0.017718736 +-0.0076189605 +0.0028023238 +-0.03767841 +-0.018531756 +0.03233308 +-0.005203811 +-0.0125706 +0.0016006178 +-0.012779965 +-0.02372818 +-0.007330101 +0.003187865 +0.023287635 +0.00050428323 +0.02305045 +-0.0008772197 +-0.0079087345 +0.00015426449 +-3.5860583e-05 +0.0013224112 +-0.010697175 +-0.007254685 +-0.011699838 +0.0029648866 +-0.008194289 +0.027410625 +-0.0065958574 +-0.021073854 +0.015395748 +-0.0016113364 +-0.015362987 +0.022112496 +0.038929187 +0.0021999117 +-0.010030376 +0.012679774 +0.004682911 +-0.0050853174 +-0.012220935 +0.012591872 +0.0043216837 +-0.014655323 +0.024169808 +-0.021866675 +0.009903032 +-0.014209975 +0.014973288 +0.015350339 +-0.008912847 +0.029260537 +-0.005603227 +0.011119372 +0.015099327 +-0.026576927 +-0.0021549207 +0.0155613655 +-0.01172783 +0.0028149895 +0.00047261914 +-0.032176517 +0.0073790327 +-0.009063122 +0.014201633 +0.024055474 +0.003855911 +-0.004704355 +-0.009683559 +0.012234201 +0.007239435 +-0.012559355 +-0.018260652 +-0.01313504 +-0.0019292745 +0.013374777 +0.022858756 +0.010605345 +-0.005407107 +-0.034240138 +0.009461259 +0.010530017 +-0.028803907 +0.014071785 +0.0113020465 +-0.0018323208 +-0.0076557514 +-0.003219614 +-0.016777648 +0.018336337 +-0.007307632 +0.0066256225 +0.007994766 +-0.016530825 +-0.024449242 +-0.011555861 +0.0075026313 +0.0048481077 +-0.012247274 +0.012777384 +0.018225688 +-0.006963956 +-0.032950442 +0.005582485 +-0.007870514 +0.0072949654 +-0.01887624 +-0.0068148235 +0.015661906 +-0.0163223 +-0.014004171 +0.008199093 +-0.005131265 +-0.019073945 +-0.01395297 +0.011147064 +-0.026685275 +-0.021532394 +-0.002789139 +-0.0025115763 +0.019684704 +0.009130429 +-0.003411362 +-0.01835343 +0.0018918875 +-0.004728956 +-0.0006759047 +-0.00019394068 +-0.008680007 +-0.0104245385 +0.011124782 +0.0010767191 +-0.0066184243 +0.023240512 +-0.030312221 +-0.011386148 +-0.0046691205 +0.0014951712 +-0.01081342 +-0.010377707 +-0.0153390365 +-0.010280806 +0.028777355 +-0.0019506313 +-0.0076738256 +0.004464573 +-0.0019507105 +-0.016801096 +0.0018423644 +0.00991175 +-0.0052620787 +0.01353852 +-0.017459588 +-0.0027789783 +0.015299628 +-0.0053164707 +0.01733772 +0.028736848 +-0.010760471 +0.0153994495 +-0.00287592 +-0.03481356 +0.018006215 +0.011445097 +-0.007099116 +0.013601042 +0.01895887 +0.02295798 +-0.0058207717 +0.023335528 +-0.016086863 +0.008902431 +-0.0019730157 +0.026220325 +-0.037587848 +0.0074632326 +0.013858602 +0.0069241156 +-0.017905418 +0.009303718 +-0.018932406 +-0.054859508 +0.023497783 +0.028355103 +0.018937746 +-0.0134592485 +-0.023493174 +-0.024594253 +0.022560617 +-0.02700958 +0.018979779 +-0.0046352716 +0.0051180176 +-0.0074926773 +0.009479123 +-0.01584311 +0.00049846136 +0.01564689 +-0.0035440056 +-0.011818522 +-0.009201541 +0.022970403 +-0.0077230935 +-0.002064451 +-0.00984246 +-0.0299377 +0.01948995 +-0.015941098 +-0.01638947 +0.0011451563 +0.013931742 +0.023033094 +0.008817656 +-0.003039582 +-0.023251915 +0.006687755 +0.018618163 +-0.007911077 +-0.020666154 +0.015720872 +0.017254138 +0.007812218 +-0.0076386607 +-0.008433291 +-0.009733332 +0.016069232 +-0.013225972 +-0.023771731 +-0.050877504 +-0.014436509 +0.008097466 +-0.018905915 +0.0026021397 +0.035941362 +-0.015902586 +0.010940818 +-0.01644857 +-0.011914418 +0.028989667 +-0.0073944307 +-0.007534952 +0.0016124789 +-0.0012535481 +-0.010021088 +-0.015291662 +0.00443053 +-0.021806465 +0.015296485 +-0.014153124 +-0.0066904803 +0.00055658893 +-0.02034879 +0.00014654084 +-0.0043921713 +-0.0099988235 +-0.0038511483 +-0.015027437 +0.02685239 +0.0191574 +0.015593617 +0.012683632 +0.0067125275 +0.012185918 +0.019684512 +-0.012347906 +-0.015573075 +0.00360276 +-0.04989194 +-0.004053364 +0.018243749 +-0.03455562 +0.02034081 +-0.008720035 +0.014061011 +-0.017614678 +0.0065519693 +-0.006775594 +-0.0014817627 +-0.0041214684 +0.0010618023 +-0.00069544243 +-0.015366047 +0.002542525 +0.013459217 +0.0013877469 +0.021435106 +0.0052537466 +0.014580458 +-0.033861186 +0.0014912746 +-0.008305618 +-0.012512457 +0.0062040146 +0.010069295 +0.000498372 +0.004397149 +0.015571017 +-0.0041720695 +-0.009929954 +-0.013287007 +-0.029873114 +-0.00477288 +0.004277632 +0.011327693 +0.00033695923 +-0.024845097 +-0.021652866 +0.0058871605 +-0.0049080434 +0.0067185033 +0.0165747 +-0.0117902085 +0.0123131825 +-0.006927863 +0.014408952 +0.004344102 +-0.028361764 +0.017162237 +-0.02562799 +0.030670958 +-0.0023705382 +0.014192029 +0.0007871551 +-0.011875104 +-0.022345403 +-0.019522334 +0.009906095 +-0.011321878 +-0.007611242 +-0.007056532 +0.007881742 +0.011500623 +-0.0011958415 +0.012683091 +0.0151450625 +0.0035433702 +-0.020316964 +0.009053162 +-0.00042540516 +-0.008972851 +0.016480137 +-0.007655442 +0.017394988 +0.00737674 +-0.016011214 +0.011069437 +-0.0019626003 +0.0120451655 +0.018186241 +0.028467651 +0.029101467 +-0.027474195 +-0.0062096836 +0.0032975844 +-0.0037709977 +0.009794078 +0.0026481394 +-0.0046263747 +0.0076970854 +-0.018736131 +0.008442905 +0.00016016004 +0.018255077 +0.011127616 +0.012877964 +-0.007722462 +-0.0048973016 +-0.030009896 +-0.0066903485 +-0.005820369 +0.016706603 +-0.0046029775 +-0.0049086795 +-0.013716878 +-0.014114232 +-0.0042742523 +0.009714815 +0.022596838 +-0.014739544 +0.01972645 +-0.014543204 +0.0114234425 +0.021129612 +-0.008788494 +-0.0028933466 +-0.008956361 +-0.00079373753 +0.0071164216 +0.024815777 +0.014697612 +-0.021624198 +0.018129222 +0.008462048 +-0.0018845305 +-0.02200972 +-0.010215719 +0.010982221 +0.009334722 +-0.0352382 +-0.014465016 +0.013432391 +0.018313447 +0.0041039633 +0.0019091659 +0.007561675 +-0.013213068 +0.00085539685 +-0.02782121 +-0.008399893 +-0.043607794 +-0.021971367 +0.024623 +-0.014509161 +-0.031848833 +-0.0037659588 +0.0120414 +-0.016587786 +-0.003745589 +0.004440916 +-0.038962636 +0.00293885 +0.014111331 +-0.001843572 +-0.0036231042 +-0.016650945 +0.005509568 +-0.0049176044 +-0.0014946086 +-0.020213103 +-0.019331723 +-0.030020494 +-0.005243446 +-0.007059024 +0.00945305 +0.016207332 +-0.011927687 +-0.011125652 +0.014854277 +0.006121418 +-0.008787474 +-0.025716696 +-0.002136597 +0.0051552374 +0.010204828 +-0.0072777006 +-0.016446404 +-0.00037934538 +-0.023834502 +0.0027576496 +-0.0017858847 +-0.0027114942 +0.014437427 +-0.017656593 +-0.015640201 +0.0038713238 +-0.008316765 +-0.012053762 +0.026347209 +-0.017959477 +0.010341051 +0.0052980855 +0.008913563 +0.013990511 +0.009423935 +0.025059322 +-0.014369104 +0.015861908 +0.018766478 +-0.025816217 +-0.01698013 +-0.004131523 +0.0021414037 +-0.0020718046 +0.022330603 +0.019709598 +0.0001647758 +0.012550745 +-0.011863963 +-0.020410085 +0.019592663 +-0.04098833 +-0.016804121 +-0.008709015 +-0.0048839212 +0.002678033 +-0.007506729 +-0.03216147 +-0.015305288 +0.029350627 +0.00059183437 +0.006313576 +-0.009475859 +0.0098973205 +-0.0046632695 +0.02730852 +-0.021600105 +0.010644382 +-0.0045806086 +-0.02111626 +0.012182367 +-0.0024147767 +0.002991275 +-0.0050616777 +-0.0016234828 +-0.03111377 +-0.021714304 +0.0047036093 +-0.0067256596 +-0.035026688 +-0.013355361 +0.0053719324 +0.00902205 +-0.004764869 +-0.017342808 +0.0036973252 +0.007762361 +-0.018568166 +-0.0402573 +-0.010821782 +-0.0020968711 +0.017193642 +0.024065675 +0.003709032 +-0.002847718 +0.004662608 +-0.02502994 +-0.0010372407 +-0.026000218 +-0.021877069 +0.008829401 +-0.009315353 +0.0125812935 +-0.017566973 +-0.0045541357 +0.028567215 +-0.014390331 +-0.021129359 +0.024088882 +-0.027383206 +0.0070253215 +0.01787716 +-0.0022423759 +0.010114037 +-0.015531247 +-0.012022314 +0.01583129 +-0.012671245 +-0.013609365 +-0.0068782032 +-0.010259402 +-0.012350545 +-0.0027922755 +-0.015261734 +0.0022850682 +0.012381201 +-0.0058125453 +0.015861819 +0.023273097 +0.016823176 +0.010465793 +0.018010583 +0.021328293 +0.002638953 +0.03801986 +0.008165143 +0.006518262 +-0.001546776 +-0.009619147 +0.029032849 +-0.014250784 +-0.033571642 +0.0014483383 +-0.003347921 +0.005883299 +-0.014481105 +0.0011103742 +-0.016784381 +-0.028341385 +0.036779877 +-0.011071932 +-0.01736993 +0.016376184 +0.0064304606 +-0.017257284 +0.026278727 +-0.02684753 +-0.0040684906 +-0.031668015 +-0.012961393 +0.01755802 +0.011759803 +0.024364058 +-0.0030537655 +0.022929672 +0.02319388 +-0.0019990383 +0.0054442114 +0.02331771 +-0.0012345206 +-0.005664171 +0.010355736 +-0.010107658 +-0.01948901 +0.0018068956 +-0.016441789 +-0.004574094 +0.0072905896 +0.0026519585 +0.01487804 +-0.012054778 +-0.032829043 +-0.010217257 +0.004769826 +0.004482368 +0.0013717681 +0.012957566 +-0.00078240666 +-0.005221395 +-0.00368951 +0.010730551 +-0.0055960324 +0.010323366 +-0.0020493348 +0.018658906 +0.0029969215 +0.022627674 +-0.0036623487 +-0.008239887 +0.008391653 +-0.02569655 +-0.0004358225 +-0.014720335 +0.0008386875 +-0.005318635 +-0.006214151 +-0.024973227 +0.014146215 +-0.032306496 +0.0059288796 +-0.009148695 +0.0063562267 +-0.004205079 +-0.019935464 +0.008391485 +-0.011435096 +0.014272042 +0.016040977 +-0.009894328 +-0.0098981345 +-0.030353298 +0.001988159 +0.023625322 +-0.013608224 +-0.020571351 +-0.0031659065 +-0.0055369763 +-0.01271811 +0.029216286 +0.00022918433 +-0.0016821995 +-0.025089592 +0.011814615 +-0.018212782 +-0.02426274 +-0.016106537 +-0.01628654 +0.00031461674 +0.04182959 +0.006630506 +-0.0028999008 +-0.014580829 +-0.005130539 +0.009392975 +0.02946794 +0.015675107 +0.0033063092 +-0.005575154 +0.0044391765 +-0.013200746 +-0.02223819 +0.030878307 +-0.02974139 +0.0013629192 +0.0043760645 +-0.00011466052 +-0.011219157 +-0.01296922 +0.01339978 +-0.0050690933 +-0.01886033 +0.0146452235 +-0.010204556 +-0.006535059 +0.002444848 +0.012584033 +-0.010754596 +0.0015036118 +0.003975655 +0.014938152 +-0.018916849 +-0.0015898787 +-0.030378427 +-0.0013250948 +0.0059423964 +0.008207709 +-0.00958651 +0.00093149324 +-0.022400783 +0.016310092 +0.008850489 +0.028510476 +0.0041897474 +-0.005574661 +-0.016167961 +0.025045712 +-0.024582773 +-0.011114661 +0.02846169 +-0.018018145 +0.010915777 +0.012924894 +0.0037859988 +-0.037512973 +0.008435114 +-0.02158516 +-6.153392e-05 +0.010082465 +0.009618374 +0.027169641 +0.020156406 +-0.020682726 +0.020464238 +-0.0061170384 +0.0054298034 +-0.019998912 +0.0013596247 +-0.0045428397 +0.015017788 +0.018023329 +-0.013305684 +0.01923412 +-0.019028764 +-0.010922788 +0.015508323 +0.013375063 +-0.0128841465 +-0.01581016 +-0.037781347 +-0.02036611 +-0.03203497 +-0.0034007146 +-0.012497438 +-0.0077543133 +-0.017207535 +0.0013273495 +0.013615301 +-0.011825678 +-0.054738782 +-0.022089003 +-0.020307401 +0.011030877 +0.006794471 +-0.025778677 +-0.0021998864 +-0.0023892303 +-0.015773425 +-0.008919333 +-0.023439642 +0.030880533 +0.04317531 +-0.011732126 +-0.013224483 +-0.0017249231 +-0.026375446 +0.008792902 +0.014198235 +-0.031093722 +0.00161375 +-0.009403799 +-0.010710393 +0.048618786 +-0.0074011497 +0.008724304 +0.01879687 +0.0005645882 +-0.0031412956 +0.028507711 +-0.007522186 +-0.010510361 +-0.01392453 +-0.0013840526 +-0.005995896 +-0.016788803 +-0.014910743 +-0.010586859 +-0.00980766 +0.005075769 +0.012967167 +-0.001404114 +-0.006552422 +-0.036344714 +0.010702148 +0.013902522 +0.0017258921 +-0.0068618916 +-0.0012773451 +-0.004892976 +0.018046228 +0.0031779206 +-0.0032658207 +-0.033210248 +0.009116827 +0.004914995 +-0.008882199 +-0.01175868 +-0.005115397 +-0.011801155 +-0.020656409 +-0.008219033 +0.017980143 +0.008628758 +0.019521853 +-0.0122113265 +-0.012888344 +0.009827308 +-0.009574939 +0.008033291 +0.018942526 +0.017705325 +0.005572538 +-0.012337703 +0.010558526 +0.011598604 +0.0050215586 +0.0072801686 +-0.01591674 +-0.0010732583 +0.0080875065 +-0.0147334235 +0.02057918 +-0.024434056 +0.006253341 +-0.00021590374 +-0.00031925112 +-0.02341603 +-0.0018619129 +0.0159074 +0.01355359 +0.006000675 +0.00075081835 +-0.011406313 +-0.030991102 +-0.0011342926 +-0.0035734414 +0.023286453 +-0.020236775 +0.0039717928 +-0.0057478803 +-0.018533638 +-0.012588133 +0.0027455466 +0.006675823 +-0.0023164253 +0.011044284 +-0.02090632 +0.0055513526 +-0.01886414 +0.0216398 +-0.0016311923 +-0.00021620511 +0.0034301232 +0.011927098 +-0.0044029653 +0.010799105 +0.040028002 +-0.007067292 +0.014258268 +0.019047294 +0.003868243 +-0.00066832674 +-0.0024458738 +-0.002210206 +-0.0066619734 +0.00055066147 +0.0010783144 +-0.006394797 +-0.013814779 +-0.015136417 +-0.007664537 +0.00452835 +-0.003000131 +0.04058957 +-0.0018282229 +-0.007835402 +-0.01702205 +-0.016584856 +0.018834606 +0.022540255 +0.0117103895 +0.01411649 +0.0034267541 +0.0011021752 +0.008414183 +-0.005887808 +-0.005644359 +-0.004447553 +0.012122602 +0.0021770352 +0.00019244831 +-0.010935159 +-0.0027582713 +-0.00472587 +-0.003226075 +-0.0003513136 +0.012791542 +-0.009590108 +-0.005125767 +-0.0055745905 +0.002941681 +-0.011283137 +0.01967902 +0.012769108 +-0.007919526 +0.025338057 +0.018335061 +-0.013563752 +-0.008697928 +-0.021400668 +0.0048130215 +-0.0015582959 +0.008314239 +-0.016560927 +0.00060882396 +-0.028020151 +-0.010149824 +-0.0092267245 +0.012542731 +0.0112128295 +0.0023286622 +0.019064646 +-0.0020731115 +0.0013221398 +-0.0055365614 +0.0031095147 +-0.011937552 +0.009360638 +0.012855728 +-0.0009999056 +0.011147034 +-0.029001212 +-0.030437972 +0.008957365 +0.004874224 +-0.031981822 +-0.0061359126 +-0.011980461 +-0.03927076 +-0.0027580254 +-0.0004190324 +-0.0032549365 +0.0097712865 +0.019158268 +-0.0019160474 +-0.011287866 +-0.0066607767 +0.0040330067 +0.013860252 +-0.0038962965 +-0.023030967 +-0.019575236 +0.0063167843 +0.004478303 +0.011233213 +0.0050101574 +-0.026020803 +0.01256089 +-0.015799075 +-0.004698636 +0.0116140805 +-0.0038618124 +0.0084265275 +-0.011544305 +-0.0046341615 +0.004188238 +0.00038066373 +-0.015244191 +-0.0040890495 +0.02682394 +0.0038465206 +-0.0030746055 +0.026065966 +0.00010429935 +-0.016146814 +0.016949438 +0.014780077 +-0.0015381194 +0.023833074 +0.0035057233 +0.013806548 +-0.022825545 +-0.011202743 +-0.01167581 +0.044492856 +0.011641064 +0.016461281 +0.0244959 +0.009345887 +-0.00036736953 +-0.0056731263 +0.002585979 +0.01274863 +0.0032145514 +-0.006928442 +-0.014436092 +0.00647186 +0.013506188 +0.023266481 +0.034994215 +0.0006268664 +0.016427215 +0.02028023 +-0.018915748 +-0.03394435 +0.016533898 +-0.015617813 +-0.023349553 +-0.020088753 +-0.013059239 +0.027040878 +0.016224649 +0.00048202308 +-0.014586709 +0.01146359 +0.009479296 +0.010187552 +-0.022341596 +-0.0010708679 +0.001404785 +-0.006262038 +-0.010424526 +-0.016133733 +0.00061868393 +-0.01645268 +-0.0016165245 +0.028998103 +-0.0107919285 +5.4686076e-05 +-0.027230369 +0.0036436247 +-0.038390838 +-0.035140913 +0.04248931 +-0.01505407 +-0.0147618195 +-0.0091127 +0.020597527 +-0.009427562 +-0.030487021 +0.0072243125 +-0.010719308 +0.008067601 +-0.0012672151 +-0.00084721576 +-0.012289916 +0.011081018 +0.00788251 +0.0030728362 +-0.048864644 +-0.027085066 +0.008381551 +0.01335387 +0.002372584 +-0.012778618 +-0.027469723 +0.013103133 +-0.021341376 +0.0055471635 +0.0058420496 +-0.0069080545 +0.0026435917 +-0.0058826855 +-0.018509975 +0.011239078 +0.014995757 +-0.0076100514 +0.011223716 +-0.018929182 +-0.0071785836 +0.0028977678 +-0.0009493445 +0.0052833864 +-0.010477249 +-0.020023258 +-0.012811197 +0.01628991 +-0.0038263835 +-0.0016641871 +0.02531492 +0.0011284943 +-0.0029262921 +0.0062509854 +0.01658312 +0.011677682 +0.01397534 +0.0077498476 +-0.020355359 +-0.006090205 +0.0003183716 +0.028513486 +-0.016914975 +-0.027279327 +0.01058854 +0.018782075 +-0.006517785 +-0.017005263 +-0.0043193786 +-0.013442404 +0.0043435786 +-0.001412016 +-0.0034177334 +0.00087391946 +0.005130167 +0.023083013 +0.008114923 +0.012245662 +-0.014806366 +0.018822793 +-0.013919251 +-0.016779505 +-0.004540722 +0.011744237 +-0.003990993 +-0.00746927 +-0.005600148 +0.008288798 +0.00014257252 +0.02269245 +0.0096514495 +0.004756796 +0.010397211 +-0.0049985177 +-0.014000706 +-0.012694801 +-0.010058865 +0.00036273143 +-0.004023511 +-0.031759605 +0.00971651 +-0.0048353444 +0.023502735 +-0.003956865 +-0.0049186824 +0.004518001 +0.017835991 +-0.012195465 +-4.6102423e-06 +-0.01082991 +0.010626144 +-0.00029843368 +0.014755486 +0.006083244 +-0.0029835084 +0.0044181556 +0.0028224369 +0.0061530424 +0.0032539025 +0.00045537893 +-0.018673941 +-0.0205951 +-0.027456636 +0.00010897429 +0.020405887 +-0.01415882 +0.01566043 +0.022334727 +0.008423403 +-0.0014277858 +-0.00051915523 +-0.0038632643 +0.0056012482 +0.0055671106 +-0.033754177 +0.007837578 +-0.0026877143 +0.002469689 +0.023274168 +0.009827782 +0.00475052 +-0.003300224 +0.033548824 +0.0021327778 +-0.021763446 +0.0139233135 +-0.005012243 +-0.016024599 +-0.003087595 +0.0110586705 +-0.0016338995 +-0.002760957 +-0.018920159 +0.0016006106 +0.01521277 +0.011175535 +0.04149381 +0.025325814 +-0.010300505 +-0.013318975 +-0.010366069 +-0.010454977 +-0.011485191 +0.018992677 +-0.011503412 +0.005684796 +0.0048825447 +-0.0004989725 +0.007680367 +0.015647404 +0.026884006 +0.011025207 +0.001913954 +-0.035133477 +0.010137472 +0.0035374735 +-0.004556127 +-0.017781965 +-0.021669954 +0.027500074 +0.007137113 +-0.013674734 +0.025275968 +-0.026895562 +0.019220343 +-0.0031064553 +0.0068916623 +-0.02257293 +-0.036389336 +0.0011914101 +-0.022481512 +-0.012866087 +-0.010518208 +0.00074849505 +-0.00594386 +-0.023466041 +-0.014337255 +0.011267523 +0.013709507 +-0.0026972943 +0.010863644 +0.0005661771 +-0.0031690632 +-0.021042628 +0.007923253 +-0.0021743209 +-0.03522174 +0.010724946 +0.011841808 +-0.033364713 +0.003189578 +0.0070739104 +-0.031531535 +-0.01828842 +0.019857401 +0.0011799193 +-0.015779337 +0.0032859233 +0.02741038 +0.006926911 +0.0048772083 +-0.030997908 +-0.00989138 +-0.0025862546 +-0.0050158272 +-0.027598284 +-0.04769765 +-0.00041783223 +0.0145225385 +-0.0024070092 +0.019172318 +0.0071579255 +-0.0046804217 +-0.034670025 +0.007493787 +0.023526346 +0.035388034 +-0.018932695 +-0.0026526826 +0.0060654082 +0.02802406 +0.0009016142 +0.005391495 +-0.008290128 +-0.0077463016 +0.005790129 +-0.0045334552 +0.0005711692 +0.0023639635 +-0.004044604 +0.03906491 +0.008047057 +-0.008417158 +0.00049576344 +-0.000850288 +-0.012083064 +-0.0056342827 +0.023732705 +-0.006459021 +0.021630604 +-0.002245368 +-0.031598598 +-0.016674435 +-0.0071117342 +-0.014730356 +-0.001916692 +0.004137022 +-0.0050326567 +0.019267205 +-0.011458533 +0.008572961 +0.0023856608 +0.0052461093 +-0.012875726 +-0.0062184315 +-0.012708756 +0.0036045176 +0.0052465624 +-0.0006571622 +-0.035397172 +-0.019284485 +0.014019397 +0.014904704 +-0.037998006 +-0.0019443713 +0.009533255 +0.0014743134 +0.028104192 +-0.023804272 +0.0004180167 +0.027272739 +-0.0153798135 +-0.0021627203 +-0.014612193 +0.022462005 +-0.01789007 +-0.0055528274 +-0.019828549 +0.010703052 +-0.00377152 +-0.045854796 +-0.010446241 +-0.064027704 +-0.022637775 +0.020967005 +-0.006855134 +-0.008928541 +0.0037481762 +0.03191765 +-0.043608125 +-0.027519858 +-0.0024203071 +-0.022495456 +0.013207587 +-0.0004340896 +-0.030194089 +0.00051315874 +-0.0063837348 +-0.0041798702 +-0.027943151 +-0.0021131115 +0.01094062 +0.028934738 +0.007878785 +0.02192426 +-0.033577893 +-0.020565119 +0.023931144 +0.007107486 +-0.00087259425 +0.024897236 +-0.0417053 +-0.026106728 +0.027780263 +-0.02489904 +0.015215223 +-0.028395727 +0.019333007 +0.008829678 +-0.014033729 +-0.020768326 +-0.013763906 +0.001098918 +-0.0050677517 +0.022811165 +-0.013463569 +-0.010568243 +0.009279807 +-0.013785394 +0.0030217858 +0.011794913 +0.014342512 +0.010272638 +0.018054686 +0.042608477 +0.0073599108 +0.014740776 +-0.010119509 +0.015858116 +-0.0018797093 +0.022558998 +0.02670544 +0.018626776 +-0.043052558 +-0.013976085 +0.016902676 +-0.009283174 +-0.029114766 +0.0019803548 +-0.016958544 +-0.02464341 +0.02482823 +0.0058491887 +-0.009715115 +-0.023588303 +-0.01163515 +0.003458244 +-0.00983833 +-0.003394664 +-0.012820243 +-0.006944032 +0.0052898764 +0.025724493 +0.009573475 +0.015937407 +0.0018352307 +0.0176233 +-0.02985992 +0.011775853 +-0.0013071768 +0.027808398 +-0.024377484 +-0.0184859 +0.0053190207 +-0.02178053 +-0.023106115 +0.009039655 +0.011502622 +-0.0054814992 +0.012731705 +0.0071775555 +-0.0020546524 +0.00012778812 +-0.01256923 +-0.004441597 +0.0047920397 +-0.033220068 +-0.016680934 +0.0022172562 +-0.011251213 +-0.0026890917 +-0.0032767556 +0.014534941 +-0.032391727 +0.006649923 +0.0010371524 +-0.002090371 +0.008460142 +0.018411877 +-0.008025281 +-0.010880845 +-0.004572551 +-0.00079639856 +-0.026449861 +-0.015338048 +0.0061252555 +-0.010947883 +-0.023054013 +-0.0012271866 +-0.0028033075 +-0.032973688 +0.020108836 +-0.0077214837 +0.006201081 +-0.004065392 +0.011895424 +0.02140564 +0.009351531 +0.0008864942 +0.0377647 +-0.041509204 +-0.0053704316 +-0.02114292 +-0.006307854 +0.014951624 +-0.01722404 +-0.03139301 +-0.0068764347 +-0.014093813 +0.019538991 +0.022363177 +-0.0007035802 +0.01325358 +-0.0051752967 +0.0036284167 +-0.046126015 +-0.016686477 +-0.030176526 +-0.01202872 +0.015782 +0.02344104 +-0.0051836027 +0.008012049 +-0.013008392 +-0.005566687 +0.00593142 +-0.012235767 +-0.013371199 +0.024796596 +-0.013084677 +-0.0017401394 +0.0021149106 +-0.0062709753 +0.04205787 +-0.022938026 +0.0034807741 +0.007567833 +0.016790424 +0.008490455 +-0.017429382 +-0.0044202995 +-0.023275085 +-0.030803995 +0.011354056 +-0.008069886 +-0.020592012 +0.005626966 +0.029237514 +0.003792186 +0.027931666 +-0.00030459277 +0.015945878 +-0.020457808 +0.009288705 +-0.03375212 +0.008985146 +0.020125978 +-0.0063607832 +-0.02969675 +0.012479282 +-0.020298991 +0.029205857 +0.016175779 +0.017609369 +0.008493601 +-0.013136709 +-0.020873113 +0.0053185765 +-0.00088147953 +-0.0009347992 +0.045994326 +0.005391855 +-0.018020956 +0.012653376 +-0.00511262 +-0.03391529 +-0.010959189 +-0.0061866823 +-0.024390241 +0.015630014 +0.0064628166 +0.015559588 +0.010764162 +-0.030850666 +0.0054664565 +0.013215128 +0.00813215 +-0.018708803 +0.012541232 +-0.00010124212 +0.004835834 +0.0018993338 +-0.0024456875 +-0.003328921 +-0.03428291 +0.0057534846 +0.0030331903 +0.013923062 +0.0094408 +-0.0057481183 +-0.041874655 +-0.013208259 +-0.0037012591 +-0.009757479 +-0.014828076 +0.0023311463 +-0.014731495 +-0.0034449014 +-0.018815253 +-0.009293482 +-0.033543143 +0.0011435475 +-0.0038385263 +-0.0062944586 +-0.061129265 +-0.018937415 +-0.001140512 +-0.00031595977 +-0.0026919718 +0.013910055 +0.0130400695 +0.037910696 +0.034702066 +0.008175416 +-0.0045637274 +0.003143807 +-0.0024810554 +-0.031263158 +0.00740724 +-0.00497992 +0.0003090601 +-0.049641933 +-0.021401227 +-0.0009034494 +-0.014080675 +0.016673997 +0.013560225 +-0.010996604 +0.0065923706 +0.03874161 +-0.009725186 +-0.019179165 +0.0004193454 +0.006359312 +-0.02756282 +-0.017268974 +-4.7959955e-05 +0.0013451086 +0.00085562066 +0.004262525 +0.012915688 +-0.013095441 +0.0012596011 +-0.039169602 +0.011208393 +0.00580806 +0.01695332 +-0.0074447594 +-0.0181153 +-0.0037135326 +0.00815012 +-0.024240084 +0.010626262 +0.00703848 +0.0068060914 +0.00083591626 +0.010868608 +0.0066128583 +-0.014955265 +-0.016351616 +-0.014343791 +0.0022218365 +-0.0041806614 +0.015360931 +-0.005823175 +-0.003405516 +0.0026588447 +0.017786806 +0.0008135679 +-0.00094334595 +-0.010595884 +-0.034190223 +-0.025642462 +-0.0046488 +0.0006689448 +-0.013240357 +0.009547187 +-0.026548475 +-0.0071498384 +0.018225497 +-0.0055302335 +-0.018937208 +0.0029821142 +-0.018359901 +-0.0055716718 +0.009071606 +-0.00789311 +0.0072257803 +0.00596215 +-0.01164971 +-0.003434675 +-0.004090919 +-0.0025316984 +-0.010362511 +0.0012337576 +0.0058421935 +-0.007980679 +0.030139953 +-0.007007722 +-0.008841753 +-0.007796428 +-0.008844257 +-0.0021750813 +0.0027875272 +0.009842689 +-0.0053148447 +-0.002769189 +-0.03574569 +-0.025731158 +-0.007039687 +-0.001389216 +-0.02823707 +-0.014664137 +0.02420648 +0.028012995 +-0.009263103 +-0.0011141934 +0.03169082 +0.018449364 +0.007127869 +-0.012733635 +0.00091875246 +0.008066341 +-0.006987442 +0.0018038027 +0.009628191 +-1.0431322e-05 +-0.0011941042 +-0.005959298 +-0.002726158 +-0.010836543 +-0.019676752 +-0.025688136 +-0.01121773 +0.038757596 +-0.0002489039 +-0.023154235 +-0.0016976153 +-0.003242814 +0.02451802 +0.044498447 +-0.010229028 +0.0017585262 +0.0015292007 +-0.0029112867 +-0.0047382065 +0.009934102 +-0.02108562 +-0.013662461 +0.024501478 +0.009397852 +0.0046626832 +0.014592891 +-0.019340312 +-0.012647032 +-0.003514289 +0.003531786 +-0.001516016 +-0.0108195245 +-0.0039543496 +-0.0038041584 +-0.006850014 +0.016156888 +0.009715286 +0.025541663 +-0.0082296515 +0.03424782 +-0.0030998457 +-0.005037727 +-0.010987727 +-0.018445106 +-0.0012490454 +-0.03083844 +-0.005161753 +0.0043977844 +-0.0012961259 +-0.041191604 +-0.00802789 +-0.011640554 +-0.012753449 +-0.04796831 +0.005893536 +0.014457232 +-0.0025821074 +0.026075086 +-0.0094914725 +0.0026159603 +0.014633541 +0.025975868 +0.009308607 +-0.05614728 +-0.0071898703 +-0.03895422 +-0.0013592155 +0.016028045 +-0.015345539 +-0.007593209 +-0.01995451 +0.0070715016 +-0.039469045 +-0.002359869 +0.015579584 +-0.016373103 +0.0047386154 +0.011700316 +0.001698285 +-0.020540874 +0.0024456605 +0.013270573 +0.008603342 +0.018885717 +-0.021027857 +-0.029147647 +0.010476828 +-0.008541073 +-0.0034556035 +0.008715465 +-0.032070935 +0.009071464 +0.0062496215 +-0.0029399113 +-0.009692405 +0.0012024731 +0.011994918 +0.001202703 +0.006349899 +0.02976916 +-0.009836956 +-0.007197243 +0.0058681997 +-0.0026531287 +0.01798446 +-0.0070379926 +0.037748422 +0.0018533926 +0.0050366735 +0.007825665 +0.017834095 +0.01751574 +-0.02529101 +-0.04798171 +1.7146776e-05 +-0.007068189 +-0.010211141 +-0.009941577 +0.03655176 +-0.0015962917 +-0.023619525 +-0.020236336 +0.022232806 +-0.049563896 +-0.03007581 +0.019539889 +0.030644914 +0.017244248 +-0.021307383 +-0.00068164844 +0.03127194 +-0.027601244 +0.0060065216 +-0.016349336 +-0.017872209 +0.0049607223 +0.06186743 +-0.011661246 +-0.024640653 +-0.00944686 +-0.013739481 +-0.0032881675 +-0.021468682 +-0.02005512 +0.008115032 +0.0065549086 +0.027269332 +0.012916173 +-0.01588813 +-0.019603536 +-0.028839413 +0.003172243 +0.00033095956 +0.0055315257 +-0.0007146952 +-0.0025637168 +0.013691867 +-0.0017654249 +-0.0080406135 +0.010079133 +0.040327944 +0.05107064 +0.011609999 +-0.022681734 +-0.0009974812 +-0.02226697 +-0.02638084 +-0.021794619 +0.0246629 +-0.0044999337 +0.009084157 +0.0138234375 +-0.03960946 +-0.030671133 +0.0041240044 +-0.00049629185 +-0.0062697846 +-0.0448168 +-0.019945376 +-0.0044284803 +0.011127914 +-0.0030098697 +-0.01500162 +0.00755673 +-0.025989354 +0.04073073 +0.0088487165 +0.00620354 +-0.014772213 +-0.010377595 +0.0024206918 +-0.008583917 +0.021346783 +-0.007429391 +-0.0017223385 +0.0017022962 +-0.007145374 +-0.02650213 +0.009157051 +0.02817665 +0.012746121 +0.014638971 +-0.031765223 +-0.006313745 +-0.0024546012 +0.019624861 +0.022463756 +0.004145256 +-0.029920487 +0.007933022 +0.004397643 +-0.0018831518 +0.001649119 +0.020119037 +-0.001098164 +0.00038501064 +-0.0066995136 +0.02432957 +0.0077867494 +0.018641021 +-0.03391877 +-0.017692003 +-0.0012085374 +0.027401593 +-0.011834167 +0.00058750104 +0.005611094 +-0.012630597 +0.012862389 +0.008784768 +-0.008068691 +-0.023078417 +-9.360656e-05 +0.009200531 +0.028102597 +0.0011324612 +0.015381302 +0.013495706 +-0.0019181576 +0.0018885597 +0.0027956578 +-0.026682269 +0.020871356 +-0.054235443 +0.015236597 +0.006145034 +0.011319479 +-0.013541581 +-0.01413244 +0.009010894 +0.0011421622 +0.008446358 +0.006641208 +0.011268943 +0.008095275 +0.0046745786 +0.003939975 +-0.015346366 +-0.0066635287 +-0.026770413 +0.023460984 +-0.006462712 +-0.005078661 +0.0031896944 +-0.016637335 +-0.0068407753 +-0.00024183179 +-0.00019240133 +0.011537285 +0.009907773 +-0.026220286 +0.006216571 +-0.01074755 +-0.020709816 +0.010944147 +-0.011728872 +-0.004868409 +0.006976998 +0.0109309135 +-0.017766038 +0.0021048074 +0.02248692 +-0.020850666 +0.019619526 +-0.0024455143 +-0.011009537 +-0.021512276 +-0.028309433 +0.001227397 +0.0026910354 +0.0110976985 +0.016168542 +0.024708143 +0.0063450155 +-0.005572743 +-0.005713532 +-0.012741922 +-0.01503591 +0.020637035 +-0.0041401293 +-0.005539405 +0.02229962 +0.008406527 +-0.011369511 +-0.0088880425 +-0.0031062465 +-1.4386438e-05 +-0.021288373 +0.011119714 +-0.013968524 +-0.01982284 +0.0032040896 +0.013566908 +-0.004142456 +-0.0007137799 +-0.011264807 +0.0050397585 +0.008225645 +-0.016828941 +0.026416814 +-0.007948504 +0.0059761973 +0.0010039213 +0.0003707372 +-0.01474529 +-0.0061899796 +-0.005843916 +-0.0029083844 +0.008285704 +0.018195888 +-0.004297891 +-0.008667674 +-0.004606753 +0.040264323 +0.017424928 +-0.0051850504 +-0.012727289 +0.018464701 +-0.012909879 +0.002195474 +0.018332737 +-0.022490533 +0.013186527 +-0.010775908 +-0.014422885 +0.011307159 +-0.017913166 +0.018483633 +-0.01706013 +0.003764592 +-0.030898701 +-0.0035991084 +-0.02354426 +-0.0392596 +-0.020803422 +-0.014986057 +-0.001778925 +-0.023223689 +-0.046621248 +-0.0058859005 +0.017813224 +0.015907131 +0.003855328 +0.034833856 +-0.0033850858 +-0.0109845875 +-0.023825524 +0.020184366 +-0.0015239797 +-0.0185192 +-0.013153254 +-0.0012863576 +-0.015745636 +-0.003713657 +-0.01630234 +-0.019641792 +-0.012931631 +0.008755208 +0.011312256 +0.010648293 +0.02833051 +0.020936484 +0.01341189 +0.0027998434 +-0.03392461 +-0.00497324 +0.004676061 +0.012617866 +-0.011585991 +-0.0071335398 +-0.0037484735 +0.016667038 +0.002777094 +0.017522607 +0.022039006 +-0.01624579 +-0.030336002 +0.015035333 +0.028102415 +0.013524015 +0.009200926 +-0.0035606758 +-0.0025947317 +0.016152153 +0.009738978 +-0.0003210536 +0.00029619396 +0.013557486 +-0.011507574 +0.0038549798 +0.004306253 +-0.008291217 +-0.004476948 +0.014046937 +0.015444347 +0.008466617 +-0.0215344 +0.0026876116 +0.0026050017 +0.009079474 +-0.0010651159 +-0.0052771317 +0.017961154 +-0.042412065 +-0.012502889 +0.0068760095 +0.007527649 +-0.018021151 +-0.015152164 +-0.010986701 +0.0009817485 +0.008837058 +-0.0006655705 +-0.018013742 +0.001987379 +-0.003256103 +0.0034679896 +0.007879303 +-0.013312473 +-0.00075908314 +-0.03976516 +-0.0026198952 +-0.02048685 +-0.035262275 +0.009989637 +-0.00029274359 +-0.0035300353 +0.006168811 +0.0055950065 +0.014800478 +-0.008672948 +-0.021337284 +0.008501499 +-0.016719062 +-0.011906674 +-0.0070386287 +-0.021593371 +0.0340673 +-0.009037562 +-0.0021803398 +-0.00036928713 +0.016526146 +-0.016063701 +-0.023256138 +0.030779788 +-0.03325496 +-0.04175362 +-0.00091128395 +0.023511475 +0.018117372 +-0.019323887 +0.02818662 +-0.00030925352 +-0.0342069 +-0.013089577 +-0.016250229 +-0.00055734883 +-0.017994711 +-0.034980185 +0.009830921 +-0.0064351372 +-0.0025356526 +-0.022084724 +0.017406452 +0.019557426 +0.006802592 +0.01819716 +0.014384667 +-0.0066444706 +-0.016063634 +0.0056272666 +-0.007979733 +0.019994205 +-0.00067743094 +-0.03946672 +-0.017643386 +0.007883656 +-0.028440421 +0.016524011 +0.02736855 +0.026950974 +-0.014155778 +0.012805006 +0.0017197425 +-0.016185643 +0.013405617 +0.007935652 +-0.012028904 +-0.03158343 +0.019492337 +0.008412854 +-0.008419495 +0.0040363353 +0.019005513 +0.007122967 +0.019573668 +0.024621964 +0.03066761 +0.008757419 +0.0001740666 +-0.021311332 +-0.0043523456 +-0.0045204 +0.028937373 +0.008224717 +0.024000874 +-0.018244784 +-0.005466762 +-0.015360624 +0.003619613 +-0.0020480792 +-0.017697241 +0.0014178058 +0.005402914 +0.014380464 +0.0070991274 +-0.019780768 +-0.045462623 +0.0024455162 +-0.009345603 +-0.0079430435 +0.00244355 +0.00876806 +0.015751902 +0.031744562 +0.00884081 +0.005663136 +0.015321734 +-0.0009316625 +-0.004809252 +-0.044576645 +-0.0028731013 +0.0062936028 +0.006951437 +-0.01151573 +0.0010071078 +-0.010163846 +-0.016138092 +-0.015320629 +0.011583383 +-0.010705687 +-0.011313081 +0.025878502 +-0.0094028525 +-0.0051506646 +0.022039538 +-0.0120200375 +-0.005924943 +0.0017780366 +0.0003552956 +-0.0012537348 +0.0044875904 +-0.021359101 +0.006700981 +-0.0064632576 +0.014549194 +-0.019878455 +0.0015507796 +-0.011578939 +-0.00016760128 +-0.017459573 +-0.015322924 +-0.007639891 +0.0111250365 +-0.021141235 +0.037470702 +-0.019376654 +-0.0042052446 +-0.008830234 +0.0054863375 +-0.026750466 +-0.01613247 +-0.022682466 +-0.028433606 +0.00016165238 +-0.01337952 +0.011243809 +0.014026759 +0.021037437 +0.018909495 +0.0066557913 +-0.028802902 +0.031805594 +-0.024684029 +-0.0015335409 +-0.009560326 +0.008460222 +0.018436547 +-0.019659325 +0.0023851905 +0.020652402 +-0.002482085 +-0.0068593137 +0.000891149 +0.0022575732 +-0.031441525 +0.017347168 +0.0069918684 +-0.007856389 +-0.016490825 +0.0030768816 +-0.025242353 +0.0046803746 +0.01018696 +0.0038750824 +0.010568613 +-0.0013210273 +-0.008647778 +0.006336125 +-0.0090732975 +-0.0124595435 +-0.0007358894 +-0.0025213058 +0.007758532 +0.0011013121 +-0.009441736 +0.037060127 +-0.017661974 +-0.0044065095 +-0.0145137105 +0.021952283 +0.012711873 +-0.0014322265 +-0.015747013 +-0.01672495 +-0.03011625 +0.0027429415 +-0.019134467 +-0.024075964 +0.008937319 +0.028483147 +0.0048769717 +0.02135689 +0.01514361 +-0.009065018 +0.00043600958 +0.006822361 +-0.020730976 +0.011356755 +0.018118026 +-0.016811956 +-0.0075696367 +-0.017091084 +0.014020358 +0.028992664 +0.008349606 +-0.004929998 +0.016986778 +0.016140427 +-0.013603608 +-0.012408288 +-0.022361709 +-0.014141117 +0.024307836 +0.0017538313 +-0.015137058 +0.005425164 +0.0005770802 +-0.018837396 +-0.015230048 +-0.019893883 +0.004298629 +0.03175331 +-0.01361751 +-0.0152643435 +-0.007876263 +0.0137264365 +0.006329358 +0.0049741045 +0.014718243 +-0.042736165 +-0.0025881785 +0.0028518059 +0.0058486457 +0.0072733345 +0.0063480265 +0.0072994633 +-0.032967243 +-0.009086163 +-0.010403123 +-0.008849969 +0.0092684785 +-0.009654571 +-0.0450017 +0.023921236 +0.003994092 +-0.01035475 +0.00074460456 +-0.002762825 +-0.009967768 +-0.033257492 +-0.014153252 +0.02183245 +0.013997941 +-0.005905001 +-0.0060826982 +-0.021029923 +0.029841503 +-0.007970563 +-0.002239217 +0.008222283 +0.009381619 +0.020732822 +0.025894163 +0.03151203 +-0.03652168 +0.008318936 +-0.0059874444 +0.0038736477 +0.024658386 +-0.0115241315 +-0.003546956 +-0.019900266 +-0.0145916175 +-0.006347281 +-0.0067845723 +-0.012397601 +-0.007517483 +0.013275627 +0.015383247 +-0.033467352 +0.009151041 +-0.0029872912 +-0.02292645 +-0.0037564235 +-0.02614119 +0.0042707357 +-0.00988003 +-0.004513956 +0.023475477 +0.011383379 +-0.0050424393 +-0.0133604435 +0.010542989 +0.0015320904 +-0.0014690022 +-0.055229317 +-0.009280933 +-0.00658059 +0.0035559766 +-0.0015181387 +-0.040990815 +0.009209426 +0.007573415 +0.017455136 +-0.0037746453 +0.03539469 +0.017229693 +-0.0028546592 +0.013788984 +0.0017590582 +0.010498735 +-0.0065129013 +0.034501646 +0.0020510664 +-0.03132906 +0.011747787 +-0.010461355 +0.015115405 +0.006602563 +0.010877888 +-0.026145736 +0.016953534 +-0.01120769 +-0.02693667 +-0.013262813 +0.019978743 +-0.011246823 +-0.013488892 +0.026363863 +0.0041831452 +0.013697159 +0.0033576442 +-0.0072672023 +-0.006628565 +0.014790456 +-0.0026447554 +-0.020516006 +-0.010479186 +-0.012434848 +0.025245275 +-0.013914832 +-0.040662114 +0.0060973684 +0.019177519 +0.0057843365 +-0.038663086 +0.0025334796 +0.011218083 +0.006491769 +0.008627126 +0.0013693775 +-0.013844388 +0.004775731 +-0.0060642203 +-0.001451766 +-0.004465822 +0.004802918 +-0.017873567 +0.009466129 +-0.00199523 +0.00037534858 +-0.0011775533 +-0.01243875 +-0.047784716 +-0.026522506 +0.008539015 +-0.0012652498 +-0.017884446 +0.012246999 +0.030514162 +-0.0064189807 +0.0035211183 +-0.034936875 +0.018694231 +-0.023488276 +-0.0089383 +0.0063989367 +0.0063955146 +6.0514954e-05 +0.010660041 +0.01089812 +0.006330276 +-0.015165548 +0.00047570182 +-0.034229863 +-0.0030620238 +0.019982403 +-0.018655486 +-0.031195665 +0.02840336 +-0.016462527 +0.0040456248 +0.0042550317 +-0.02970914 +0.005450939 +0.019578815 +0.016910756 +-0.024871768 +0.011559896 +-0.012326404 +0.0011858541 +0.009869961 +0.008979476 +-0.009486147 +0.016871074 +-0.025266286 +0.008271147 +-0.008482622 +-0.013167952 +-0.005445998 +-0.0012606182 +-0.0038676083 +0.020729665 +0.007367344 +0.0019927702 +0.0043845987 +0.017209567 +0.005780855 +0.01104402 +-0.0059238784 +0.011940443 +-0.011730198 +-0.017465575 +0.01151631 +-0.034729194 +-0.010329161 +0.007284633 +-0.014668478 +-0.031989392 +0.0004968721 +0.0062037907 +-0.011484849 +0.008780856 +-0.016691798 +-0.03132265 +0.013008703 +-0.03790717 +0.0018570116 +0.009017192 +0.029463392 +-0.004768521 +0.016337564 +0.004328648 +-0.04897834 +0.013981649 +-0.026282359 +0.031479355 +-0.022793718 +0.0076280264 +-0.0064709396 +-0.012982081 +-0.009375976 +-0.010556882 +-0.009512323 +-0.04505 +0.012701261 +-0.0024374323 +0.018582039 +-0.008345953 +0.05154354 +0.012508755 +-0.03721649 +0.031869568 +-0.020428706 +0.015262719 +-0.019024886 +0.03089735 +0.007312869 +-0.022639902 +0.005909004 +0.002500204 +0.005679051 +0.013504421 +0.0045581805 +0.00045191057 +0.013647227 +-0.0028544841 +0.009692217 +0.015166595 +-0.020635422 +0.008243426 +-0.007933105 +-0.027856806 +-0.038620777 +0.0025049902 +0.016116653 +-0.008101784 +-0.0041195266 +-0.0143401865 +0.03359178 +-0.024409259 +-0.06910242 +-0.050612196 +0.0068955575 +0.009177366 +0.016207876 +0.011418743 +-0.00029753312 +-0.007813171 +-0.0200701 +-0.024467917 +-0.019566191 +-0.011335704 +-0.01732133 +0.05462921 +0.0053400886 +-0.010139585 +-0.011887296 +0.02759824 +0.0137119405 +-0.03871967 +-0.008029669 +0.013067037 +-0.032355897 +0.010808412 +0.016668286 +0.004140977 +-0.004283538 +-0.003667133 +-0.030865103 +-0.022712642 +0.0031177301 +-0.008259409 +-0.0041108765 +-0.00020375862 +0.006196161 +6.0376184e-05 +-0.013837122 +-0.01494355 +0.015183581 +-0.0011066148 +0.022417495 +-0.0026440285 +0.0009587079 +-0.0024667643 +0.022493867 +-8.762901e-05 +-0.0009674476 +0.009900259 +-0.016554307 +0.008928813 +0.003422628 +-0.02974034 +0.0021265056 +0.017783986 +-0.045693357 +-0.008962044 +0.016948944 +0.0067832796 +-0.0043126773 +-0.0002826687 +-0.029135287 +0.03190948 +-0.016399948 +-0.0012659144 +0.023916934 +0.024027871 +-0.044590373 +0.011438403 +-0.005857717 +-0.03593969 +0.007940243 +0.04249366 +0.010886236 +-0.0084404 +-0.012841813 +0.015726672 +-0.0034242445 +0.008708402 +-0.032980073 +0.021172054 +0.022323392 +0.00027215458 +-0.015486524 +-0.010272127 +-0.047546953 +-0.020916402 +-0.0036890751 +0.026396288 +-0.042310968 +0.0054715252 +0.010850746 +-0.013818386 +0.0037968382 +-0.010488936 +0.008625888 +0.0028849777 +-0.01949849 +-0.009251354 +0.018863985 +0.0070920615 +-0.0018597703 +0.02390602 +-0.00060360564 +0.032417372 +-0.0067385617 +0.0037215315 +0.01870602 +0.01679993 +-0.031484604 +-0.021245372 +-0.0011198326 +0.0148496125 +-0.009784831 +-0.009461549 +0.015451927 +0.001415083 +-0.018845536 +-0.00027233412 +0.011585491 +-0.0016089916 +-0.022532422 +-0.04986714 +0.011289008 +0.009350488 +-0.0028297855 +0.0018023816 +0.009426875 +-0.005213769 +-0.012694591 +-0.003411809 +-0.0018811072 +0.010247238 +0.027628502 +0.018672243 +-0.00021590598 +0.006261728 +-0.020457376 +0.01212198 +-0.0070337597 +-0.00023730248 +-0.004977457 +0.020000398 +-0.007837977 +-0.004399372 +-0.0076382062 +-0.0039165937 +0.0041559427 +-0.017854534 +0.030203616 +-0.0037519303 +0.03685067 +-0.0076319883 +0.00020309564 +0.006527495 +-0.0024707802 +-0.00017374152 +0.0072759734 +-0.0048465193 +-0.014154482 +-0.007910209 +0.00988303 +-0.02421208 +-0.0065481006 +-0.0075860405 +0.009673567 +0.010799936 +0.011636573 +-0.019030722 +-0.011479125 +0.008474757 +-0.02610836 +-0.019834511 +-0.021923477 +0.019447217 +-0.022369413 +-0.018484963 +0.0018212332 +0.02639257 +0.022639262 +0.022074109 +0.0054869964 +-0.019437565 +0.004079249 +-0.0127485385 +-0.003229548 +0.0071462924 +0.03604877 +-0.008770062 +-0.015197868 +0.020477198 +0.017137734 +-0.01630355 +-0.022328146 +0.0039892695 +-0.009056689 +0.0047782613 +-0.0013483831 +-0.0085399095 +0.015349215 +-0.014231862 +-0.0030558428 +-0.0011499209 +0.013202762 +0.009497044 +0.0048279064 +-0.00026972152 +-0.018915756 +0.0085194465 +-0.0034844119 +0.0087526 +-0.016373698 +-0.008294733 +-0.016690608 +-0.00020786372 +0.016082123 +0.034785844 +0.0065518315 +-0.011747382 +-0.012662882 +-0.0035724507 +-0.017086407 +0.005566145 +-0.0069618565 +-0.008453458 +-0.0076617184 +-0.0007478198 +0.0024205165 +0.010723183 +0.02272455 +0.018761363 +-0.0015560198 +-0.012150779 +0.017585343 +-0.019608153 +-0.015311823 +-0.011561029 +0.0045005637 +0.0086811455 +0.00083571265 +-0.00062992563 +-0.01926992 +-0.01799613 +-0.008468162 +-0.03262752 +-0.0017189083 +0.0073071644 +-0.023775749 +0.013098994 +-0.0048135156 +0.0027225926 +0.014500603 +-0.010481328 +0.015026088 +-0.02850905 +-0.0137962485 +0.031768072 +0.0063907504 +0.00059396547 +-0.011505968 +0.02393852 +0.003081071 +-0.017447978 +-0.007791141 +-0.011032595 +-0.007061016 +-0.010026222 +-0.010445064 +-0.007942586 +-0.001558254 +0.010336212 +0.013496851 +0.03306616 +0.0015419322 +-0.028474148 +-0.030118534 +-0.015217587 +-0.022534814 +0.013690262 +-0.014032071 +0.0052490565 +-0.018086014 +0.015275186 +0.005078229 +-0.0014562432 +-0.027230332 +0.002324146 +0.015401024 +0.012363597 +0.00874874 +0.0037104113 +-0.0167734 +0.015518856 +-0.008902579 +-0.010334144 +0.015516415 +0.0048307376 +-0.014998585 +0.006724064 +0.013728319 +0.005006451 +-0.019447803 +-0.071148075 +-0.0028200513 +-0.014140181 +-0.011711657 +-0.006894285 +-0.0042669023 +0.00023449157 +-0.0018675744 +-0.0060728304 +-0.00656951 +-0.0025077683 +-0.00989315 +0.02924148 +0.00022300989 +-0.0060868138 +-0.021212267 +0.014061348 +0.011337475 +-0.025547756 +-0.014968722 +-0.006184393 +-0.015112115 +0.010601748 +0.016651168 +-0.0061398265 +0.011228464 +0.009937011 +0.01396577 +-0.0047968165 +-0.008749957 +-0.00088644936 +0.006348859 +0.0020210263 +0.008787894 +-0.0036124648 +-0.0009321691 +-0.013061196 +-0.0030063672 +-0.017605867 +0.008238965 +-0.014475821 +-0.012050498 +0.002041199 +-0.018085223 +0.015489089 +0.004545992 +0.009850689 +0.013409474 +0.012129208 +-0.02710063 +-0.0076724826 +0.0091209775 +0.016915495 +-0.034917705 +-0.011024709 +0.0026572985 +0.007212617 +-0.008040003 +0.014538866 +0.040787965 +0.018931227 +-0.0058987495 +0.005607127 +-0.002940758 +-0.037577994 +-0.009248634 +-0.0030737466 +-0.016422292 +-0.0085508255 +-0.015712492 +0.015026433 +0.0008945977 +0.006272128 +-0.0048379786 +0.006713291 +0.0047802217 +-0.009255305 +0.006414187 +0.0035027887 +0.022641242 +0.0019040955 +-0.008835749 +-0.02216229 +-0.014273501 +-0.005981508 +-0.018831503 +0.039644785 +-0.037933495 +-0.009011011 +0.030521844 +0.005016261 +-0.019330507 +0.0053269947 +0.0017720626 +-0.027016964 +-0.00060290814 +0.0024788268 +0.017707745 +-0.006789677 +-0.0038606625 +0.031921662 +0.012644858 +-0.013480891 +0.0152497785 +0.008403117 +-0.007967025 +-0.0014937504 +0.006989008 +-0.021253552 +0.018339805 +0.034990948 +-0.023609938 +-0.0022475927 +-0.00905845 +0.028030135 +-0.014097526 +0.021088863 +-0.0074315723 +-0.009408217 +0.003303066 +0.01865347 +0.020261277 +-0.004582371 +-0.027083205 +-0.0033034966 +0.019860538 +-0.012967455 +0.025150642 +0.032997295 +-0.0368044 +0.014212759 +0.013752535 +-0.008976099 +0.009459708 +-0.0064651277 +0.020530816 +0.0011027792 +-0.021160256 +0.008786856 +0.012435187 +-0.029602025 +0.032672565 +0.0054452564 +-0.011540233 +0.008290137 +-0.002383099 +0.01337196 +-0.012927965 +-0.0025417854 +0.01784906 +0.0116649745 +0.006341309 +0.0012721723 +0.022411522 +0.005689297 +0.018323274 +0.013714931 +6.266523e-05 +-0.0016551414 +0.009210124 +0.0033565895 +-0.0041516554 +-0.013244905 +-0.029548658 +-0.0067372555 +-0.0061493246 +0.011755797 +0.0067653847 +0.0055893557 +-0.00049865514 +-0.0024813996 +-0.008164587 +-0.03847882 +-0.008279618 +0.025725974 +0.01122557 +0.0044887643 +-0.030716987 +0.002360081 +-0.00025886483 +-0.0150798615 +0.013435732 +-0.010998494 +0.020991981 +0.030159902 +0.0074623027 +0.03729507 +0.00062135456 +-0.04251706 +0.028227592 +-0.0482862 +0.013416585 +0.0031536967 +0.023345085 +-0.010311631 +-0.03339704 +-0.00015200171 +0.026924657 +6.730154e-05 +-0.010929458 +0.0024661084 +-0.0036050316 +-0.018982597 +-0.019142866 +-0.0074595804 +-0.00065725145 +-0.036299728 +-0.0043204604 +0.0006226043 +0.0027683254 +0.014930474 +0.002085134 +0.007866527 +-0.009074704 +0.0040587885 +-0.012834549 +-0.0041448884 +-0.0028265722 +-0.005992811 +-0.012357456 +0.016932977 +-0.004940959 +-0.0020959312 +0.02946355 +0.0005211941 +-0.02255837 +-0.003869154 +0.0045534656 +0.006354549 +0.009522694 +-0.014160726 +-0.014501185 +-0.022598768 +-0.00747487 +-0.014154071 +0.003928754 +-0.012312715 +0.02414531 +-0.019399146 +0.008012631 +0.006948934 +-0.002703249 +0.012818077 +-0.016586965 +-0.0062077516 +0.04071123 +0.0037384287 +-0.006287661 +0.01988306 +-0.019714786 +-0.0101557225 +-0.0045117256 +-0.008418581 +-0.00077979115 +0.018143702 +0.008079885 +0.011777435 +-0.012598863 +-0.004752992 +-0.046711236 +0.003642063 +0.024763135 +0.0050800056 +0.025411217 +0.008458829 +-0.002711827 +-0.02343868 +0.012581157 +-0.00634405 +0.016077926 +-0.021071363 +-0.019885113 +-0.0074634645 +0.038603902 +0.024530519 +0.014170778 +0.0010501958 +-0.036312334 +-0.007643834 +0.012192242 +0.0010840708 +-0.016638165 +0.008449215 +-7.5255964e-05 +-0.016088007 +-0.0039894464 +0.0024011047 +0.013319732 +-0.0030118946 +-0.004250793 +-0.06437043 +0.035465088 +0.016255438 +0.0041786474 +-0.012354929 +-0.004199869 +0.005173723 +-0.0069507686 +-0.010833361 +0.040867306 +0.038235247 +0.006702545 +-0.007891515 +0.008729456 +0.02266448 +0.030291742 +-0.0032217065 +0.016421424 +0.031184897 +0.027492855 +-0.057296768 +-0.014675066 +-0.030259192 +-0.0024468831 +0.017167335 +0.0012637187 +-0.0029993127 +0.008035703 +-0.031260777 +-0.022174515 +0.009655672 +0.026218552 +0.013768547 +-0.005707434 +-0.0022678815 +0.008378201 +0.012524913 +0.017399993 +0.028096141 +-0.04750676 +-0.0023672353 +-0.0069221933 +-0.012149869 +0.004325658 +0.0006648021 +0.0202687 +-0.009874971 +-0.007794685 +-0.0017149377 +-0.0031237183 +0.0044582626 +-0.0047897235 +-0.0076807593 +-0.015806183 +0.0113246795 +0.002400316 +0.008691206 +-0.004753893 +-0.015184844 +0.0052960813 +-0.018350946 +0.048019636 +-0.019213194 +0.010533498 +-0.004210244 +-0.00093603245 +-0.009414241 +0.02267562 +-0.0006569392 +-0.009102648 +0.03128407 +0.00044729712 +-0.02037103 +0.0142323505 +0.009235521 +-0.010193296 +0.002219035 +0.0039513693 +-0.009599633 +0.014517983 +-0.014927055 +-0.016002977 +0.0077793393 +0.017915377 +0.0044419286 +-0.009898059 +0.0053248154 +-0.005221699 +0.0020671557 +0.012723189 +0.0045745927 +0.0015548401 +-0.007733538 +-0.012673524 +-0.017124418 +-0.016179712 +-0.005130775 +0.0029567908 +-0.017539725 +-0.029087156 +-0.014682371 +-0.0009760176 +-0.0098897675 +-0.045535013 +-0.003167538 +-0.0008492122 +0.021541452 +-0.0013444589 +0.0069045015 +0.0015246089 +-0.0029724035 +0.012463981 +0.00022960069 +0.0030587516 +0.00970955 +-0.005732861 +0.0025201205 +0.0019259296 +0.017810866 +-0.026684336 +0.0036712955 +-0.006599946 +-0.0491959 +-0.008171958 +-0.010385403 +-0.010220286 +0.007180474 +-0.00016140967 +0.015233421 +0.008975321 +-0.009576369 +0.022032635 +-0.021548297 +0.015748598 +0.0135814315 +-0.002554153 +-0.0075026713 +-0.008640247 +-0.03971007 +-0.010974788 +-0.052853283 +-0.0032316085 +0.01203471 +-0.0035866036 +-0.011928127 +-0.012802263 +-0.010205504 +0.027931094 +-0.022910476 +0.003258165 +0.014886393 +-0.026629873 +0.017182024 +0.02012904 +0.004607534 +-0.035223525 +3.794447e-05 +-0.037450153 +-0.0015823193 +0.0014976211 +0.0038069817 +0.011994277 +-0.00017498311 +0.005225269 +-0.010368489 +-0.01459327 +-0.021908965 +0.008169324 +0.001963637 +0.024572156 +0.039018285 +0.013430936 +0.0038632324 +0.0011098267 +-0.007820675 +-0.0156657 +-0.0038136153 +0.019395258 +-0.0077258623 +0.009702924 +-0.032501392 +0.0073050223 +0.009710111 +0.017252242 +-0.012007129 +0.0009821538 +-0.00809667 +-0.0029254693 +-0.018684015 +0.008552083 +0.030867314 +-0.004918129 +-0.018228678 +-0.0046543437 +0.0030469857 +-0.026884899 +-0.0015886283 +0.009746839 +-0.0597702 +0.026750986 +-0.0007942994 +-0.01986239 +-0.01641269 +-0.0015262094 +0.012536038 +-0.0133158155 +-0.006751646 +-0.011232178 +0.0076102777 +0.011723298 +0.0014512059 +0.00067550055 +0.0039378353 +0.0108439 +-0.029739572 +-0.008312778 +0.0035984353 +0.004245429 +-0.005708621 +-0.02724362 +0.015636828 +-0.002441495 +0.0005279289 +-0.030702952 +0.00036262677 +-0.013906792 +0.032016538 +-0.012972284 +-0.0031224194 +-0.009176565 +0.005839158 +0.016633444 +0.0033547936 +0.022394575 +-0.00070131384 +0.013833484 +0.015522652 +0.0056807776 +-0.0073590507 +-0.0024502748 +0.009174345 +-0.027947566 +-0.015757041 +0.019712929 +0.008448784 +-0.016170764 +0.0038271793 +0.006026308 +-0.009768942 +-0.040409226 +-0.032153115 +-0.0041128946 +-0.005063689 +0.006605933 +0.014848751 +-0.001467225 +0.010661846 +-0.015939882 +0.00642131 +-0.01884294 +0.014972378 +0.0036872155 +-0.0031978174 +0.0042048595 +0.008467443 +-0.010057435 +-8.099922e-05 +0.005087825 +0.010217042 +0.004351285 +0.021962572 +-0.024029855 +0.0073148645 +0.0087850755 +-0.0101100365 +0.0011406303 +-0.030974865 +0.004413114 +-4.4293127e-05 +0.021212509 +-0.004565988 +-0.00089670793 +0.02729642 +-0.008504763 +0.008268709 +-0.013235156 +-0.008356391 +0.0130932955 +0.010345002 +0.024275284 +-0.015820976 +-0.0031463352 +0.0024660816 +-0.0028343804 +-0.0026473722 +0.0043017473 +0.00018828652 +-0.009740275 +0.009619298 +-0.010003178 +-0.008220419 +-0.0075675473 +0.0329138 +-0.018075796 +-0.00399525 +-0.013963815 +-0.01074613 +-0.006795093 +0.016439192 +0.013377898 +0.029145963 +-0.0071634576 +-0.021014865 +0.020446485 +0.021457395 +-0.01758504 +0.018857615 +0.016033331 +0.013587279 +0.024925392 +-0.0011560176 +0.007505602 +-0.050974734 +0.0075477464 +0.012364211 +-0.011205521 +-0.0008488814 +-0.019549439 +0.013664033 +0.008261892 +0.0026910845 +0.015270212 +-0.012351433 +-0.032666087 +-0.012712958 +0.015615416 +0.00933213 +-0.0087525025 +0.0052641537 +-0.0015114866 +-0.01855179 +0.0015206727 +-0.02676963 +-0.016581701 +-0.022543905 +0.0056033144 +0.027950712 +0.006156259 +0.011994622 +0.008322557 +0.010968111 +0.002042362 +0.017591437 +0.002394936 +0.025664791 +0.0055840285 +0.004676885 +0.0075144926 +-0.041891135 +-0.0009884627 +0.006735738 +0.028251294 +-0.018571746 +0.03184856 +0.004132564 +-0.024205133 +0.00024138273 +0.0042659636 +0.030102566 +-0.024466835 +-0.05013242 +-0.041166563 +-0.0027227928 +0.021986468 +0.035262685 +0.01990969 +0.009961636 +-0.012725489 +0.025833447 +0.014675278 +0.012481976 +0.028669715 +-0.021091392 +-0.0081996685 +0.004667998 +-0.014643509 +0.020672077 +0.010335291 +-0.00033268225 +0.016121347 +0.026116855 +-0.010029116 +-0.001503089 +-0.005518093 +0.009536706 +0.008077566 +-0.015608588 +-0.0007276695 +-0.011630562 +0.045832846 +0.008677501 +0.015596313 +0.017441329 +-0.005739829 +-0.011724339 +-0.038937755 +0.004974618 +0.014390141 +0.00067818566 +-0.0041502616 +-0.014022409 +-0.02134213 +0.008973722 +0.02742134 +7.156542e-05 +0.014313706 +-0.013245894 +-0.00012811723 +-0.020375103 +0.0012878057 +0.014731043 +-0.0074974657 +0.019699097 +-0.009964144 +-0.016098853 +-0.019194372 +0.006805243 +0.023147594 +0.009004814 +-0.03159822 +0.0022833108 +-0.012313654 +0.009906116 +-0.02036938 +-0.022099579 +-0.023972446 +-0.013185365 +-0.0011622913 +-0.035377797 +-0.010294505 +0.009578014 +-0.022859557 +0.030348793 +-0.0084230965 +0.042100627 +-0.0058775367 +-0.00507431 +0.0067401524 +-0.029291233 +0.009810595 +-0.029499656 +-0.029552981 +-0.00023236124 +0.020085948 +0.003705991 +0.004341462 +0.021922864 +-0.0076460885 +0.005995188 +-0.02189435 +-0.010058461 +0.0021318498 +0.021365894 +0.013406738 +0.04624073 +0.0075905505 +-0.014989811 +0.0033420867 +-0.0013161965 +0.0024426098 +0.0057964297 +-0.0015267702 +-0.029408865 +0.020316098 +0.0006858593 +-0.0077688727 +0.009743245 +-0.006811386 +0.010111285 +-0.0063233874 +-0.0040747775 +0.01084395 +0.03773877 +-0.009688265 +-0.032566886 +0.009396225 +-0.014533781 +-0.0138358185 +-0.020089824 +-0.00029841028 +0.00010028091 +-0.008328245 +-0.013166623 +0.011561407 +-0.010362452 +-0.014579024 +0.013401658 +-0.00033446975 +-0.007938378 +0.028976992 +-0.03919505 +0.0150769865 +-0.013705841 +-0.020952037 +0.014789773 +0.0031269607 +-0.011076752 +-0.017711667 +-0.010021573 +-0.03639247 +-0.011020813 +-0.000115081 +0.0011243171 +0.017079208 +0.00931767 +-0.0018029338 +0.0062457994 +0.029017322 +0.007914636 +-0.01054335 +0.01839167 +0.0011076458 +-0.009810673 +-0.015198069 +-0.011103565 +-0.0046248995 +-0.0087845465 +-0.013816207 +-0.019834213 +-0.010764808 +-0.00023445014 +-0.0077182767 +0.0036420191 +-0.0038103121 +-0.010421544 +0.023333235 +0.011741638 +0.015109241 +-0.0069179353 +-0.009826973 +-0.008427224 +-0.01478628 +-0.012943618 +0.011628912 +0.015861927 +-0.01554641 +0.014144007 +0.008425627 +0.009800065 +-0.009623519 +-0.031874217 +-0.010532862 +-0.010387359 +-0.0049506323 +0.02699804 +0.0018182416 +0.019217 +-0.01833424 +0.0027245632 +0.010160373 +0.018114433 +0.015290247 +-0.0026723554 +-0.012658531 +0.027188456 +-0.0026664494 +0.016250463 +-0.0073579955 +-0.0047602626 +0.003535625 +0.023449825 +-0.026412101 +-0.0038008932 +0.0033694257 +-0.0028417867 +0.005107788 +-0.017170904 +-0.027006352 +-0.02901949 +0.025777884 +-0.005122496 +0.012234856 +0.019580275 +0.009013697 +-0.0021322714 +0.002292288 +-0.006416353 +0.023035513 +0.0066706496 +0.009564639 +-0.008781664 +-0.014406683 +0.008563792 +-0.020213602 +0.00011499483 +0.010498239 +0.011859245 +-0.005649242 +0.014616028 +0.0035900956 +-0.014709015 +0.011147379 +0.0193501 +-0.0033559264 +0.015403756 +-0.018717598 +-0.0020225272 +-0.014104015 +0.0062440066 +0.027381456 +0.019111354 +0.00028272936 +0.0030837352 +0.0062638163 +-0.020365432 +0.01948895 +-0.012828607 +0.0038682858 +-0.001877976 +-0.0062072882 +-0.027274003 +-0.0124580255 +0.014069361 +-0.02543439 +-0.020476213 +0.0034471417 +-0.00013510537 +0.025153438 +-0.030151106 +-0.004828387 +-0.006812986 +-0.006050943 +-0.0013494693 +0.0088474685 +0.0060911546 +-0.009769251 +0.023919018 +-0.016482519 +-0.0067316787 +-0.0067809992 +0.020711046 +-0.02038217 +-0.006959927 +0.020481063 +0.0072171055 +0.015184154 +-0.010973724 +-0.0065614237 +-0.0026334608 +0.0045707645 +0.03742914 +0.0061103064 +-0.008472717 +0.017495716 +0.0028995946 +-0.017572189 +-0.034784317 +0.017931132 +-0.0010213838 +0.0067625055 +-0.020447329 +0.02102705 +-0.028284855 +0.015914394 +0.028128184 +0.026885778 +0.016729152 +-0.005949377 +-0.0050466848 +-0.0038302992 +-0.021281308 +0.030663682 +0.013728727 +-0.018113792 +-0.008262853 +-0.0055251345 +-0.013509156 +-0.009211406 +0.014627844 +-0.020681147 +0.0004651178 +-0.005130433 +0.041836664 +-0.010175997 +-0.007401262 +-0.00012331922 +-0.0014235354 +0.011178421 +-0.03761233 +-0.0011446815 +0.0008947651 +-0.012315895 +0.054030657 +-0.007931746 +0.0042568753 +-0.02300095 +0.0145714 +-0.01920161 +0.0068841176 +-0.01305307 +0.026101826 +-0.0035536848 +0.00092709967 +0.021415278 +0.007128964 +0.018779268 +-0.026028953 +-0.005416192 +-0.014433878 +0.0015098901 +0.0043609086 +-0.0061675794 +-0.014629064 +-0.029986769 +-0.0021950647 +-0.00037300485 +0.0059641167 +0.00896949 +0.00551692 +0.018421076 +-0.025245827 +-0.010544696 +-0.020690883 +-0.012822516 +0.003030159 +0.028401516 +-0.0028106284 +0.005720871 +-0.0039776512 +0.009995228 +0.012220697 +0.00875499 +-0.011486681 +0.0077824993 +0.007106466 +0.0013839127 +0.0055892644 +-0.0031973564 +-0.034903076 +0.008341283 +-0.018499179 +-0.00036207074 +0.0024518692 +0.016273275 +-0.02167711 +-0.017056452 +0.012992695 +0.0016542663 +-0.008234605 +-7.773901e-05 +0.003930091 +-0.0035144528 +-0.009295155 +-0.0015589879 +-0.0010250758 +0.006211873 +-0.024605107 +0.019219032 +-0.021950454 +-0.0024215807 +0.013025269 +0.00776364 +-0.008594661 +-0.0031190899 +-0.022067623 +-0.008009302 +-0.007617762 +-0.0127501525 +-0.00053962733 +-0.028065182 +0.020285392 +0.013056824 +0.023356447 +0.025175557 +0.0032404284 +-0.0052666236 +-0.0077072335 +0.010052661 +0.0011633345 +0.0010807451 +-0.0087908385 +-0.013105314 +0.0029771107 +0.009223074 +-0.037733484 +0.0063529667 +0.010768015 +0.019349525 +-0.04260639 +-0.002270299 +-0.034269568 +-0.013688436 +0.0074256854 +-0.014538375 +-0.032604072 +0.01264411 +-0.002762039 +-0.004574792 +0.036090914 +-0.02023231 +0.005790471 +-0.058496393 +0.032521944 +-0.02649685 +0.013639769 +0.001564255 +-0.00416596 +0.013860787 +-0.0058204 +-0.01162286 +-0.01572743 +0.012719868 +-0.0036555158 +0.027887419 +0.011529978 +-0.005089181 +-0.0029623348 +0.0018478286 +-0.0091709485 +-0.009857973 +-0.009208427 +-0.01325013 +-0.0074047027 +0.0293876 +0.04101782 +0.014189062 +-0.03453331 +-0.014012151 +-0.0046018264 +-0.004357446 +-0.0004546424 +-0.009474848 +0.0033976932 +0.0026375833 +-0.00850381 +-0.009281366 +0.019748673 +0.007139066 +0.009723899 +0.013988043 +-0.057624586 +0.00685332 +0.0018506404 +-0.00034324988 +-0.010074407 +0.020677231 +-0.015457088 +-0.023836346 +-0.010602313 +0.018665956 +0.024274858 +-0.011355639 +0.0027510356 +-0.018189082 +-0.030429052 +0.008493628 +-0.007060617 +-0.001653534 +-0.0077491803 +0.017253483 +-0.020799972 +-0.01019661 +0.008294921 +-0.021787148 +0.023445765 +0.0084018065 +-0.010776334 +-0.013082894 +-0.026101608 +-0.028821524 +-0.023830079 +0.0036319678 +0.019479815 +0.0070187496 +0.006037283 +0.027932033 +0.02200465 +0.014746194 +0.0072540995 +-0.013937562 +-0.0076032407 +-0.030994527 +0.00088989956 +0.0075106057 +0.014676664 +0.000649032 +-0.0096745 +0.0038209667 +-0.0063555664 +-0.023005893 +-0.007391533 +-0.0052845487 +-0.0016450903 +-0.0093831755 +0.0023060986 +-0.0075258682 +0.015430806 +0.0037502295 +-0.017047934 +0.0026485897 +0.0048925006 +0.015003359 +0.010984898 +0.01793576 +0.0015802752 +0.0004862394 +-0.006271764 +-0.0049107447 +0.0014071073 +-0.022393959 +-0.028437443 +0.0042220084 +-0.004884596 +0.0026784998 +0.0042580846 +-0.011201707 +0.00025923504 +-0.010345121 +0.0057654907 +0.017162658 +-0.0025761004 +-0.004469765 +-0.0068663927 +0.02961216 +-0.014028734 +-0.0074402145 +4.9499118e-05 +-0.014706649 +-3.3396376e-05 +-0.0032988356 +0.00899377 +0.004922456 +0.0028545572 +-0.016986765 +-0.016982775 +-0.0031821225 +-0.004872193 +0.021606775 +-0.005041604 +-0.0008348052 +-0.007627704 +-0.013462259 +0.025054999 +-0.006101856 +0.0050660395 +-0.020995937 +0.003074682 +-0.042971063 +-0.019568117 +0.008260639 +-0.013194395 +-0.0046227137 +-0.014472832 +-0.001842678 +0.00888054 +0.0032803097 +-0.00057446444 +0.013436427 +0.0076944167 +-0.010251473 +0.023046467 +0.0005763857 +-0.0016569685 +-0.029912498 +-0.015628958 +-0.0023998807 +0.014689298 +0.021571033 +0.02112017 +0.004331758 +0.006656003 +-0.011334377 +-0.00679451 +-0.0017151576 +0.013314985 +-0.0014615238 +-0.007370597 +-0.0018762001 +-0.023675753 +-0.003282115 +-0.002866389 +-0.00023745332 +0.014734539 +0.0020302564 +-0.02175323 +0.007251294 +0.015201398 +0.005539599 +-0.028788876 +0.0025497582 +-0.013363309 +-0.0060806866 +-0.0075072353 +0.012739795 +0.0022952047 +-0.002197395 +-0.0042460193 +0.019919312 +0.025584904 +0.0093698455 +0.006472943 +-1.5017049e-05 +0.0013124704 +0.005231246 +0.00015238732 +-0.002202331 +-0.044965502 +-0.015798906 +-0.00973892 +0.019115036 +0.052530177 +0.007909309 +0.011006992 +0.00061670603 +0.016448269 +-0.021979153 +-0.010247675 +-0.0022095116 +0.001852062 +0.0054347706 +0.0061686547 +-0.015416552 +-0.0038928408 +0.013048608 +-0.022953922 +9.079611e-05 +0.0030965742 +-0.0013359891 +-0.02561492 +-0.0010649031 +0.010490577 +0.006564601 +-0.02248829 +-0.0037671735 +0.0009179443 +0.018796869 +0.0062638 +0.012266991 +-0.02392592 +0.025132256 +-0.029588519 +0.006680614 +-0.021756936 +0.0226768 +0.0023820142 +-0.010887113 +-0.008358796 +0.017351223 +0.013627816 +-0.014761191 +-0.008565193 +0.04070465 +-0.022907915 +-0.026610086 +-0.02160385 +-0.027339071 +-0.0101429 +0.0020603228 +0.0049844678 +0.004417352 +0.014262103 +-0.0023155792 +-0.0004517291 +-0.0024620083 +-0.017533304 +-0.0025731195 +0.005363096 +-0.0270254 +-0.011273851 +0.0051797563 +0.0052464213 +0.003735755 +-0.011542643 +0.01520585 +0.013811286 +-0.010469237 +-0.0046843113 +0.014736447 +-0.013239331 +-0.011888666 +0.028603243 +-0.028176341 +-0.01977308 +-0.0006308912 +0.009230835 +-0.005606774 +0.016911982 +0.022393012 +0.012491418 +-0.030779403 +-0.010339491 +-0.029050881 +-0.0019661179 +0.026028056 +-0.015665183 +-0.021627586 +0.007748733 +-0.0021665057 +0.037548907 +-0.0048121624 +0.0136645995 +-0.0025502997 +0.0071715335 +-0.015249783 +0.019631336 +-0.0024157325 +-0.016164565 +-0.009435273 +0.03407506 +0.012123533 +-0.009074843 +0.015792001 +-0.014795496 +0.0045816484 +0.006721926 +0.015136122 +-0.014847319 +0.008531955 +-0.009010714 +0.010209216 +-0.019353652 +0.0073540974 +0.01928472 +-0.0016342682 +0.043989092 +-0.020682089 +0.019673793 +-0.012299464 +0.0027378418 +0.0121130245 +-0.0026916591 +0.007273326 +0.0103783365 +0.009178263 +-0.010884884 +-0.0013330368 +0.0017534003 +-0.0305157 +-0.004169182 +-0.013924815 +-0.023996945 +0.0024802485 +0.034817178 +-0.016043551 +0.016163569 +0.00148003 +-0.0030004075 +0.015446118 +0.003008347 +0.008321756 +0.038489874 +-0.0058702617 +-0.008939216 +0.006910896 +-0.011578833 +-0.018203184 +0.010342992 +0.014286059 +0.0026111759 +0.008666283 +-0.057044744 +-0.008991209 +-0.031515576 +-0.012503288 +0.0054320404 +0.0069063217 +-0.0005243825 +-0.016902296 +0.024760712 +-0.0007514171 +-0.01203668 +0.046311162 +-0.017171541 +-0.024126932 +-0.016978348 +0.019330408 +0.014427381 +0.032949287 +-0.0046303147 +-0.021478405 +-0.0027066336 +-0.0043317312 +-0.0021360053 +-0.004349727 +-0.0011279127 +0.011233457 +0.002516218 +-0.0058615957 +-0.008734132 +-0.003812932 +0.011535426 +0.0070878156 +0.010807389 +0.0038073577 +0.009352535 +-0.0024496336 +-0.0045727356 +-0.0078102574 +-0.017448008 +0.005835778 +0.005152415 +0.0071683587 +-0.028740376 +0.011072338 +-0.0015148453 +-0.0040793214 +-0.00060031866 +0.026706703 +0.024084479 +-0.0002555625 +-0.0051499135 +-0.0048920517 +0.0038311337 +0.020643886 +-0.0068636313 +-0.0041954466 +0.013968896 +-0.018263593 +0.017971348 +-0.005798595 +-0.048197206 +0.017327853 +-0.010140778 +0.0015626802 +-0.0032009196 +-0.00946641 +-0.0067355386 +0.0061778463 +-0.00982357 +-0.006166258 +0.003387851 +-0.000235833 +-0.0132929655 +0.0026691358 +0.001673562 +0.0069370535 +-0.0077262404 +0.013075056 +-0.017763823 +0.012955925 +0.016230056 +0.007398982 +0.011800324 +-0.010152741 +0.012697196 +0.0023253665 +-0.0005482072 +-0.021013828 +-0.0030714474 +0.004859194 +-0.0008334188 +-0.008635809 +0.0023723058 +0.013875541 +-0.009709612 +-0.01299972 +-0.011742447 +-0.0045402385 +-0.004179077 +0.0029798124 +-0.021890545 +-0.010567963 +-0.0024301484 +0.011017654 +0.0043849195 +0.002367632 +0.009843089 +0.011233675 +-0.011487469 +-0.026855638 +-0.006687452 +0.0056370213 +-0.0055932365 +-0.019108638 +-0.0020421448 +0.0031164344 +-0.010184486 +0.021061275 +-0.021661002 +-0.002949723 +0.017480668 +-0.0042039678 +0.0049812235 +0.014287039 +0.04481609 +-0.0147322975 +-0.005138805 +-0.010078812 +0.007920932 +0.0019236226 +-0.015664091 +0.01530385 +0.0030345328 +0.012187214 +-0.024404986 +-0.0035203365 +0.012733665 +-0.010953723 +0.00272641 +-0.005617831 +-0.023336336 +-0.0023994124 +-8.167802e-05 +-0.0020984788 +0.010567666 +0.004149947 +0.0006987493 +0.0004117525 +0.011871263 +0.024396408 +-0.006097487 +-0.0028522005 +-0.03115372 +-0.0010605117 +-0.0026315786 +-0.0009061078 +0.0024705522 +0.010067198 +-0.0077682333 +-0.0003260575 +0.017501717 +-0.0032481696 +0.01754876 +0.016099678 +0.0047905636 +-0.00069944817 +0.006920361 +-0.029379405 +-0.01005396 +0.0027604941 +0.005601084 +0.012318066 +0.007700054 +-0.0082015265 +0.003933925 +-0.010047593 +-0.012831605 +0.022688063 +-0.014844597 +0.0062119993 +-0.019084223 +-0.003966468 +0.011110321 +-0.03139036 +0.051146872 +0.002032383 +-0.017068908 +0.00195583 +-0.027542897 +-0.016536932 +-0.0102776615 +0.010390233 +-0.00044371863 +0.0004310865 +0.0033451482 +0.0027490277 +0.00067056273 +-0.0052896594 +0.010961174 +0.009499502 +0.017299388 +-0.005953399 +0.008140851 +-0.0053909705 +-0.02053186 +0.017321607 +-0.034976583 +0.009319178 +-0.015994558 +-0.021317778 +-0.01546105 +0.0017416901 +-0.029156642 +-0.013138661 +0.010898238 +-0.0048843967 +-0.0013087264 +0.013600353 +-0.00989663 +-0.0054103956 +-0.0061806035 +-0.008878686 +0.004190499 +0.012451942 +0.0014041777 +-0.0037723316 +0.01580963 +0.0026998355 +-0.00750586 +0.0020989866 +0.0026245723 +-0.0429548 +0.011203519 +0.013611349 +0.019835858 +0.015510481 +0.020126106 +-0.012115058 +0.027246635 +0.012643721 +0.03125588 +0.013806601 +0.00428275 +-0.019381039 +0.008154593 +0.019532245 +-0.0025352647 +-0.0067404225 +0.02012726 +-0.0006780578 +0.0009682576 +0.024477627 +0.007515918 +-0.0031406553 +0.004548176 +0.012121958 +-0.0050962507 +0.0066078054 +-0.015716888 +-0.007919351 +0.00995264 +0.008713006 +-0.002937025 +0.014059563 +0.021245599 +-0.0013242721 +-0.009560849 +0.0055920924 +-0.026959384 +-0.0025782962 +-0.008273174 +-0.008865608 +0.0017777634 +-0.020035006 +0.0226667 +-0.017764403 +0.0065492266 +-0.00097630237 +0.011696234 +-0.013547919 +0.0061565544 +0.0036422818 +0.0071324115 +-0.007051656 +0.018751746 +0.0076908427 +-0.0011101011 +0.0063609364 +0.007175752 +0.017755674 +0.014417892 +0.030452382 +0.005421086 +0.0047205565 +0.0109813865 +0.010141304 +-0.027622655 +-0.0008249734 +-0.014145941 +0.020127084 +0.0048360233 +0.008012398 +0.028518481 +-0.0006166624 +-0.016202036 +-0.0050638625 +-0.00030217518 +-0.0017208965 +-0.02319287 +0.0003704567 +0.004244742 +-0.027746147 +-0.014899911 +-0.0046387124 +0.0061469343 +0.010668024 +0.009470349 +-0.021991793 +-0.025394317 +-0.010028622 +-0.012274561 +-0.020339053 +-0.016952956 +0.003581156 +-0.01770753 +0.012461763 +-0.02790538 +0.012487114 +-0.008120435 +-0.019140111 +0.031623423 +0.008696438 +0.036451582 +-0.0038509634 +0.018488951 +-0.002247265 +-0.0015013549 +0.005566133 +0.0012107065 +-0.0024304807 +0.012587297 +0.010311546 +-0.015457372 +0.0057394323 +-0.019426668 +0.018302329 +0.014453645 +0.00020796117 +0.008431713 +0.0042569684 +-0.00044809852 +0.018744718 +-0.013468808 +-0.0017494166 +0.021714613 +-0.008897937 +-0.0042836466 +0.007857959 +-0.031724967 +0.008892072 +0.024588924 +-0.004494688 +0.022688793 +-0.030684102 +0.0045017498 +-0.010507399 +0.0077960035 +-0.017784296 +-0.0028777297 +0.016038679 +-0.0036031583 +-0.018074103 +0.03003935 +3.05158e-05 +-0.005846895 +0.007420847 +0.0066057644 +-0.032559328 +0.009287231 +-0.030662434 +-0.012344343 +-0.005039231 +-0.0021547899 +0.0051241117 +-0.0053537437 +0.024144594 +-0.0014775029 +0.008689246 +-0.015871653 +0.008377866 +0.007907816 +-0.005788073 +0.009593548 +-0.014395721 +0.011387232 +-0.019363873 +-0.004748727 +-0.0053372527 +0.008321836 +-0.009403188 +-0.021396762 +0.010615101 +-0.003926308 +0.012413338 +0.0030460106 +0.014135586 +-2.4006957e-05 +0.0021192 +-0.015477431 +0.0054887654 +-0.0057622003 +-0.0012340718 +-0.01065871 +0.017526634 +0.024735596 +0.015402925 +-0.0071314094 +-0.028453475 +-0.027439315 +-0.007955773 +0.0057822336 +0.0057084397 +0.012268873 +0.020160042 +-0.009183981 +-0.011175465 +-0.0027194521 +0.0100082625 +-0.016146688 +0.0015435653 +-0.0030333844 +-0.008418538 +-0.0069017177 +0.006510587 +0.00904463 +-0.0017861093 +-0.035285596 +-0.0063243075 +-0.022880098 +0.015879344 +-0.0045790533 +-0.012696705 +-0.011405381 +-0.009303576 +-0.017419485 +0.0033955937 +-0.014782385 +0.0102552 +-0.0009727142 +-0.025519894 +0.03464295 +0.011042605 +0.051334426 +0.009664384 +-0.007625383 +-0.004005573 +-0.004646068 +-0.007482451 +0.0016188966 +0.0021805444 +0.004930066 +0.0044499245 +0.0042391336 +0.016263872 +-0.04005438 +-0.01528788 +0.0133637935 +0.02355171 +-0.015547439 +-0.007308463 +-0.022136256 +0.00042830326 +-0.006992806 +-0.0021405707 +-0.018360619 +0.0053641093 +-0.00012886894 +-0.019961394 +-0.020940416 +-0.0033149975 +0.0098127 +-0.056719206 +0.023673575 +-0.0059504653 +-0.0064819977 +-0.0030998883 +-0.028918196 +0.020052051 +-0.010313733 +-0.008597826 +-0.014064762 +-0.0044404664 +-0.0069337743 +0.038637597 +0.0030743543 +0.002290674 +-0.0068553495 +-0.026792714 +0.0021426885 +-0.0093861595 +-0.008762218 +-0.0065216925 +0.004767466 +0.008322062 +0.03970034 +0.0099720275 +-0.00850855 +-0.00773145 +-0.00823859 +-0.007709683 +0.008397984 +0.0025027983 +0.008125072 +0.016861763 +-0.004177881 +-0.0058775614 +0.024765832 +-0.015334656 +0.008508084 +-0.0017642103 +-0.01818979 +-0.0075436193 +0.012691363 +0.0017460965 +0.0018025833 +0.0039580325 +-0.015511447 +-0.02397773 +-0.018141977 +-0.007878527 +0.020941414 +0.014965849 +-0.00088377733 +-0.008872989 +0.002608861 +0.012332904 +0.0002842953 +0.023911575 +-0.005012925 +-0.0044884877 +0.0002092195 +0.003441001 +0.005651375 +-0.00032955117 +0.047298964 +-0.013000257 +-0.0069584926 +-0.005041571 +0.00021181733 +0.0029113686 +-0.0011443975 +0.026895983 +0.0028541968 +0.0023982916 +-0.02251255 +-0.0015452662 +0.0026194719 +-0.0050720507 +-0.018878423 +-0.012683732 +-0.012030367 +-0.026215713 +-0.006491249 +0.0011170874 +0.0008303696 +0.009714738 +0.0074075838 +0.0026671756 +-0.017665997 +0.020170555 +-0.004004874 +-0.004431079 +-0.03843008 +-0.017073784 +-0.00051536236 +-0.016251836 +0.016003605 +0.004912031 +0.00061814906 +-0.00090481486 +0.01295303 +0.001979315 +0.02578311 +0.02964648 +-0.0038965393 +-0.000705857 +0.0004999029 +-0.007791623 +-0.0018010344 +-0.014232054 +-0.03126885 +-0.019073715 +0.016763961 +0.012449339 +-0.009488105 +0.0008828426 +0.0023635658 +-0.010815845 +0.020595843 +0.019639274 +-0.0076329103 +0.01886238 +0.005088632 +-0.007963677 +0.007968944 +0.0070045292 +0.0049332557 +-0.00686433 +0.009715813 +-0.008482969 +0.0155565785 +-0.018147003 +0.015005462 +-0.03257955 +-0.0066499445 +-0.019716864 +0.00068497704 +-0.0048920675 +-0.012556875 +0.027937533 +0.013277742 +0.00063118327 +0.022504082 +0.0041451147 +0.015960185 +-0.019198107 +-0.017254163 +-0.012085032 +-0.0101237185 +-0.013126705 +0.0038696385 +0.0023328217 +-0.014778126 +0.011835262 +-0.008324808 +-0.007985494 +0.0025487717 +0.005085237 +0.0107563455 +-0.0041916184 +-0.00442768 +-0.03782976 +0.008173979 +-0.03306797 +0.0041706846 +-0.0012841332 +-0.0004944831 +0.012686132 +0.0290007 +0.003317068 +0.0067909667 +-0.016879538 +0.0009986425 +0.0050938064 +0.017404119 +0.017308999 +0.0030857478 +-0.03739735 +-0.0070180935 +-0.0012534586 +0.00646877 +-0.0016998647 +-0.0041460637 +0.009358617 +-0.0055170082 +0.0006510784 +0.0058006616 +-0.011825545 +-0.0072809695 +0.013403162 +0.00039941358 +0.002137155 +-0.003141989 +0.00034807407 +0.0012150512 +-0.01795278 +-0.03300352 +-0.017195398 +-0.009165511 +-0.010353029 +-0.025937214 +0.0033227976 +-0.0024631934 +-0.0040685926 +-0.010052826 +0.0015611137 +-0.0029831436 +-0.010282163 +0.0029793046 +-0.017614612 +0.044455517 +-0.009755736 +0.07317101 +0.009819663 +0.0033548889 +0.008771989 +-0.009091728 +-0.002694253 +0.008952886 +-0.00848496 +-0.004571875 +0.0069219554 +-0.0020530159 +0.008189216 +-0.023560405 +-0.014580868 +0.008084208 +0.0074945306 +-0.004084503 +-0.011814609 +-0.022337886 +-0.010031767 +-0.014778676 +-0.001260584 +0.0018014656 +0.007898628 +-0.017452076 +0.012649235 +-0.014149039 +0.02783308 +-0.027194474 +0.009930902 +-0.008161723 +-0.0033896344 +0.014444736 +-0.015796332 +-0.019545916 +-0.016913654 +0.001851685 +0.014700781 +-0.000615898 +-0.016181413 +0.016345471 +-0.017354874 +0.0033182844 +-0.009820972 +0.030745974 +-0.0090580005 +0.012619171 +0.015838202 +-0.0067895805 +-0.027907286 +0.01812648 +0.009209921 +0.0040446254 +-0.025132108 +0.020163832 +0.00018433458 +0.011335322 +0.010284504 +0.034055017 +-0.004402753 +-0.01841395 +0.02063455 +0.0016035025 +0.0061693913 +0.024110006 +0.0065117073 +-0.015476905 +0.0032136084 +0.00521814 +0.0034586561 +0.012391296 +-0.028963275 +0.00696581 +0.008575923 +0.018951936 +0.0023127864 +0.007189372 +-0.024019 +-0.030760158 +-0.018382078 +-0.016540341 +0.008997151 +-0.034791514 +4.6615798e-05 +0.02066527 +-0.010040606 +0.027143458 +-0.0043452065 +-0.012094866 +0.01749358 +-0.004981488 +-0.006375689 +0.0027084048 +0.015514144 +0.0052741095 +-0.011668517 +0.009209356 +-0.0050622355 +-0.022997186 +0.0074207317 +-0.020409036 +0.012833101 +0.0126904 +0.010169984 +-0.021951793 +0.017992876 +0.006706597 +0.010811511 +0.014998566 +0.019287039 +0.0006329712 +-0.0017838449 +0.026406799 +0.002060025 +0.023212997 +-0.0075693117 +-0.013947578 +0.014511373 +-0.01818981 +0.0007464716 +0.0035488212 +0.006659997 +-0.014953261 +-0.013106563 +-0.009301422 +-0.020750526 +-0.008576568 +0.013814774 +-0.010691417 +-0.015726099 +-0.008688532 +-0.003543415 +0.021914264 +0.005206825 +-0.029564366 +0.0015713595 +-0.01951688 +0.001292117 +0.05021975 +0.009763979 +-0.0050644856 +0.0019043424 +-0.0080454275 +0.005667451 +-0.007817787 +-0.004414639 +-0.015482839 +0.019664126 +0.0009813119 +-0.019078365 +-0.010323795 +0.013832466 +0.012562126 +0.0052848877 +0.0015433863 +0.008002034 +-0.030773522 +-0.021692213 +-0.03055444 +-0.0102355555 +-0.005935226 +-0.008361476 +-0.016886126 +0.0058486382 +0.014336474 +-0.007691911 +-0.036757916 +-0.0021419688 +0.00085385377 +-0.01480066 +-0.0063754227 +0.019050112 +-0.00053815206 +0.010074957 +-0.031883255 +0.018709207 +0.01084742 +-0.0068703583 +0.0060137054 +0.027654162 +-0.017814673 +-0.025619252 +-0.00015971299 +-0.0034611323 +-0.012860758 +0.0088503165 +0.006651989 +0.0094391275 +0.0015272767 +0.0027760447 +-0.02511351 +0.003859782 +-0.014406364 +-0.002398017 +0.036128927 +-0.006397312 +-0.017088506 +0.014204183 +7.5564e-05 +-0.0035755746 +0.007247305 +0.012780721 +-0.02011714 +-0.0124910595 +0.03498834 +-0.010910705 +0.023819229 +0.002682654 +-0.013216482 +0.0061354027 +0.008467852 +-0.023800675 +-0.010258257 +0.0028726645 +-0.002581935 +0.0034252044 +0.0078030024 +0.006319247 +0.013037 +-0.006060124 +0.010713444 +0.016166085 +0.008681476 +0.0034559949 +-0.0070969956 +0.0006860858 +-0.019089552 +0.008348922 +0.026005289 +0.021958968 +-0.007431312 +0.0037460523 +-0.010793777 +0.0010079273 +4.7709666e-05 +0.0026278894 +-0.015834471 +-0.011559382 +0.008586153 +0.0014470174 +0.027932713 +0.00072255655 +0.01231533 +-0.018901343 +-0.018450009 +-0.01512656 +0.0019222355 +0.00021380687 +-0.030225012 +-0.01840294 +0.0018011588 +0.008446825 +0.006504954 +0.015217281 +-0.019089805 +0.014127965 +-0.006081549 +-0.026482727 +0.00698211 +0.009140663 +-0.0044155573 +-0.008951514 +-0.004003854 +-0.0063747456 +-0.01369881 +0.02432635 +-0.009905288 +-0.006496875 +-0.02465272 +0.017088896 +-0.00021637432 +0.012615868 +0.02844558 +-0.009271581 +-0.012406089 +0.011684736 +-0.0066041593 +0.016047122 +0.010482404 +0.004603456 +0.013040445 +-0.009337311 +0.019211954 +-0.009691773 +0.009339783 +-0.0024193074 +0.016430993 +-0.0049903886 +0.0061143385 +0.013217421 +0.020706357 +-0.011493896 +0.017568056 +-0.0015075549 +-0.004461282 +0.004810726 +0.014487245 +0.030676028 +0.00023389966 +-0.008366748 +-0.048624907 +-0.0051358305 +0.005066939 +-0.013187347 +0.004780619 +-0.007927813 +-0.01392478 +0.0040919557 +0.0068276697 +0.007031554 +0.0040957374 +-0.0028500906 +0.037077386 +0.008537116 +-0.009422166 +-0.014482557 +-0.00888411 +0.013357923 +0.009162382 +0.006497243 +-0.0017515433 +-0.022628682 +0.014918825 +0.00441189 +-0.027219394 +0.027484613 +-0.010429341 +0.008308753 +-0.00013499569 +0.0077441237 +0.013264979 +-0.0021235226 +0.07815294 +-0.0022754115 +-0.0075912457 +-0.0061297812 +-0.027737364 +-0.013641272 +-0.012043285 +0.00045643726 +0.0073844967 +0.007806718 +-0.0008230032 +0.0047602807 +0.016564062 +-0.016289208 +-0.0084741935 +-0.0038032357 +-0.0035237346 +-0.010406698 +-0.024407996 +0.0044826744 +-0.027178956 +0.0077635264 +-0.0053483057 +0.0023174146 +0.0028823046 +0.025850363 +-0.009505411 +0.0003293496 +-0.03201977 +-0.018478712 +-0.0018897959 +-0.0033811629 +0.0040633916 +-0.0011670104 +-0.0055278856 +0.0072785304 +0.01073209 +0.0028632726 +0.00094930193 +0.021315498 +0.0012861101 +-0.0064424584 +0.03250393 +-0.017538363 +0.0033390694 +-0.01824537 +-0.010588654 +-0.017439146 +0.0058407485 +-0.008336639 +-0.010569106 +0.00040460238 +0.0062274258 +-0.00057714875 +0.030262649 +0.017412854 +0.014662591 +0.010545674 +0.00056472124 +-0.036665954 +-0.008063177 +0.0048061875 +-0.011139755 +-0.0038369964 +0.009855729 +0.00026775073 +0.006950924 +0.008437555 +0.004052903 +0.010077032 +-0.00683227 +0.0045441175 +-0.0024238143 +-0.0030656303 +0.009305409 +-0.00827471 +0.015881177 +-0.0035831179 +0.023345534 +0.01886258 +0.0027207148 +-0.006832611 +0.011391056 +0.002532435 +0.001775496 +0.009294857 +-0.005225385 +-0.012554672 +-0.007882251 +-0.0125183165 +0.008489297 +-0.0067416923 +-0.009777909 +-0.0025100282 +0.005617857 +0.012546519 +0.006109243 +0.0028366211 +0.0062022093 +-0.0085863415 +0.0038723089 +-0.0033719982 +0.0013802784 +0.01723659 +-0.00030534808 +0.027262388 +0.013665743 +0.007280119 +0.00690815 +0.0019750686 +0.02084771 +0.0071520433 +-0.018016174 +0.0051393 +-0.028224671 +0.012566969 +0.012301917 +-0.00032365992 +0.023847515 +-0.008782733 +-0.0027101405 +-0.0007127329 +0.0036076338 +-0.009338707 +-0.011387509 +0.016525354 +0.00028609257 +-0.012279121 +-0.029198432 +0.008228757 +-0.01817351 +0.010551644 +-0.0033172946 +-0.01745089 +-0.024838064 +0.008885849 +-0.044242997 +-0.02571697 +-0.0024015408 +0.0014719246 +-0.020737099 +0.013804203 +-0.009589485 +0.020246768 +0.00533384 +0.006357261 +-0.0009326133 +0.013146609 +0.028717916 +0.012901277 +0.024861086 +0.0119618755 +0.0027042672 +0.023158435 +0.0053477865 +-0.006639003 +0.011686919 +0.007934581 +-0.009922286 +0.015377403 +-0.025972312 +-0.010653101 +0.010540523 +-0.020022886 +0.008742133 +0.009475701 +0.002879897 +0.017100187 +-0.0015954364 +-0.0020854878 +0.011811742 +0.0097721405 +-0.02578081 +-0.0116282245 +0.006304194 +0.0001400001 +0.010252379 +0.012943944 +-0.0028266478 +0.004650263 +-0.011881434 +-0.006420889 +0.024538405 +-0.0024307063 +0.008794687 +0.0013683516 +0.015833035 +-0.0051289294 +0.0007432976 +-0.0012702211 +-0.029999336 +-0.0021059345 +0.00079333945 +-0.017243704 +0.0013586022 +0.0063782544 +-0.035110224 +0.0013378216 +0.008824809 +0.0003572985 +-0.024153542 +0.0033728052 +-0.017376563 +0.0064501325 +-0.0014751222 +0.01748197 +-0.020403028 +-0.0025077371 +-0.023459088 +-0.018840566 +-0.0003316621 +0.014333584 +-0.024951832 +-0.017866464 +0.0006779717 +-0.004219301 +-0.0050461525 +0.024455145 +0.00037670365 +0.0114424415 +-0.012748974 +-0.015718369 +0.006140503 +0.0037840977 +-0.010956886 +-0.011764504 +-0.009134859 +-0.018632846 +-0.0036198955 +0.014568766 +-0.005375222 +0.013426932 +-0.022719745 +-0.03964905 +-0.012326001 +-0.023947591 +-0.003854861 +-0.0044385893 +0.002444086 +0.0009768492 +-0.02532811 +-0.003512199 +-0.007069195 +0.0065237195 +-0.008095296 +0.011914584 +0.0012227225 +0.0037053826 +-0.0036606558 +-0.020421196 +-0.0026255557 +-0.004646087 +-0.01246323 +-0.0065407464 +-0.013696286 +0.009686536 +0.0018070975 +-0.0013848267 +0.006787929 +-0.009380626 +-0.008329667 +-0.009085403 +-0.0072106947 +0.003818871 +-0.007642945 +-0.0343887 +0.04724381 +-0.004188834 +0.07062185 +0.013856434 +0.0038847635 +0.00091834605 +0.0154028395 +0.004262964 +0.0067744567 +-0.002789821 +0.016595028 +0.001147359 +-0.00012236495 +0.0070533655 +-0.02946179 +-0.02600191 +0.015946403 +0.019812617 +0.013842661 +-0.026427474 +-0.03320141 +-0.022801666 +-0.016858099 +-0.0025650873 +-0.0053865793 +0.012168565 +0.01376245 +-0.009269831 +0.014851962 +0.013819472 +-0.0046083676 +-0.024407098 +0.0044356207 +-0.0018914643 +-0.015087078 +-0.012020171 +-0.029116139 +-0.0047145467 +0.024088165 +-0.0014957123 +-0.02345628 +-0.00032052674 +0.00083887216 +0.012936757 +-0.005382726 +0.019187884 +-0.013420237 +-0.013712452 +0.020171411 +-0.0075133904 +-0.02253587 +-0.013977014 +0.014236269 +-0.021335533 +0.046865873 +-0.01775716 +-0.0044783223 +-0.0033919266 +-0.007547018 +-0.01194529 +0.016309801 +0.0020951412 +0.0047395923 +0.028161814 +0.01078026 +0.010857836 +0.03997342 +-0.010609531 +0.0021441027 +-0.014124784 +-0.012835444 +0.021731738 +0.006958652 +-0.01570548 +0.019619046 +0.003364398 +-0.010370175 +-0.019549401 +-6.520249e-05 +-0.008188454 +-0.0023034913 +0.0069962335 +0.012032563 +-0.024361301 +0.0009392695 +-0.00425573 +-0.027669325 +0.02594488 +-0.019061252 +-0.0015696619 +-0.008005342 +0.008434571 +0.012370633 +0.015855163 +0.025073763 +-0.012639437 +0.009303614 +0.018992996 +0.013360574 +0.007840845 +0.0072105997 +-0.007354295 +0.009263657 +-0.021171892 +-0.02500087 +-0.011339319 +0.0031587062 +-0.03234469 +-0.0031491742 +0.0013828378 +-0.01812297 +-0.0140215345 +-0.004408779 +-0.006046905 +-0.00234216 +-0.008899761 +-0.013359872 +0.0033352282 +0.033707075 +0.02391231 +-0.0034281157 +-0.0055970806 +-0.04162533 +-0.012563086 +0.014266348 +-0.008927861 +0.020006677 +-0.009306373 +-0.008172009 +-0.006324701 +0.029161327 +0.024945522 +0.0048592337 +-0.0063009798 +0.02081784 +0.010210069 +0.014946174 +-0.007615562 +0.011056239 +-0.034624353 +-0.026501719 +-0.038525246 +0.013980725 +-0.008050236 +-0.007998759 +-0.0018771808 +0.00088023674 +-0.0035509502 +0.0249706 +0.005919887 +0.00963784 +0.019308817 +-0.0110261515 +-0.01850951 +0.0118353525 +0.022066215 +-0.004783047 +0.009246358 +0.008439751 +0.005145027 +-0.008535919 +-0.013764603 +0.008164125 +-0.008770188 +-0.00029525554 +0.0005280975 +0.0045691207 +0.016902486 +-0.012415844 +0.016543185 +0.0374593 +0.00053203176 +0.011765578 +0.0015714726 +0.002142206 +-0.014649369 +-0.017530413 +-0.0063562617 +-0.026462728 +-0.0026448458 +0.011118673 +-0.017102975 +-0.015696751 +-0.008352852 +0.006317137 +-0.020316789 +0.017797355 +-0.012292649 +0.020082595 +-0.002596725 +-0.016874298 +-0.043141402 +-0.0027649747 +0.003932335 +0.0022182388 +-0.0021523882 +-0.003339111 +0.016122801 +0.009710838 +-0.00051830465 +-0.0062138615 +0.0012604861 +-0.012648565 +0.0032833167 +0.0024667974 +0.021446485 +0.0046449606 +-0.05695136 +-0.015335426 +0.017838117 +-0.0028545524 +0.0023637784 +-0.013946213 +-0.0073269596 +-0.013127303 +0.013321138 +0.008691455 +-0.0055632703 +-0.018483518 +0.014022525 +0.010255947 +0.007131381 +-0.0031622814 +0.005556688 +-0.023445284 +-0.0130625665 +-0.0023797157 +-0.0070118858 +-0.004729308 +0.0049304953 +-0.010402744 +-0.014919871 +0.0075993952 +-0.0130950725 +-0.020692775 +-0.0012291737 +0.003973567 +0.0027917132 +-0.008333724 +-0.033317473 +0.025924247 +-0.016413864 +0.06652051 +0.0061338046 +0.007816797 +0.0009054327 +0.0024531023 +0.01698561 +-0.00992235 +-0.004900013 +0.0040942477 +0.006820136 +-0.0053349324 +-0.0047262344 +-0.022716818 +-0.012135763 +0.010711039 +0.0036204965 +0.020620428 diff --git a/tools/para/fc2_b b/tools/para/fc2_b new file mode 100644 index 0000000..7525d74 --- /dev/null +++ b/tools/para/fc2_b @@ -0,0 +1,16 @@ +15 +-0.68187517 +-0.013023868 +-0.012667711 +0.12630615 +-0.24749278 +-0.4987089 +0.3616302 +0.23901181 +0.32909712 +-0.25681627 +0.21683879 +0.72209626 +-0.2969338 +0.35322607 +0.6401797 diff --git a/tools/para/fc2_w b/tools/para/fc2_w new file mode 100644 index 0000000..a47fff1 --- /dev/null +++ b/tools/para/fc2_w @@ -0,0 +1,902 @@ +60 +15 +0.023721257 +-0.056767184 +-0.02482725 +-0.056625195 +-0.013108621 +0.16314533 +-0.04853894 +-0.029597584 +-0.046683975 +-0.02246394 +-0.037572507 +-0.03316914 +0.17073579 +0.1816684 +-0.04529307 +-0.0248803 +-0.030885592 +-0.04743719 +0.10407687 +-0.027138393 +0.1133468 +-0.024212182 +-0.0057777944 +-0.05431293 +-0.02986296 +0.11789993 +-0.051923934 +0.09167429 +-0.045342486 +-0.043118663 +-0.098115616 +-0.006691878 +0.022823932 +0.016394816 +-0.0134537015 +-0.0060206857 +-0.008312101 +0.015749821 +0.016666552 +-0.007961423 +0.0130552165 +0.051745173 +0.086891346 +-0.061654568 +-0.022857342 +-0.045601845 +-0.024637094 +-0.025579434 +0.024080817 +-0.035525665 +0.084735304 +0.008145681 +-0.048479345 +-0.01107538 +0.0043653576 +-0.02404582 +-0.0046611303 +-0.018547907 +0.13898253 +-0.0071163056 +0.027239176 +0.019990532 +0.00575406 +0.067195065 +0.057361092 +-0.027234674 +0.0034042448 +0.07240855 +-0.014622719 +-0.021772297 +-0.018955652 +-0.016349709 +-0.033501316 +-0.012791992 +0.009489657 +-0.0040843496 +-0.06548852 +-0.0027336648 +-0.02771641 +0.003105313 +-0.022985559 +-0.027811378 +0.13901976 +-0.069822796 +-0.015901526 +-0.017430564 +0.008845486 +0.015278092 +-0.0567094 +0.1451618 +0.10175247 +-0.0145240985 +0.019893676 +0.00060109375 +0.0022912938 +0.07441637 +-0.044775177 +-0.02982467 +-0.0090249935 +0.015784694 +-0.0151947895 +-0.026377525 +0.07452386 +-0.057595294 +-0.033931956 +0.018042305 +-0.04521402 +-0.014217054 +0.010033828 +0.009846576 +0.0018628535 +-0.030086106 +-0.0017332508 +-0.005574078 +-0.00023017552 +-0.006606218 +0.13216685 +-0.010639397 +-0.026569739 +-0.04215086 +0.04924681 +-0.043633044 +0.1018429 +0.0021304227 +-0.056588713 +-0.058658466 +-0.059565447 +-0.042487074 +0.06225856 +-0.027270265 +0.0450222 +0.07110802 +0.049895298 +0.042784434 +0.05563622 +-0.050112586 +-0.047793083 +-0.06338001 +0.07364919 +-0.054492526 +0.08631582 +-0.036124628 +0.05227145 +-0.037520196 +-0.062319368 +0.08841054 +-0.032051668 +0.08331706 +-0.043635234 +0.04112745 +0.06212643 +0.007388739 +-0.020659756 +0.02230651 +0.086097695 +0.005100613 +-0.064036496 +0.017601727 +-0.05984531 +0.011942104 +0.008610117 +0.086421125 +-0.01637438 +-0.055868283 +-0.05516202 +-0.047032513 +0.121512815 +-0.05508921 +-0.012337177 +0.0035218787 +-0.022240747 +0.11666904 +-0.06353826 +0.060320225 +-0.047669224 +0.017966691 +-0.04024401 +-0.025529524 +0.069724366 +-0.053703915 +-0.034110505 +-0.029960383 +-0.06600948 +0.13501477 +-0.053031318 +0.012389384 +-0.022873297 +-0.009194736 +-0.029105553 +-0.045856915 +0.12856278 +-0.021943325 +0.010748578 +0.006589677 +0.003752689 +0.02887515 +0.10008096 +0.03216688 +-0.039296247 +-0.047470577 +-0.035232235 +0.08135979 +-0.04116884 +0.09727354 +0.044263303 +-0.05627888 +-0.018874492 +-0.07279877 +0.09413788 +-0.036279287 +-0.036115322 +0.083222285 +-0.035373613 +-0.002076556 +-0.034073725 +-0.058003467 +-0.011753285 +0.064566836 +0.1351894 +-0.018176533 +0.0045275176 +-0.0394347 +-0.053792067 +-0.060081203 +0.06741035 +0.06952082 +-0.070167564 +-0.11953224 +-0.093335666 +-0.092176 +-0.06279851 +-0.08698778 +-0.09178264 +0.06140479 +0.073674716 +0.060297325 +0.072911836 +0.07054657 +0.053970445 +0.06798171 +-0.013621602 +-0.011862524 +-0.02278563 +0.08397386 +-0.029510925 +-0.006828416 +0.008962611 +-0.0060842847 +0.057862744 +-0.014851122 +0.035502855 +-0.027666172 +-0.01099776 +-0.013816966 +-0.018422294 +-0.07163931 +0.011755499 +-0.016132606 +-0.06628269 +0.0060495273 +-0.004684206 +0.091115616 +0.07032679 +-0.022980448 +-0.027459152 +-0.04107013 +-0.005020775 +-0.0050464333 +0.036403414 +0.043938298 +0.004868387 +0.09904006 +0.07008151 +0.025196165 +-0.024412407 +-0.041503318 +-0.023655541 +-0.021237679 +0.0059536123 +0.07900436 +-0.066426545 +-0.058976896 +-0.042309746 +-0.0044052647 +0.011788804 +-0.06437558 +0.050667755 +0.003000085 +-0.026545258 +0.035834778 +0.02146158 +-0.025112923 +-0.013572935 +0.07372157 +-0.02082975 +-0.034076523 +0.05821599 +0.042366743 +-0.06394822 +-0.019507725 +0.07289588 +0.04123546 +-0.0401289 +-0.028429616 +-0.04741946 +-0.036297556 +0.024062768 +-0.03628923 +0.076255724 +-0.007795125 +0.012530167 +-0.026342789 +-0.029241074 +0.032052062 +-0.017812248 +0.02970647 +0.08998527 +-0.05396118 +0.023024661 +0.0052098245 +0.016553843 +-0.10519745 +0.037710346 +0.009732182 +-0.027681515 +-0.03822997 +-0.012670474 +0.07280391 +-0.029706435 +0.0014060438 +-0.030424576 +0.056327637 +-0.03691004 +0.100075796 +0.059969947 +-0.009466309 +-0.04053178 +-0.07394839 +0.017282715 +-0.038851976 +0.07533885 +0.022888316 +-0.005222714 +-0.051790617 +-0.039949816 +0.045010787 +-0.05255461 +0.028021902 +-0.051901788 +0.030317541 +-0.016183384 +-0.000669922 +0.06513011 +-0.07717841 +-0.020836962 +-0.012460537 +0.002608653 +0.015867954 +0.05845073 +-0.0021784795 +0.07890689 +-0.022973057 +0.092426814 +-0.054843165 +0.044392575 +-0.021421066 +-0.094741575 +-0.065930516 +-0.022157872 +0.12326591 +0.014883588 +0.026948972 +-0.016465168 +-0.064375505 +-0.023275383 +-0.0070997463 +-0.033101372 +0.09446811 +0.10115626 +-0.04225017 +-0.0007481162 +-0.056021266 +-0.04811929 +-0.051491253 +0.068353504 +0.08718989 +-0.05749272 +-0.010089683 +-0.046433568 +-0.016778694 +-0.025272565 +-0.013132711 +-0.039840337 +-0.02110915 +-0.03557828 +-0.0014030484 +0.01924547 +0.0789074 +0.06009254 +-0.025958415 +0.020134918 +-0.03148343 +-0.009884057 +0.0061013266 +0.08806658 +0.0656854 +0.009727492 +-0.03322069 +-0.019033067 +0.0035772354 +-0.02508404 +0.007561759 +-0.03869725 +0.06390332 +0.026551774 +0.050207905 +-0.043208126 +-0.019934112 +0.06602689 +-0.02860308 +-0.0115318475 +-0.050741002 +-0.012525999 +-0.03984677 +0.025553342 +-0.007472711 +-0.03354731 +0.120088056 +-0.049436986 +-0.020271834 +-0.036656402 +0.01050952 +-0.040384356 +-0.013354367 +0.15239534 +0.061574545 +-0.0038912655 +0.0015946868 +-0.0033184527 +0.0044296803 +-0.026376294 +-0.02409796 +-0.033598542 +-0.038278487 +0.0022965355 +0.032300834 +0.013073122 +-0.016868252 +0.030710598 +0.042514037 +-0.017287938 +-0.052982263 +-0.0025038382 +0.04258102 +-0.037782636 +0.08912471 +-0.041155506 +-0.020055389 +-0.036539547 +-0.008155307 +0.095901586 +-0.045066398 +0.07589279 +-0.0008031097 +-0.042826444 +-0.066662736 +0.035725113 +0.07053888 +-0.003361896 +0.010324781 +0.057961073 +-0.060475152 +-0.059718084 +-0.011133738 +0.038670868 +0.0045008264 +0.00011081969 +0.011725977 +-0.06017393 +-0.037521508 +-0.041834593 +-0.018241858 +0.016014917 +-0.022131182 +0.09944455 +-0.053095143 +-0.00742253 +-0.03147508 +0.018483965 +0.00743996 +-0.026868168 +0.121405125 +-0.030068455 +-0.020201726 +-0.025969878 +0.04350136 +-0.0021948342 +0.06245924 +0.027152391 +-0.00056066626 +-0.009253849 +0.012065811 +-0.018439502 +-0.010880174 +0.058823567 +0.011996477 +-0.040978447 +-0.011799242 +-0.0050421795 +-0.0367865 +0.047042668 +-0.12227256 +0.031531557 +0.008638815 +-0.021561243 +-0.02409996 +0.08065916 +-0.03862787 +-0.069201544 +0.035517152 +0.025776947 +-0.019695587 +-0.00736174 +0.097198814 +-0.0031088917 +0.0056593325 +-0.06007171 +-0.035134632 +0.028565645 +-0.012346341 +-0.022452231 +0.14388211 +-0.016372552 +-0.026357366 +-0.011106448 +0.0031650758 +-0.010229361 +-0.025584642 +0.07345942 +-0.024771154 +-0.036477014 +-0.06983555 +0.06293779 +0.10976889 +0.016566912 +-0.03319916 +-0.03126182 +-0.042317595 +-0.029041866 +0.05726187 +0.11515596 +-0.0073280144 +-0.025612779 +-0.01186883 +-0.046921965 +-0.011384405 +0.13430771 +-0.025325155 +-0.027509108 +-0.008541601 +-0.044411432 +0.0004181579 +-0.037252396 +0.12108238 +-0.007830119 +-0.020841695 +-0.0061824056 +-0.0424927 +-0.014388491 +-0.0126006035 +0.026058633 +0.07131681 +-0.03908185 +-0.0034570813 +0.011785356 +0.006566377 +-0.07555411 +0.024073388 +0.11404315 +-0.052582927 +-0.01964203 +0.012207591 +0.003144945 +-0.08745947 +0.020775186 +-0.0035174368 +-0.008068929 +-0.020500282 +0.058456566 +0.030612053 +-0.022996115 +-0.02936319 +-0.030847497 +0.021455627 +-0.059063505 +0.05697014 +0.010187005 +0.06089469 +-0.04353769 +-0.009652151 +0.03238445 +-0.0010035908 +-0.052168515 +-0.029284708 +0.003263534 +-0.044448454 +-0.052631732 +-0.07391317 +0.038685244 +0.036219478 +0.035986923 +-0.0010210739 +0.04722957 +0.022612667 +0.06024814 +0.06373478 +0.05212275 +0.048431445 +0.069127135 +0.05499899 +0.052656386 +0.05041688 +0.014507067 +-0.06100631 +-0.10755678 +-0.10481951 +-0.090853445 +-0.021902813 +-0.08386116 +0.006706923 +-0.0064033153 +-0.012173957 +-0.0036868856 +0.095132016 +-0.021994542 +-0.004649494 +-0.026794076 +-0.01632169 +-0.010126181 +-0.01677234 +-0.013022024 +-0.005384277 +-0.0054797633 +0.00015999126 +0.013708873 +0.09010221 +0.11247074 +0.0702876 +0.07355304 +0.07295774 +0.09754597 +0.079869345 +0.11162802 +-0.09146599 +-0.06617916 +-0.05427548 +0.012102348 +-0.11461164 +-0.1239081 +-0.09864961 +0.08521436 +-0.0010414277 +0.024066186 +0.042577848 +0.06795371 +0.0033148052 +-0.04981378 +-0.002585282 +-0.0003937899 +-0.003339654 +0.008448152 +-0.035717778 +-0.021917287 +-0.020991681 +-0.016192002 +0.03761725 +0.034530357 +-0.06626378 +0.0014098238 +-0.076238416 +0.029416975 +0.018664703 +0.03343811 +0.038841713 +-0.05282685 +-0.008477915 +-0.050246432 +0.04036034 +0.03782437 +0.04491213 +0.0031788559 +0.026595125 +0.05203974 +-0.011356884 +0.043487385 +-0.055312343 +0.03458062 +0.040055893 +-0.039015166 +-0.022881871 +0.0063166018 +-0.038738396 +0.00589617 +-0.020359939 +-0.012527778 +0.064004995 +0.010790943 +-0.01802895 +-0.056990944 +-0.051393062 +-0.023789257 +0.0030616294 +0.051064275 +0.04010207 +0.03371209 +0.060095347 +0.015607021 +0.010104986 +0.020415762 +0.0019168631 +0.04336732 +-0.039259564 +0.055087548 +0.025899537 +0.018325731 +-0.031002747 +-0.033109486 +-0.035237692 +-0.060989216 +0.055961084 +0.02822797 +0.027010137 +-0.025959654 +-0.035303224 +-0.039628804 +-0.05582998 +-0.03959532 +0.1256905 +-0.027060708 +-0.05580327 +-0.03622858 +0.12780237 +-0.018839851 +-0.03447354 +0.08838121 +-0.03136378 +-0.05799618 +-0.023935076 +0.078720175 +-0.02881707 +0.00847261 +-0.02233137 +-0.013755523 +0.014816273 +0.004065502 +0.11188121 +-0.014230934 +-0.0056429356 +-0.0045665978 +-0.00498333 +-0.012701793 +-0.0019023885 +-0.030901533 +-0.007683906 +-0.020062435 +-0.04124341 +0.024057284 +-0.09335823 +-0.03777578 +-0.014056007 +-0.008580212 +0.11240235 +0.002323658 +0.016537955 +-0.07825424 +-0.016088892 +-0.025930585 +0.027807685 +0.1700214 +-0.019626008 +-0.07721867 +-0.04162061 +0.052601207 +0.02577326 +-0.040874712 +-0.03728593 +-0.012193351 +0.13011028 +-0.041224383 +0.057561 +-0.010276193 +-0.024530202 +-0.03962346 +-0.040800393 +0.13106227 +-0.02382709 +-0.06445572 +0.1744702 +-0.047365215 +-0.0107749 +0.017781138 +0.05427503 +-0.04871042 +-0.010184613 +0.14689082 +-0.06170824 +-0.040328942 +-0.050108895 +0.07433148 +-0.035749625 +-0.05033758 +-0.034158345 +-0.01407411 +-0.03855565 +0.118630916 +0.015975745 +-0.025617888 +-0.027871372 +0.020677658 +-0.060416315 +-0.011996592 +0.15613428 +-0.039205384 +-0.017144002 +-0.016228413 +0.01726939 +0.11926382 +-0.029930148 +-0.015833873 +-0.036014646 +-0.021936195 +-0.027379872 +-0.006858447 +0.036611702 +-0.06453845 +0.017900916 +-0.017864183 +0.016977126 +0.00013984025 +-0.011365406 +-0.02641995 +0.05642642 +-0.02021149 +-0.016630339 +0.024355782 +-0.014129852 +0.103316136 +-0.041531242 +-0.00224662 +-0.026749535 +-0.01905401 +0.0026879937 +-0.008229434 +0.017593939 +-0.018483022 +0.019348662 +-0.056839425 +0.043575108 +0.07768085 +0.030608702 +-0.05727275 +0.10484878 +-0.06496533 +-0.05744542 +0.05217385 +0.011118693 +-0.008622026 +-0.02919702 +0.031088505 +-0.051129196 +0.027191278 +-0.048688192 +0.04744573 +-0.054880034 +0.07251054 +0.017558554 +-0.06281788 +0.0071332487 +-0.05200442 +0.08113713 +-0.043849833 +0.07000845 +-0.003035843 +-0.035914857 +-0.0068447613 +0.029527344 +-0.060751688 +-0.022351053 +-0.025395205 +0.033314105 +0.09969347 +-0.03596114 +0.007367574 +-0.07811931 +-0.015391812 +-0.010692302 +0.02191812 +0.06635398 +-0.04495509 +0.0008100525 diff --git a/tools/tty-permission.sh b/tools/tty-permission.sh new file mode 100644 index 0000000..82f3653 --- /dev/null +++ b/tools/tty-permission.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +sudo touch /etc/udev/rules.d/70-ttyusb.rules