diff --git a/Prj-iOS/.DS_Store b/Prj-iOS/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..7220b51f8a19560bdce4c76ece76576dfa532891
Binary files /dev/null and b/Prj-iOS/.DS_Store differ
diff --git a/Prj-iOS/lpr/.gitignore b/Prj-iOS/lpr/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ec9e31b38385b5707cfe31929e44c80b687329e0
--- /dev/null
+++ b/Prj-iOS/lpr/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+Pods/
+.clang-format
diff --git a/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.43.44 PM.png b/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.43.44 PM.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f5befc6fd1a605e60a3b891665f6a875fc129da
Binary files /dev/null and b/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.43.44 PM.png differ
diff --git a/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.43.53 PM.png b/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.43.53 PM.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6028ea3da359916f7519a1330642c820be92165
Binary files /dev/null and b/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.43.53 PM.png differ
diff --git a/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.44.04 PM.png b/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.44.04 PM.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3fa0387ca548dd72c97f607463a4cd30a0ffa99
Binary files /dev/null and b/Prj-iOS/lpr/DemoImage/Screen Shot 2018-10-26 at 3.44.04 PM.png differ
diff --git a/Prj-iOS/lpr/Podfile b/Prj-iOS/lpr/Podfile
new file mode 100644
index 0000000000000000000000000000000000000000..00459e4aceb86564aa2a76ae49c0675b50bbc268
--- /dev/null
+++ b/Prj-iOS/lpr/Podfile
@@ -0,0 +1,8 @@
+platform :ios, '10.1'
+
+target "lpr" do
+
+pod 'OpenCV', '~> 3.4.2'
+pod 'Masonry'
+
+end
diff --git a/Prj-iOS/lpr/Podfile.lock b/Prj-iOS/lpr/Podfile.lock
new file mode 100644
index 0000000000000000000000000000000000000000..e4511f28049dc7428c9a67366b13e10cca4a6707
--- /dev/null
+++ b/Prj-iOS/lpr/Podfile.lock
@@ -0,0 +1,20 @@
+PODS:
+ - Masonry (1.1.0)
+ - OpenCV (3.4.2)
+
+DEPENDENCIES:
+ - Masonry
+ - OpenCV (~> 3.4.2)
+
+SPEC REPOS:
+ https://github.com/cocoapods/specs.git:
+ - Masonry
+ - OpenCV
+
+SPEC CHECKSUMS:
+ Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
+ OpenCV: 452909747854c92e0f59670961ed5131f5286cb5
+
+PODFILE CHECKSUM: 94db02cda76a5ac6371a03e6e2ca4e9035fc0da6
+
+COCOAPODS: 1.5.3
diff --git a/Prj-iOS/lpr/README.md b/Prj-iOS/lpr/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..404c6179fb4fedd1e9e9c1023c93b143c685634d
--- /dev/null
+++ b/Prj-iOS/lpr/README.md
@@ -0,0 +1,4 @@
+
+Depency Library:
+- Masonry, 1.1.0
+- OpenCV, 3.4.2
diff --git a/Prj-iOS/lpr/Resource/CharacterRecognization.caffemodel b/Prj-iOS/lpr/Resource/CharacterRecognization.caffemodel
new file mode 100644
index 0000000000000000000000000000000000000000..d4244088f12e979783e7615eb30647fed24fa6f4
Binary files /dev/null and b/Prj-iOS/lpr/Resource/CharacterRecognization.caffemodel differ
diff --git a/Prj-iOS/lpr/Resource/CharacterRecognization.prototxt b/Prj-iOS/lpr/Resource/CharacterRecognization.prototxt
new file mode 100644
index 0000000000000000000000000000000000000000..91aa29e21a31ec86cb9298d146bf102f07662009
--- /dev/null
+++ b/Prj-iOS/lpr/Resource/CharacterRecognization.prototxt
@@ -0,0 +1,123 @@
+input: "data"
+input_dim: 1
+input_dim: 1
+input_dim: 30
+input_dim: 14
+layer {
+ name: "conv2d_1"
+ type: "Convolution"
+ bottom: "data"
+ top: "conv2d_1"
+ convolution_param {
+ num_output: 32
+ bias_term: true
+ pad: 0
+ kernel_size: 3
+ stride: 1
+ }
+}
+layer {
+ name: "activation_1"
+ type: "ReLU"
+ bottom: "conv2d_1"
+ top: "activation_1"
+}
+layer {
+ name: "max_pooling2d_1"
+ type: "Pooling"
+ bottom: "activation_1"
+ top: "max_pooling2d_1"
+ pooling_param {
+ pool: MAX
+ kernel_size: 2
+ stride: 2
+ pad: 0
+ }
+}
+layer {
+ name: "conv2d_2"
+ type: "Convolution"
+ bottom: "max_pooling2d_1"
+ top: "conv2d_2"
+ convolution_param {
+ num_output: 64
+ bias_term: true
+ pad: 0
+ kernel_size: 3
+ stride: 1
+ }
+}
+layer {
+ name: "activation_2"
+ type: "ReLU"
+ bottom: "conv2d_2"
+ top: "activation_2"
+}
+layer {
+ name: "max_pooling2d_2"
+ type: "Pooling"
+ bottom: "activation_2"
+ top: "max_pooling2d_2"
+ pooling_param {
+ pool: MAX
+ kernel_size: 2
+ stride: 2
+ pad: 0
+ }
+}
+layer {
+ name: "conv2d_3"
+ type: "Convolution"
+ bottom: "max_pooling2d_2"
+ top: "conv2d_3"
+ convolution_param {
+ num_output: 128
+ bias_term: true
+ pad: 0
+ kernel_size: 2
+ stride: 1
+ }
+}
+layer {
+ name: "activation_3"
+ type: "ReLU"
+ bottom: "conv2d_3"
+ top: "activation_3"
+}
+layer {
+ name: "flatten_1"
+ type: "Flatten"
+ bottom: "activation_3"
+ top: "flatten_1"
+}
+layer {
+ name: "dense_1"
+ type: "InnerProduct"
+ bottom: "flatten_1"
+ top: "dense_1"
+ inner_product_param {
+ num_output: 256
+ }
+}
+layer {
+ name: "relu2"
+ type: "ReLU"
+ bottom: "dense_1"
+ top: "relu2"
+}
+layer {
+ name: "dense2"
+ type: "InnerProduct"
+ bottom: "relu2"
+ top: "dense2"
+ inner_product_param {
+ num_output: 65
+ }
+}
+
+layer {
+ name: "prob"
+ type: "Softmax"
+ bottom: "dense2"
+ top: "prob"
+}
\ No newline at end of file
diff --git a/Prj-iOS/lpr/Resource/HorizonalFinemapping.caffemodel b/Prj-iOS/lpr/Resource/HorizonalFinemapping.caffemodel
new file mode 100644
index 0000000000000000000000000000000000000000..1af586370b444ed3ed07c311c0acfb1b1bee041c
Binary files /dev/null and b/Prj-iOS/lpr/Resource/HorizonalFinemapping.caffemodel differ
diff --git a/Prj-iOS/lpr/Resource/HorizonalFinemapping.prototxt b/Prj-iOS/lpr/Resource/HorizonalFinemapping.prototxt
new file mode 100644
index 0000000000000000000000000000000000000000..21726dd3feee5ccfd47ca900e80118b5258fa6d2
--- /dev/null
+++ b/Prj-iOS/lpr/Resource/HorizonalFinemapping.prototxt
@@ -0,0 +1,95 @@
+input: "data"
+input_dim: 1
+input_dim: 3
+input_dim: 16
+input_dim: 66
+layer {
+ name: "conv1"
+ type: "Convolution"
+ bottom: "data"
+ top: "conv1"
+ convolution_param {
+ num_output: 10
+ bias_term: true
+ pad: 0
+ kernel_size: 3
+ stride: 1
+ }
+}
+layer {
+ name: "relu1"
+ type: "ReLU"
+ bottom: "conv1"
+ top: "conv1"
+}
+layer {
+ name: "max_pooling2d_3"
+ type: "Pooling"
+ bottom: "conv1"
+ top: "max_pooling2d_3"
+ pooling_param {
+ pool: MAX
+ kernel_size: 2
+ stride: 2
+ pad: 0
+ }
+}
+layer {
+ name: "conv2"
+ type: "Convolution"
+ bottom: "max_pooling2d_3"
+ top: "conv2"
+ convolution_param {
+ num_output: 16
+ bias_term: true
+ pad: 0
+ kernel_size: 3
+ stride: 1
+ }
+}
+layer {
+ name: "relu2"
+ type: "ReLU"
+ bottom: "conv2"
+ top: "conv2"
+}
+layer {
+ name: "conv3"
+ type: "Convolution"
+ bottom: "conv2"
+ top: "conv3"
+ convolution_param {
+ num_output: 32
+ bias_term: true
+ pad: 0
+ kernel_size: 3
+ stride: 1
+ }
+}
+layer {
+ name: "relu3"
+ type: "ReLU"
+ bottom: "conv3"
+ top: "conv3"
+}
+layer {
+ name: "flatten_2"
+ type: "Flatten"
+ bottom: "conv3"
+ top: "flatten_2"
+}
+layer {
+ name: "dense"
+ type: "InnerProduct"
+ bottom: "flatten_2"
+ top: "dense"
+ inner_product_param {
+ num_output: 2
+ }
+}
+layer {
+ name: "relu4"
+ type: "ReLU"
+ bottom: "dense"
+ top: "dense"
+}
diff --git a/Prj-iOS/lpr/Resource/SegmenationFree-Inception.caffemodel b/Prj-iOS/lpr/Resource/SegmenationFree-Inception.caffemodel
new file mode 100644
index 0000000000000000000000000000000000000000..311ee178bfe293a2b8e8c6d99824b99ca834d99d
Binary files /dev/null and b/Prj-iOS/lpr/Resource/SegmenationFree-Inception.caffemodel differ
diff --git a/Prj-iOS/lpr/Resource/SegmenationFree-Inception.prototxt b/Prj-iOS/lpr/Resource/SegmenationFree-Inception.prototxt
new file mode 100644
index 0000000000000000000000000000000000000000..8419763937dd0323d1d7357cc4c10bfd195ff5a2
--- /dev/null
+++ b/Prj-iOS/lpr/Resource/SegmenationFree-Inception.prototxt
@@ -0,0 +1,454 @@
+input: "data"
+input_dim: 1
+input_dim: 3
+input_dim: 160
+input_dim: 40
+layer {
+ name: "conv0"
+ type: "Convolution"
+ bottom: "data"
+ top: "conv0"
+ convolution_param {
+ num_output: 32
+ bias_term: true
+ pad_h: 1
+ pad_w: 1
+ kernel_h: 3
+ kernel_w: 3
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "bn0"
+ type: "BatchNorm"
+ bottom: "conv0"
+ top: "bn0"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "bn0_scale"
+ type: "Scale"
+ bottom: "bn0"
+ top: "bn0"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "relu0"
+ type: "ReLU"
+ bottom: "bn0"
+ top: "bn0"
+}
+layer {
+ name: "pool0"
+ type: "Pooling"
+ bottom: "bn0"
+ top: "pool0"
+ pooling_param {
+ pool: MAX
+ kernel_h: 2
+ kernel_w: 2
+ stride_h: 2
+ stride_w: 2
+ pad_h: 0
+ pad_w: 0
+ }
+}
+layer {
+ name: "conv1"
+ type: "Convolution"
+ bottom: "pool0"
+ top: "conv1"
+ convolution_param {
+ num_output: 64
+ bias_term: true
+ pad_h: 1
+ pad_w: 1
+ kernel_h: 3
+ kernel_w: 3
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "bn1"
+ type: "BatchNorm"
+ bottom: "conv1"
+ top: "bn1"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "bn1_scale"
+ type: "Scale"
+ bottom: "bn1"
+ top: "bn1"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "relu1"
+ type: "ReLU"
+ bottom: "bn1"
+ top: "bn1"
+}
+layer {
+ name: "pool1"
+ type: "Pooling"
+ bottom: "bn1"
+ top: "pool1"
+ pooling_param {
+ pool: MAX
+ kernel_h: 2
+ kernel_w: 2
+ stride_h: 2
+ stride_w: 2
+ pad_h: 0
+ pad_w: 0
+ }
+}
+layer {
+ name: "conv2"
+ type: "Convolution"
+ bottom: "pool1"
+ top: "conv2"
+ convolution_param {
+ num_output: 128
+ bias_term: true
+ pad_h: 1
+ pad_w: 1
+ kernel_h: 3
+ kernel_w: 3
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "bn2"
+ type: "BatchNorm"
+ bottom: "conv2"
+ top: "bn2"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "bn2_scale"
+ type: "Scale"
+ bottom: "bn2"
+ top: "bn2"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "relu2"
+ type: "ReLU"
+ bottom: "bn2"
+ top: "bn2"
+}
+layer {
+ name: "pool2"
+ type: "Pooling"
+ bottom: "bn2"
+ top: "pool2"
+ pooling_param {
+ pool: MAX
+ kernel_h: 2
+ kernel_w: 2
+ stride_h: 2
+ stride_w: 2
+ pad_h: 0
+ pad_w: 0
+ }
+}
+layer {
+ name: "conv2d_1"
+ type: "Convolution"
+ bottom: "pool2"
+ top: "conv2d_1"
+ convolution_param {
+ num_output: 256
+ bias_term: true
+ pad_h: 0
+ pad_w: 0
+ kernel_h: 1
+ kernel_w: 5
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "batch_normalization_1"
+ type: "BatchNorm"
+ bottom: "conv2d_1"
+ top: "batch_normalization_1"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "batch_normalization_1_scale"
+ type: "Scale"
+ bottom: "batch_normalization_1"
+ top: "batch_normalization_1"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "activation_1"
+ type: "ReLU"
+ bottom: "batch_normalization_1"
+ top: "batch_normalization_1"
+}
+layer {
+ name: "conv2d_2"
+ type: "Convolution"
+ bottom: "batch_normalization_1"
+ top: "conv2d_2"
+ convolution_param {
+ num_output: 256
+ bias_term: true
+ pad_h: 3
+ pad_w: 0
+ kernel_h: 7
+ kernel_w: 1
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "conv2d_3"
+ type: "Convolution"
+ bottom: "batch_normalization_1"
+ top: "conv2d_3"
+ convolution_param {
+ num_output: 256
+ bias_term: true
+ pad_h: 2
+ pad_w: 0
+ kernel_h: 5
+ kernel_w: 1
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "conv2d_4"
+ type: "Convolution"
+ bottom: "batch_normalization_1"
+ top: "conv2d_4"
+ convolution_param {
+ num_output: 256
+ bias_term: true
+ pad_h: 1
+ pad_w: 0
+ kernel_h: 3
+ kernel_w: 1
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "conv2d_5"
+ type: "Convolution"
+ bottom: "batch_normalization_1"
+ top: "conv2d_5"
+ convolution_param {
+ num_output: 256
+ bias_term: true
+ pad_h: 0
+ pad_w: 0
+ kernel_h: 1
+ kernel_w: 1
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "batch_normalization_2"
+ type: "BatchNorm"
+ bottom: "conv2d_2"
+ top: "batch_normalization_2"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "batch_normalization_2_scale"
+ type: "Scale"
+ bottom: "batch_normalization_2"
+ top: "batch_normalization_2"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "batch_normalization_3"
+ type: "BatchNorm"
+ bottom: "conv2d_3"
+ top: "batch_normalization_3"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "batch_normalization_3_scale"
+ type: "Scale"
+ bottom: "batch_normalization_3"
+ top: "batch_normalization_3"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "batch_normalization_4"
+ type: "BatchNorm"
+ bottom: "conv2d_4"
+ top: "batch_normalization_4"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "batch_normalization_4_scale"
+ type: "Scale"
+ bottom: "batch_normalization_4"
+ top: "batch_normalization_4"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "batch_normalization_5"
+ type: "BatchNorm"
+ bottom: "conv2d_5"
+ top: "batch_normalization_5"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "batch_normalization_5_scale"
+ type: "Scale"
+ bottom: "batch_normalization_5"
+ top: "batch_normalization_5"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "activation_2"
+ type: "ReLU"
+ bottom: "batch_normalization_2"
+ top: "batch_normalization_2"
+}
+layer {
+ name: "activation_3"
+ type: "ReLU"
+ bottom: "batch_normalization_3"
+ top: "batch_normalization_3"
+}
+layer {
+ name: "activation_4"
+ type: "ReLU"
+ bottom: "batch_normalization_4"
+ top: "batch_normalization_4"
+}
+layer {
+ name: "activation_5"
+ type: "ReLU"
+ bottom: "batch_normalization_5"
+ top: "batch_normalization_5"
+}
+layer {
+ name: "concatenate_1"
+ type: "Concat"
+ bottom: "batch_normalization_2"
+ bottom: "batch_normalization_3"
+ bottom: "batch_normalization_4"
+ bottom: "batch_normalization_5"
+ top: "concatenate_1"
+ concat_param {
+ axis: 1
+ }
+}
+layer {
+ name: "conv_1024_11"
+ type: "Convolution"
+ bottom: "concatenate_1"
+ top: "conv_1024_11"
+ convolution_param {
+ num_output: 1024
+ bias_term: true
+ pad_h: 0
+ pad_w: 0
+ kernel_h: 1
+ kernel_w: 1
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "batch_normalization_6"
+ type: "BatchNorm"
+ bottom: "conv_1024_11"
+ top: "batch_normalization_6"
+ batch_norm_param {
+ moving_average_fraction: 0.99
+ eps: 0.001
+ }
+}
+layer {
+ name: "batch_normalization_6_scale"
+ type: "Scale"
+ bottom: "batch_normalization_6"
+ top: "batch_normalization_6"
+ scale_param {
+ bias_term: true
+ }
+}
+layer {
+ name: "activation_6"
+ type: "ReLU"
+ bottom: "batch_normalization_6"
+ top: "batch_normalization_6"
+}
+layer {
+ name: "conv_class_11"
+ type: "Convolution"
+ bottom: "batch_normalization_6"
+ top: "conv_class_11"
+ convolution_param {
+ num_output: 84
+ bias_term: true
+ pad_h: 0
+ pad_w: 0
+ kernel_h: 1
+ kernel_w: 1
+ stride_h: 1
+ stride_w: 1
+ }
+}
+layer {
+ name: "prob"
+ type: "Softmax"
+ bottom: "conv_class_11"
+ top: "prob"
+}
+
diff --git a/Prj-iOS/lpr/Resource/Segmentation.caffemodel b/Prj-iOS/lpr/Resource/Segmentation.caffemodel
new file mode 100644
index 0000000000000000000000000000000000000000..208269d729fd166204994eefbcdc7788e132f710
Binary files /dev/null and b/Prj-iOS/lpr/Resource/Segmentation.caffemodel differ
diff --git a/Prj-iOS/lpr/Resource/Segmentation.prototxt b/Prj-iOS/lpr/Resource/Segmentation.prototxt
new file mode 100644
index 0000000000000000000000000000000000000000..45c68295031f458dc33a177ff4533a5810e8e886
--- /dev/null
+++ b/Prj-iOS/lpr/Resource/Segmentation.prototxt
@@ -0,0 +1,114 @@
+input: "data"
+input_dim: 1
+input_dim: 1
+input_dim: 22
+input_dim: 22
+layer {
+ name: "conv2d_12"
+ type: "Convolution"
+ bottom: "data"
+ top: "conv2d_12"
+ convolution_param {
+ num_output: 16
+ bias_term: true
+ pad: 0
+ kernel_size: 3
+ stride: 1
+ }
+}
+layer {
+ name: "activation_18"
+ type: "ReLU"
+ bottom: "conv2d_12"
+ top: "activation_18"
+}
+layer {
+ name: "max_pooling2d_10"
+ type: "Pooling"
+ bottom: "activation_18"
+ top: "max_pooling2d_10"
+ pooling_param {
+ pool: MAX
+ kernel_size: 2
+ stride: 2
+ pad: 0
+ }
+}
+layer {
+ name: "conv2d_13"
+ type: "Convolution"
+ bottom: "max_pooling2d_10"
+ top: "conv2d_13"
+ convolution_param {
+ num_output: 16
+ bias_term: true
+ pad: 0
+ kernel_size: 3
+ stride: 1
+ }
+}
+layer {
+ name: "activation_19"
+ type: "ReLU"
+ bottom: "conv2d_13"
+ top: "activation_19"
+}
+layer {
+ name: "max_pooling2d_11"
+ type: "Pooling"
+ bottom: "activation_19"
+ top: "max_pooling2d_11"
+ pooling_param {
+ pool: MAX
+ kernel_size: 2
+ stride: 2
+ pad: 0
+ }
+}
+layer {
+ name: "flatten_6"
+ type: "Flatten"
+ bottom: "max_pooling2d_11"
+ top: "flatten_6"
+}
+layer {
+ name: "dense_9"
+ type: "InnerProduct"
+ bottom: "flatten_6"
+ top: "dense_9"
+ inner_product_param {
+ num_output: 256
+ }
+}
+layer {
+ name: "dropout_9"
+ type: "Dropout"
+ bottom: "dense_9"
+ top: "dropout_9"
+ dropout_param {
+ dropout_ratio: 0.5
+ }
+}
+layer {
+ name: "activation_20"
+ type: "ReLU"
+ bottom: "dropout_9"
+ top: "activation_20"
+}
+layer {
+ name: "dense_10"
+ type: "InnerProduct"
+ bottom: "activation_20"
+ top: "dense_10"
+ inner_product_param {
+ num_output: 3
+ }
+}
+
+
+ layer {
+ name: "prob"
+ type: "Softmax"
+ bottom: "dense_10"
+ top: "prob"
+}
\ No newline at end of file
diff --git a/Prj-iOS/lpr/Resource/cascade.xml b/Prj-iOS/lpr/Resource/cascade.xml
new file mode 100644
index 0000000000000000000000000000000000000000..277775b0c60cc31ce06976fe8489922364688a04
--- /dev/null
+++ b/Prj-iOS/lpr/Resource/cascade.xml
@@ -0,0 +1,12117 @@
+
+
+
+ BOOST
+ HAAR
+ 13
+ 51
+
+ GAB
+ 9.9900001287460327e-001
+ 5.0000000000000000e-001
+ 9.4999999999999996e-001
+ 1
+ 100
+
+ 0
+ 1
+ ALL
+ 20
+
+
+ <_>
+ 8
+ -1.9158077239990234e+000
+
+ <_>
+
+ 0 -1 344 -8.1478752195835114e-002
+
+ 6.2639594078063965e-001 -8.1564724445343018e-001
+ <_>
+
+ 0 -1 701 -1.2957378290593624e-002
+
+ 7.7114331722259521e-001 -4.9504086375236511e-001
+ <_>
+
+ 0 -1 687 -9.2470366507768631e-003
+
+ 8.1202191114425659e-001 -2.8070560097694397e-001
+ <_>
+
+ 0 -1 614 1.2374955229461193e-002
+
+ -2.5367051362991333e-001 7.3795551061630249e-001
+ <_>
+
+ 0 -1 299 -4.7858944162726402e-003
+
+ 7.1150565147399902e-001 -3.0462509393692017e-001
+ <_>
+
+ 0 -1 297 3.8920845836400986e-003
+
+ -2.8375166654586792e-001 7.3174893856048584e-001
+ <_>
+
+ 0 -1 814 -8.8258963078260422e-003
+
+ 7.5333666801452637e-001 -1.9880458712577820e-001
+ <_>
+
+ 0 -1 845 -6.7375516518950462e-003
+
+ 7.5299704074859619e-001 -2.3570337891578674e-001
+
+ <_>
+ 12
+ -2.2599112987518311e+000
+
+ <_>
+
+ 0 -1 577 -1.4449171721935272e-002
+
+ 5.5890566110610962e-001 -7.6307392120361328e-001
+ <_>
+
+ 0 -1 364 -3.8289055228233337e-002
+
+ 5.1702296733856201e-001 -5.7946079969406128e-001
+ <_>
+
+ 0 -1 124 -1.4895259402692318e-002
+
+ 6.1277741193771362e-001 -3.2827928662300110e-001
+ <_>
+
+ 0 -1 579 8.3044255152344704e-003
+
+ -3.3253005146980286e-001 7.2171914577484131e-001
+ <_>
+
+ 0 -1 314 6.0594235546886921e-003
+
+ -3.2760250568389893e-001 4.9508789181709290e-001
+ <_>
+
+ 0 -1 699 -6.8011749535799026e-003
+
+ 6.6238498687744141e-001 -2.4112002551555634e-001
+ <_>
+
+ 0 -1 295 -1.1183910071849823e-002
+
+ 7.1757602691650391e-001 -2.0989039540290833e-001
+ <_>
+
+ 0 -1 767 1.3139605522155762e-002
+
+ -1.8845251202583313e-001 6.7252415418624878e-001
+ <_>
+
+ 0 -1 689 -6.1739999800920486e-003
+
+ 6.3675141334533691e-001 -2.4877758324146271e-001
+ <_>
+
+ 0 -1 230 -9.2421043664216995e-003
+
+ 6.5140277147293091e-001 -2.1352872252464294e-001
+ <_>
+
+ 0 -1 48 -1.0526084899902344e-001
+
+ -9.0194213390350342e-001 1.8239501118659973e-001
+ <_>
+
+ 0 -1 281 1.2764739990234375e-001
+
+ 1.6771897673606873e-001 -7.7668786048889160e-001
+
+ <_>
+ 14
+ -2.6526770591735840e+000
+
+ <_>
+
+ 0 -1 829 -1.3842798769474030e-002
+
+ 4.1735208034515381e-001 -7.4295550584793091e-001
+ <_>
+
+ 0 -1 97 1.4765590429306030e-002
+
+ -5.1845699548721313e-001 5.0078016519546509e-001
+ <_>
+
+ 0 -1 21 3.1671046745032072e-003
+
+ -3.2739469408988953e-001 5.1253867149353027e-001
+ <_>
+
+ 0 -1 812 -9.5202140510082245e-003
+
+ 7.1236211061477661e-001 -2.3344238102436066e-001
+ <_>
+
+ 0 -1 703 -1.2149499729275703e-002
+
+ 6.4311891794204712e-001 -2.5991156697273254e-001
+ <_>
+
+ 0 -1 385 -1.0172967612743378e-001
+
+ -7.3093742132186890e-001 2.3339104652404785e-001
+ <_>
+
+ 0 -1 858 -6.2750680372118950e-003
+
+ 6.4128917455673218e-001 -2.3738093674182892e-001
+ <_>
+
+ 0 -1 518 1.5905253589153290e-002
+
+ -2.3312157392501831e-001 5.6561905145645142e-001
+ <_>
+
+ 0 -1 873 -5.6511810980737209e-003
+
+ 6.3098442554473877e-001 -2.2128470242023468e-001
+ <_>
+
+ 0 -1 229 1.0334834456443787e-002
+
+ -1.6205528378486633e-001 7.1688497066497803e-001
+ <_>
+
+ 0 -1 373 -1.4500595629215240e-002
+
+ 5.2634650468826294e-001 -2.5339555740356445e-001
+ <_>
+
+ 0 -1 720 8.4515195339918137e-003
+
+ -1.9005575776100159e-001 6.2645190954208374e-001
+ <_>
+
+ 0 -1 519 1.6612716019153595e-002
+
+ -1.9349065423011780e-001 6.6134274005889893e-001
+ <_>
+
+ 0 -1 561 1.0179553180932999e-002
+
+ -1.9179263710975647e-001 6.1396795511245728e-001
+
+ <_>
+ 16
+ -2.2411971092224121e+000
+
+ <_>
+
+ 0 -1 344 -9.5315366983413696e-002
+
+ 2.0634920895099640e-001 -7.6994550228118896e-001
+ <_>
+
+ 0 -1 577 -1.1904314160346985e-002
+
+ 4.6030580997467041e-001 -4.5124572515487671e-001
+ <_>
+
+ 0 -1 736 8.0967023968696594e-003
+
+ -2.9279080033302307e-001 5.1358801126480103e-001
+ <_>
+
+ 0 -1 766 -1.4768393710255623e-002
+
+ 6.9709998369216919e-001 -1.9789521396160126e-001
+ <_>
+
+ 0 -1 332 -7.3709283024072647e-003
+
+ 6.4356821775436401e-001 -1.9384047389030457e-001
+ <_>
+
+ 0 -1 331 7.4571794830262661e-003
+
+ -2.0553122460842133e-001 6.7929607629776001e-001
+ <_>
+
+ 0 -1 943 5.8717206120491028e-003
+
+ -1.9075798988342285e-001 6.3178658485412598e-001
+ <_>
+
+ 0 -1 563 -6.3720787875354290e-003
+
+ 6.1133956909179688e-001 -1.9197526574134827e-001
+ <_>
+
+ 0 -1 185 -1.7508253455162048e-002
+
+ 5.5003905296325684e-001 -2.0409923791885376e-001
+ <_>
+
+ 0 -1 539 -4.2271558195352554e-003
+
+ 5.9483224153518677e-001 -2.0080061256885529e-001
+ <_>
+
+ 0 -1 919 5.0116949714720249e-003
+
+ -1.8873518705368042e-001 5.8758223056793213e-001
+ <_>
+
+ 0 -1 298 8.4183514118194580e-002
+
+ 1.9158974289894104e-001 -7.3058295249938965e-001
+ <_>
+
+ 0 -1 776 4.5591969974339008e-003
+
+ -2.1568548679351807e-001 5.4940956830978394e-001
+ <_>
+
+ 0 -1 776 -3.6774221807718277e-003
+
+ 6.5714693069458008e-001 -2.3908025026321411e-001
+ <_>
+
+ 0 -1 844 1.3156082481145859e-002
+
+ -1.6889381408691406e-001 5.4372692108154297e-001
+ <_>
+
+ 0 -1 508 1.2298718094825745e-002
+
+ -1.7204846441745758e-001 5.3114622831344604e-001
+
+ <_>
+ 20
+ -2.3278577327728271e+000
+
+ <_>
+
+ 0 -1 684 -4.2540580034255981e-002
+
+ 2.4365724623203278e-001 -7.2478657960891724e-001
+ <_>
+
+ 0 -1 317 -2.1006479859352112e-002
+
+ 3.9405155181884766e-001 -5.1031738519668579e-001
+ <_>
+
+ 0 -1 13 1.2750471010804176e-002
+
+ -2.6155433058738708e-001 5.3219014406204224e-001
+ <_>
+
+ 0 -1 12 -1.0928934812545776e-001
+
+ -7.9762983322143555e-001 1.6522131860256195e-001
+ <_>
+
+ 0 -1 742 -8.2451943308115005e-003
+
+ 6.1570894718170166e-001 -1.6545474529266357e-001
+ <_>
+
+ 0 -1 651 -6.1263595707714558e-003
+
+ 6.5689104795455933e-001 -1.6943360865116119e-001
+ <_>
+
+ 0 -1 650 5.0333887338638306e-003
+
+ -1.9622130692005157e-001 5.7385104894638062e-001
+ <_>
+
+ 0 -1 34 1.0666935704648495e-002
+
+ -2.1881586313247681e-001 4.5024806261062622e-001
+ <_>
+
+ 0 -1 291 -1.0632696561515331e-002
+
+ 6.3769024610519409e-001 -1.6428084671497345e-001
+ <_>
+
+ 0 -1 237 -1.4020981267094612e-002
+
+ 6.1583393812179565e-001 -1.6708594560623169e-001
+ <_>
+
+ 0 -1 765 1.2589931488037109e-002
+
+ -2.0485720038414001e-001 4.7809442877769470e-001
+ <_>
+
+ 0 -1 753 -1.3003132306039333e-002
+
+ 6.5572524070739746e-001 -1.6035726666450500e-001
+ <_>
+
+ 0 -1 222 -5.7425271719694138e-002
+
+ -8.2782661914825439e-001 1.4296714961528778e-001
+ <_>
+
+ 0 -1 833 -3.7263054400682449e-003
+
+ 4.9777820706367493e-001 -2.1036401391029358e-001
+ <_>
+
+ 0 -1 825 1.2980616651475430e-002
+
+ -1.7779336869716644e-001 6.1292153596878052e-001
+ <_>
+
+ 0 -1 276 -3.4886042121797800e-003
+
+ 4.1184583306312561e-001 -2.0970273017883301e-001
+ <_>
+
+ 0 -1 813 -1.1452829465270042e-002
+
+ 5.6084501743316650e-001 -1.5244032442569733e-001
+ <_>
+
+ 0 -1 321 3.7844986654818058e-003
+
+ -2.8913837671279907e-001 2.7224406599998474e-001
+ <_>
+
+ 0 -1 876 -4.7596222721040249e-003
+
+ 5.2785235643386841e-001 -1.5034112334251404e-001
+ <_>
+
+ 0 -1 896 -1.7377159092575312e-003
+
+ 5.5644094944000244e-001 -2.0121455192565918e-001
+
+ <_>
+ 28
+ -2.3750255107879639e+000
+
+ <_>
+
+ 0 -1 347 -1.0104553401470184e-001
+
+ 1.3032685220241547e-001 -7.3142945766448975e-001
+ <_>
+
+ 0 -1 596 -1.8494745716452599e-002
+
+ 5.6178814172744751e-001 -3.3690422773361206e-001
+ <_>
+
+ 0 -1 629 1.0897371917963028e-002
+
+ -2.6694682240486145e-001 4.6661883592605591e-001
+ <_>
+
+ 0 -1 839 8.4953904151916504e-003
+
+ -2.0583645999431610e-001 4.6663123369216919e-001
+ <_>
+
+ 0 -1 44 6.3092201948165894e-002
+
+ 1.2652839720249176e-001 -7.4331611394882202e-001
+ <_>
+
+ 0 -1 305 -4.8850802704691887e-003
+
+ 5.1036185026168823e-001 -1.7127794027328491e-001
+ <_>
+
+ 0 -1 295 -1.2086534872651100e-002
+
+ 5.3874844312667847e-001 -1.7047831416130066e-001
+ <_>
+
+ 0 -1 163 -4.0194295346736908e-002
+
+ 6.0334587097167969e-001 -1.8293543159961700e-001
+ <_>
+
+ 0 -1 265 -9.7945984452962875e-003
+
+ 4.8900371789932251e-001 -1.7746040225028992e-001
+ <_>
+
+ 0 -1 597 6.7133754491806030e-003
+
+ -1.8603576719760895e-001 4.9050629138946533e-001
+ <_>
+
+ 0 -1 128 1.5135381370782852e-002
+
+ 1.5555633604526520e-001 -6.6330802440643311e-001
+ <_>
+
+ 0 -1 480 7.4470564723014832e-003
+
+ 1.2465479969978333e-001 -6.3456755876541138e-001
+ <_>
+
+ 0 -1 559 -1.7742723226547241e-002
+
+ 4.8904901742935181e-001 -1.6264849901199341e-001
+ <_>
+
+ 0 -1 821 -1.5695080161094666e-002
+
+ 4.1306030750274658e-001 -1.9036959111690521e-001
+ <_>
+
+ 0 -1 819 -4.3798778206110001e-003
+
+ 4.8768985271453857e-001 -1.5558160841464996e-001
+ <_>
+
+ 0 -1 836 -4.8424974083900452e-003
+
+ 4.6657896041870117e-001 -1.6847038269042969e-001
+ <_>
+
+ 0 -1 90 7.4649546295404434e-003
+
+ -1.7167872190475464e-001 4.3042477965354919e-001
+ <_>
+
+ 0 -1 883 5.1524871960282326e-003
+
+ -1.4530055224895477e-001 4.7056230902671814e-001
+ <_>
+
+ 0 -1 890 9.8812151700258255e-003
+
+ -1.4264582097530365e-001 5.0057184696197510e-001
+ <_>
+
+ 0 -1 393 -3.0181273818016052e-002
+
+ -6.5408444404602051e-001 1.0674032568931580e-001
+ <_>
+
+ 0 -1 694 9.2962123453617096e-003
+
+ -1.4381234347820282e-001 4.9470436573028564e-001
+ <_>
+
+ 0 -1 77 -7.6252631843090057e-003
+
+ -5.2033776044845581e-001 1.3706678152084351e-001
+ <_>
+
+ 0 -1 801 -1.1497072875499725e-002
+
+ 3.4252560138702393e-001 -1.9132094085216522e-001
+ <_>
+
+ 0 -1 670 -4.4177635572850704e-003
+
+ 4.6443006396293640e-001 -1.3389693200588226e-001
+ <_>
+
+ 0 -1 647 -2.4282713420689106e-003
+
+ 4.1310977935791016e-001 -1.3224220275878906e-001
+ <_>
+
+ 0 -1 686 1.0079141706228256e-002
+
+ -1.3342842459678650e-001 5.5696302652359009e-001
+ <_>
+
+ 0 -1 570 3.5632357001304626e-002
+
+ 9.1464981436729431e-002 -7.0863521099090576e-001
+ <_>
+
+ 0 -1 840 -1.9085695967078209e-003
+
+ 2.6823535561561584e-001 -1.9665902853012085e-001
+
+ <_>
+ 34
+ -2.5052807331085205e+000
+
+ <_>
+
+ 0 -1 268 1.5469970181584358e-002
+
+ -6.7369276285171509e-001 3.0393996834754944e-001
+ <_>
+
+ 0 -1 700 -2.2830318659543991e-002
+
+ 4.9829742312431335e-001 -3.5193654894828796e-001
+ <_>
+
+ 0 -1 521 1.8841657787561417e-002
+
+ -2.1037499606609344e-001 4.8866468667984009e-001
+ <_>
+
+ 0 -1 262 1.1541565880179405e-002
+
+ -1.8598809838294983e-001 5.2916365861892700e-001
+ <_>
+
+ 0 -1 219 -2.4122973904013634e-002
+
+ 5.2869701385498047e-001 -1.6163693368434906e-001
+ <_>
+
+ 0 -1 6 1.4711560681462288e-002
+
+ -2.5017279386520386e-001 3.2298168540000916e-001
+ <_>
+
+ 0 -1 520 -1.5706669539213181e-002
+
+ 5.0967657566070557e-001 -1.5732303261756897e-001
+ <_>
+
+ 0 -1 948 -4.1158739477396011e-003
+
+ 4.9462157487869263e-001 -1.2155625224113464e-001
+ <_>
+
+ 0 -1 770 -1.0694706812500954e-002
+
+ 6.1407995223999023e-001 -1.2956763803958893e-001
+ <_>
+
+ 0 -1 387 -3.6484465003013611e-002
+
+ 3.1439977884292603e-001 -2.2812500596046448e-001
+ <_>
+
+ 0 -1 345 5.4322574287652969e-002
+
+ -8.7467961013317108e-002 7.1243762969970703e-001
+ <_>
+
+ 0 -1 250 -8.9914854615926743e-003
+
+ 3.7887179851531982e-001 -1.7758503556251526e-001
+ <_>
+
+ 0 -1 52 1.5299601480364799e-002
+
+ 1.5142892301082611e-001 -5.4104751348495483e-001
+ <_>
+
+ 0 -1 792 -6.0345130041241646e-003
+
+ 3.8750106096267700e-001 -1.7849484086036682e-001
+ <_>
+
+ 0 -1 610 -2.0873975008726120e-003
+
+ -5.5879276990890503e-001 1.3142852485179901e-001
+ <_>
+
+ 0 -1 642 -2.0619889255613089e-003
+
+ -5.1919680833816528e-001 1.0321786254644394e-001
+ <_>
+
+ 0 -1 259 3.6544300615787506e-002
+
+ -1.6965624690055847e-001 3.9208900928497314e-001
+ <_>
+
+ 0 -1 382 1.4528267784044147e-003
+
+ -3.4218248724937439e-001 1.8518145382404327e-001
+ <_>
+
+ 0 -1 196 -2.6956547051668167e-002
+
+ -8.3279663324356079e-001 7.7962644398212433e-002
+ <_>
+
+ 0 -1 533 -1.0518556460738182e-002
+
+ 4.5597425103187561e-001 -1.4934070408344269e-001
+ <_>
+
+ 0 -1 740 5.4534617811441422e-003
+
+ -1.5347433090209961e-001 3.5846599936485291e-001
+ <_>
+
+ 0 -1 534 -5.6011183187365532e-003
+
+ 3.6314359307289124e-001 -1.5886513888835907e-001
+ <_>
+
+ 0 -1 927 1.0399374179542065e-002
+
+ -1.1159978061914444e-001 4.9891829490661621e-001
+ <_>
+
+ 0 -1 41 2.6076715439558029e-002
+
+ -2.1667334437370300e-001 2.5659701228141785e-001
+ <_>
+
+ 0 -1 715 -7.3732812888920307e-003
+
+ 5.8327084779739380e-001 -1.0727929323911667e-001
+ <_>
+
+ 0 -1 882 -5.6875580921769142e-003
+
+ 4.0847277641296387e-001 -1.2561751902103424e-001
+ <_>
+
+ 0 -1 891 1.3321589678525925e-002
+
+ -1.2537255883216858e-001 4.4824957847595215e-001
+ <_>
+
+ 0 -1 168 -1.8619614839553833e-001
+
+ -7.1703630685806274e-001 7.7993653714656830e-002
+ <_>
+
+ 0 -1 190 3.3796064555644989e-002
+
+ -1.3172915577888489e-001 4.1404765844345093e-001
+ <_>
+
+ 0 -1 530 4.0178038179874420e-003
+
+ -1.8571788072586060e-001 2.7401688694953918e-001
+ <_>
+
+ 0 -1 555 1.6669608652591705e-002
+
+ 7.5644508004188538e-002 -6.8869042396545410e-001
+ <_>
+
+ 0 -1 406 4.7584358602762222e-002
+
+ 8.2619942724704742e-002 -5.8818364143371582e-001
+ <_>
+
+ 0 -1 537 2.5073587894439697e-003
+
+ -1.4251622557640076e-001 3.3965954184532166e-001
+ <_>
+
+ 0 -1 638 1.4513431116938591e-002
+
+ -1.4366999268531799e-001 3.2603174448013306e-001
+
+ <_>
+ 42
+ -2.4546041488647461e+000
+
+ <_>
+
+ 0 -1 340 -9.4746887683868408e-002
+
+ 1.1788145639002323e-002 -7.5736826658248901e-001
+ <_>
+
+ 0 -1 577 -1.5985764563083649e-002
+
+ 3.4271994233131409e-001 -3.7916901707649231e-001
+ <_>
+
+ 0 -1 630 1.9708804786205292e-002
+
+ -2.2393602132797241e-001 4.9053853750228882e-001
+ <_>
+
+ 0 -1 96 1.6178630292415619e-002
+
+ -2.0412905514240265e-001 3.4104099869728088e-001
+ <_>
+
+ 0 -1 319 1.0606624186038971e-001
+
+ -1.0737416148185730e-001 6.7443412542343140e-001
+ <_>
+
+ 0 -1 83 -6.7316116765141487e-003
+
+ 3.4080076217651367e-001 -2.2706831991672516e-001
+ <_>
+
+ 0 -1 634 4.0689492598176003e-003
+
+ -1.4782951772212982e-001 4.1778662800788879e-001
+ <_>
+
+ 0 -1 686 -1.3378994539380074e-002
+
+ 6.8167924880981445e-001 -1.0507009923458099e-001
+ <_>
+
+ 0 -1 786 -1.8129471689462662e-002
+
+ 5.0995999574661255e-001 -1.3223616778850555e-001
+ <_>
+
+ 0 -1 646 -8.9250747114419937e-003
+
+ 5.0829160213470459e-001 -1.0886437445878983e-001
+ <_>
+
+ 0 -1 711 6.1906888149678707e-003
+
+ -1.1881013214588165e-001 4.9430772662162781e-001
+ <_>
+
+ 0 -1 575 -3.4704633057117462e-002
+
+ -6.8778192996978760e-001 9.2318676412105560e-002
+ <_>
+
+ 0 -1 189 -9.7849890589714050e-003
+
+ 2.0124578475952148e-001 -2.8525698184967041e-001
+ <_>
+
+ 0 -1 479 1.4655515551567078e-003
+
+ 1.0351686179637909e-001 -6.3454014062881470e-001
+ <_>
+
+ 0 -1 513 -3.5405270755290985e-002
+
+ -7.6147061586380005e-001 6.0781378298997879e-002
+ <_>
+
+ 0 -1 23 9.1620441526174545e-003
+
+ 8.2090407609939575e-002 -5.3804397583007813e-001
+ <_>
+
+ 0 -1 838 6.7096878774464130e-003
+
+ -1.1302943527698517e-001 4.6365195512771606e-001
+ <_>
+
+ 0 -1 820 -1.0268911719322205e-002
+
+ 5.8097857236862183e-001 -1.0859654098749161e-001
+ <_>
+
+ 0 -1 441 2.9750142246484756e-002
+
+ 9.3299955129623413e-002 -5.4268807172775269e-001
+ <_>
+
+ 0 -1 726 -5.5990684777498245e-003
+
+ 4.9949660897254944e-001 -1.0594012588262558e-001
+ <_>
+
+ 0 -1 714 4.8061953857541084e-003
+
+ -1.1477116495370865e-001 4.3569833040237427e-001
+ <_>
+
+ 0 -1 637 -4.0460027754306793e-002
+
+ -7.7711206674575806e-001 7.3132880032062531e-002
+ <_>
+
+ 0 -1 53 4.5344540849328041e-003
+
+ -1.6310065984725952e-001 3.0750447511672974e-001
+ <_>
+
+ 0 -1 479 -1.4339694753289223e-003
+
+ -5.2921229600906372e-001 8.8739573955535889e-002
+ <_>
+
+ 0 -1 396 -4.5565411448478699e-002
+
+ -7.4928385019302368e-001 4.8912040889263153e-002
+ <_>
+
+ 0 -1 330 -8.3342632278800011e-003
+
+ 4.6582534909248352e-001 -1.0161897540092468e-001
+ <_>
+
+ 0 -1 834 -1.0381949134171009e-002
+
+ 3.0994066596031189e-001 -1.3267418742179871e-001
+ <_>
+
+ 0 -1 831 1.6984764486551285e-002
+
+ -9.9871687591075897e-002 4.9527561664581299e-001
+ <_>
+
+ 0 -1 376 -1.3278885744512081e-003
+
+ 3.6983770132064819e-001 -1.1738168448209763e-001
+ <_>
+
+ 0 -1 760 -3.1804253812879324e-003
+
+ -8.9759206771850586e-001 4.3921347707509995e-002
+ <_>
+
+ 0 -1 828 -1.9149896688759327e-003
+
+ 1.9146692752838135e-001 -2.0268803834915161e-001
+ <_>
+
+ 0 -1 841 -1.8405792070552707e-003
+
+ 2.1319428086280823e-001 -1.8382850289344788e-001
+ <_>
+
+ 0 -1 259 3.5366363823413849e-002
+
+ -1.2205254286527634e-001 3.0300119519233704e-001
+ <_>
+
+ 0 -1 354 -3.7630870938301086e-003
+
+ 3.0492320656776428e-001 -1.2932489812374115e-001
+ <_>
+
+ 0 -1 732 -1.1243980843573809e-003
+
+ -4.9750825762748718e-001 8.0560393631458282e-002
+ <_>
+
+ 0 -1 749 -2.2356058470904827e-003
+
+ -6.7946660518646240e-001 5.2887793630361557e-002
+ <_>
+
+ 0 -1 536 -2.2717624902725220e-002
+
+ 4.2686942219734192e-001 -1.0260385274887085e-001
+ <_>
+
+ 0 -1 280 9.2372611165046692e-002
+
+ 7.9670898616313934e-002 -5.2335608005523682e-001
+ <_>
+
+ 0 -1 658 -1.0431142151355743e-001
+
+ -7.4446302652359009e-001 4.6288352459669113e-002
+ <_>
+
+ 0 -1 944 7.4872868135571480e-003
+
+ -1.1977240443229675e-001 3.1791850924491882e-001
+ <_>
+
+ 0 -1 228 -2.4358350783586502e-002
+
+ 1.7944122850894928e-001 -2.0157346129417419e-001
+ <_>
+
+ 0 -1 47 4.9624212086200714e-002
+
+ -1.0701860487461090e-001 3.7854740023612976e-001
+
+ <_>
+ 50
+ -2.6502745151519775e+000
+
+ <_>
+
+ 0 -1 431 2.1381884813308716e-002
+
+ -7.6310330629348755e-001 -7.8235723078250885e-002
+ <_>
+
+ 0 -1 623 9.7743803635239601e-003
+
+ -3.8874423503875732e-001 2.9614463448524475e-001
+ <_>
+
+ 0 -1 19 2.9336847364902496e-002
+
+ -2.1392610669136047e-001 4.4257661700248718e-001
+ <_>
+
+ 0 -1 645 1.2054111808538437e-002
+
+ -1.2168737500905991e-001 6.5890479087829590e-001
+ <_>
+
+ 0 -1 392 1.1729352176189423e-002
+
+ -1.2235984951257706e-001 4.8555457592010498e-001
+ <_>
+
+ 0 -1 588 -1.0436945594847202e-003
+
+ -6.1764669418334961e-001 1.1390741914510727e-001
+ <_>
+
+ 0 -1 71 -2.5775061920285225e-002
+
+ -6.0323065519332886e-001 1.2372459471225739e-001
+ <_>
+
+ 0 -1 872 -4.0599796921014786e-003
+
+ 3.5508742928504944e-001 -1.9819863140583038e-001
+ <_>
+
+ 0 -1 643 -1.9134972244501114e-002
+
+ 4.7154670953750610e-001 -1.4655594527721405e-001
+ <_>
+
+ 0 -1 483 6.5218633972108364e-003
+
+ 1.2207052111625671e-001 -6.0890328884124756e-001
+ <_>
+
+ 0 -1 757 -1.4126582071185112e-002
+
+ 3.3305764198303223e-001 -1.8242211639881134e-001
+ <_>
+
+ 0 -1 565 -8.3793615922331810e-003
+
+ 4.6099957823753357e-001 -1.0809499770402908e-001
+ <_>
+
+ 0 -1 455 -1.2584301875904202e-003
+
+ -5.1634973287582397e-001 1.0520447790622711e-001
+ <_>
+
+ 0 -1 203 -5.1234811544418335e-002
+
+ -7.5237458944320679e-001 5.3416907787322998e-002
+ <_>
+
+ 0 -1 584 1.6728173941373825e-002
+
+ -1.4094479382038116e-001 3.8169395923614502e-001
+ <_>
+
+ 0 -1 184 -4.5198453590273857e-003
+
+ 3.0100575089454651e-001 -1.6970130801200867e-001
+ <_>
+
+ 0 -1 686 1.0796479880809784e-002
+
+ -1.1680302023887634e-001 4.6733006834983826e-001
+ <_>
+
+ 0 -1 860 5.4673422127962112e-003
+
+ -1.3090577721595764e-001 3.4922021627426147e-001
+ <_>
+
+ 0 -1 902 6.2447679229080677e-003
+
+ -1.0570991784334183e-001 4.4209754467010498e-001
+ <_>
+
+ 0 -1 892 -8.6985006928443909e-003
+
+ 4.4582247734069824e-001 -1.1208640784025192e-001
+ <_>
+
+ 0 -1 86 5.8012232184410095e-002
+
+ 5.6753028184175491e-002 -7.8348731994628906e-001
+ <_>
+
+ 0 -1 158 -1.9159330055117607e-002
+
+ 2.1710830926895142e-001 -2.1206925809383392e-001
+ <_>
+
+ 0 -1 346 1.4331589639186859e-001
+
+ -6.5506041049957275e-002 8.3924996852874756e-001
+ <_>
+
+ 0 -1 327 -7.4841668829321861e-003
+
+ 4.4598889350891113e-001 -8.4189794957637787e-002
+ <_>
+
+ 0 -1 585 -3.1711272895336151e-002
+
+ -6.8312811851501465e-001 6.7834347486495972e-002
+ <_>
+
+ 0 -1 543 -1.0442961938679218e-003
+
+ -5.5244719982147217e-001 6.7180506885051727e-002
+ <_>
+
+ 0 -1 806 7.9750344157218933e-003
+
+ -1.4685039222240448e-001 2.7911156415939331e-001
+ <_>
+
+ 0 -1 775 9.7797568887472153e-003
+
+ -1.0445457696914673e-001 3.9583787322044373e-001
+ <_>
+
+ 0 -1 552 1.3288496062159538e-002
+
+ -1.1733970791101456e-001 3.2855752110481262e-001
+ <_>
+
+ 0 -1 528 -1.5873706433922052e-003
+
+ -6.4394426345825195e-001 5.9831541031599045e-002
+ <_>
+
+ 0 -1 538 4.1341055184602737e-003
+
+ -1.4766456186771393e-001 2.6551467180252075e-001
+ <_>
+
+ 0 -1 75 4.7469654236920178e-004
+
+ -2.4220904707908630e-001 1.7033961415290833e-001
+ <_>
+
+ 0 -1 780 1.6357531771063805e-002
+
+ -7.4449680745601654e-002 5.1059716939926147e-001
+ <_>
+
+ 0 -1 512 -3.0519803985953331e-002
+
+ -6.1357855796813965e-001 6.4341634511947632e-002
+ <_>
+
+ 0 -1 388 7.8287199139595032e-002
+
+ -9.1953203082084656e-002 4.5058310031890869e-001
+ <_>
+
+ 0 -1 426 2.6628788560628891e-002
+
+ -1.2955492734909058e-001 2.6968446373939514e-001
+ <_>
+
+ 0 -1 187 4.6231731772422791e-002
+
+ -8.5953183472156525e-002 4.0568628907203674e-001
+ <_>
+
+ 0 -1 248 -2.1837819367647171e-003
+
+ 2.9953801631927490e-001 -1.1820212751626968e-001
+ <_>
+
+ 0 -1 551 -7.5804558582603931e-004
+
+ -3.7147358059883118e-001 9.4888158142566681e-002
+ <_>
+
+ 0 -1 557 1.9615942612290382e-002
+
+ 7.7175915241241455e-002 -4.4386270642280579e-001
+ <_>
+
+ 0 -1 758 2.4940725415945053e-003
+
+ -1.3974383473396301e-001 2.5393635034561157e-001
+ <_>
+
+ 0 -1 363 2.0674080587923527e-003
+
+ -1.6579771041870117e-001 2.1392273902893066e-001
+ <_>
+
+ 0 -1 307 -7.3546944186091423e-003
+
+ 3.6300283670425415e-001 -9.0012907981872559e-002
+ <_>
+
+ 0 -1 822 -4.5008827000856400e-003
+
+ 2.7234289050102234e-001 -1.1618893593549728e-001
+ <_>
+
+ 0 -1 863 2.6555648073554039e-003
+
+ -1.3339768350124359e-001 2.3308847844600677e-001
+ <_>
+
+ 0 -1 713 6.8732965737581253e-003
+
+ 5.5398836731910706e-002 -5.7269740104675293e-001
+ <_>
+
+ 0 -1 541 -1.3697329908609390e-002
+
+ 2.9575833678245544e-001 -1.1314996331930161e-001
+ <_>
+
+ 0 -1 499 3.1671333126723766e-003
+
+ -1.5514299273490906e-001 2.1296086907386780e-001
+ <_>
+
+ 0 -1 74 3.9301186800003052e-002
+
+ 3.7740129977464676e-002 -8.7064558267593384e-001
+ <_>
+
+ 0 -1 438 5.0326753407716751e-003
+
+ 3.8631703704595566e-002 -6.6628092527389526e-001
+
+ <_>
+ 37
+ -2.2784059047698975e+000
+
+ <_>
+
+ 0 -1 284 -6.8839386105537415e-002
+
+ 3.8505528122186661e-002 -7.2149914503097534e-001
+ <_>
+
+ 0 -1 622 4.6330597251653671e-003
+
+ -2.7918994426727295e-001 5.7365530729293823e-001
+ <_>
+
+ 0 -1 769 -2.2597890347242355e-002
+
+ 5.4445463418960571e-001 -1.5445226430892944e-001
+ <_>
+
+ 0 -1 651 8.1817107275128365e-003
+
+ -1.3576838374137878e-001 5.7550191879272461e-001
+ <_>
+
+ 0 -1 663 1.9931606948375702e-002
+
+ -8.6917184293270111e-002 6.9753867387771606e-001
+ <_>
+
+ 0 -1 125 -1.6835592687129974e-002
+
+ 2.9909837245941162e-001 -2.1280159056186676e-001
+ <_>
+
+ 0 -1 811 1.3076540082693100e-002
+
+ -1.0236994922161102e-001 6.2949544191360474e-001
+ <_>
+
+ 0 -1 809 6.2367517966777086e-004
+
+ -2.5327861309051514e-001 2.4867674708366394e-001
+ <_>
+
+ 0 -1 609 1.2028571218252182e-003
+
+ 1.3679966330528259e-001 -6.4433771371841431e-001
+ <_>
+
+ 0 -1 272 1.3981487601995468e-002
+
+ -1.6557806730270386e-001 4.5303794741630554e-001
+ <_>
+
+ 0 -1 224 -1.5312875621020794e-002
+
+ 3.9820623397827148e-001 -1.4350801706314087e-001
+ <_>
+
+ 0 -1 502 -1.5315772034227848e-003
+
+ -4.6908026933670044e-001 1.1392414569854736e-001
+ <_>
+
+ 0 -1 586 -1.2515729293227196e-002
+
+ 4.2320749163627625e-001 -1.1944464594125748e-001
+ <_>
+
+ 0 -1 15 9.7349435091018677e-003
+
+ -2.1135130524635315e-001 2.4544763565063477e-001
+ <_>
+
+ 0 -1 578 8.9689850807189941e-002
+
+ 6.3219323754310608e-002 -6.4908504486083984e-001
+ <_>
+
+ 0 -1 683 -1.1183234862983227e-002
+
+ 4.5843327045440674e-001 -1.1428884416818619e-001
+ <_>
+
+ 0 -1 609 -1.3516875915229321e-003
+
+ -6.4720195531845093e-001 8.4523022174835205e-002
+ <_>
+
+ 0 -1 338 -3.5038506612181664e-003
+
+ 2.3362815380096436e-001 -2.2096297144889832e-001
+ <_>
+
+ 0 -1 676 -2.2360668517649174e-003
+
+ 3.7134209275245667e-001 -1.3087964057922363e-001
+ <_>
+
+ 0 -1 672 1.1475373059511185e-002
+
+ -9.9598348140716553e-002 4.7512599825859070e-001
+ <_>
+
+ 0 -1 693 -4.1206870228052139e-003
+
+ 3.7730529904365540e-001 -1.3486868143081665e-001
+ <_>
+
+ 0 -1 386 -1.0615207254886627e-002
+
+ 5.6163507699966431e-001 -8.6019508540630341e-002
+ <_>
+
+ 0 -1 912 1.3644450809806585e-003
+
+ 9.1222301125526428e-002 -5.7370740175247192e-001
+ <_>
+
+ 0 -1 211 -4.0528293699026108e-002
+
+ -7.1112531423568726e-001 5.6328568607568741e-002
+ <_>
+
+ 0 -1 598 -2.6628528721630573e-003
+
+ -5.7514446973800659e-001 6.4672872424125671e-002
+ <_>
+
+ 0 -1 804 1.6719421837478876e-003
+
+ -1.0937304049730301e-001 4.6537923812866211e-001
+ <_>
+
+ 0 -1 391 -7.5402572751045227e-002
+
+ -7.1920621395111084e-001 6.3679412007331848e-002
+ <_>
+
+ 0 -1 752 4.1434019804000854e-003
+
+ -1.2251268327236176e-001 3.5859704017639160e-001
+ <_>
+
+ 0 -1 656 1.0901679052039981e-003
+
+ 9.0319603681564331e-002 -4.9077373743057251e-001
+ <_>
+
+ 0 -1 548 9.7664669156074524e-003
+
+ -1.1890622228384018e-001 3.7789806723594666e-001
+ <_>
+
+ 0 -1 20 1.3128603994846344e-001
+
+ 9.1950289905071259e-002 -4.8608726263046265e-001
+ <_>
+
+ 0 -1 160 5.0870995037257671e-003
+
+ -3.0447667837142944e-001 1.5393695235252380e-001
+ <_>
+
+ 0 -1 695 1.1608509812504053e-003
+
+ 6.8402722477912903e-002 -5.7240855693817139e-001
+ <_>
+
+ 0 -1 463 -8.3964206278324127e-003
+
+ -5.6654578447341919e-001 6.1527676880359650e-002
+ <_>
+
+ 0 -1 853 -9.2788469046354294e-003
+
+ 5.3486818075180054e-001 -7.9918831586837769e-002
+ <_>
+
+ 0 -1 194 4.0858805179595947e-002
+
+ -6.0392327606678009e-002 5.3097963333129883e-001
+ <_>
+
+ 0 -1 875 1.1207645758986473e-002
+
+ -7.6901644468307495e-002 4.6894967555999756e-001
+
+ <_>
+ 43
+ -2.3281440734863281e+000
+
+ <_>
+
+ 0 -1 799 1.6143361106514931e-002
+
+ -5.9869056940078735e-001 5.8244681358337402e-001
+ <_>
+
+ 0 -1 316 -1.4507154002785683e-002
+
+ 2.7806228399276733e-001 -4.9415421485900879e-001
+ <_>
+
+ 0 -1 374 7.1883820928633213e-003
+
+ -2.1741701662540436e-001 3.9910879731178284e-001
+ <_>
+
+ 0 -1 601 -6.3224318437278271e-003
+
+ 4.9661168456077576e-001 -1.4284123480319977e-001
+ <_>
+
+ 0 -1 309 7.3951724916696548e-003
+
+ -1.3306735455989838e-001 5.4774791002273560e-001
+ <_>
+
+ 0 -1 620 5.7926801964640617e-003
+
+ -1.7347626388072968e-001 3.3524274826049805e-001
+ <_>
+
+ 0 -1 628 -8.1796385347843170e-003
+
+ 4.4341480731964111e-001 -1.1987159401178360e-001
+ <_>
+
+ 0 -1 644 3.1394532416015863e-003
+
+ -7.6400212943553925e-002 5.3360211849212646e-001
+ <_>
+
+ 0 -1 803 5.8109681122004986e-003
+
+ -1.1512878537178040e-001 4.4279125332832336e-001
+ <_>
+
+ 0 -1 787 -1.5480478759855032e-003
+
+ 4.6037110686302185e-001 -1.1494978517293930e-001
+ <_>
+
+ 0 -1 139 -3.2716423273086548e-002
+
+ -6.3845193386077881e-001 1.0197243094444275e-001
+ <_>
+
+ 0 -1 547 7.7531556598842144e-003
+
+ -2.0599687099456787e-001 2.4387344717979431e-001
+ <_>
+
+ 0 -1 312 1.0081732273101807e-001
+
+ -8.3307094871997833e-002 6.0089951753616333e-001
+ <_>
+
+ 0 -1 303 1.8065905198454857e-002
+
+ -8.5330262780189514e-002 5.1092010736465454e-001
+ <_>
+
+ 0 -1 227 1.2447070330381393e-002
+
+ 7.5348034501075745e-002 -7.0691746473312378e-001
+ <_>
+
+ 0 -1 26 1.1250283569097519e-002
+
+ -2.8157770633697510e-001 1.4611217379570007e-001
+ <_>
+
+ 0 -1 461 6.3989013433456421e-002
+
+ 5.5644407868385315e-002 -8.0775284767150879e-001
+ <_>
+
+ 0 -1 532 1.2037818320095539e-002
+
+ -1.6155177354812622e-001 2.6092258095741272e-001
+ <_>
+
+ 0 -1 531 -6.7794714123010635e-003
+
+ 4.1026043891906738e-001 -1.1167341470718384e-001
+ <_>
+
+ 0 -1 662 -6.8837543949484825e-003
+
+ 3.2057675719261169e-001 -1.2521778047084808e-001
+ <_>
+
+ 0 -1 568 -5.6298770941793919e-003
+
+ 3.7114644050598145e-001 -9.6118465065956116e-002
+ <_>
+
+ 0 -1 501 -1.4044784940779209e-002
+
+ 2.3923584818840027e-001 -1.4994344115257263e-001
+ <_>
+
+ 0 -1 209 -4.2415991425514221e-002
+
+ -7.0631259679794312e-001 5.3350944072008133e-002
+ <_>
+
+ 0 -1 633 1.1271872790530324e-003
+
+ -1.0572738200426102e-001 4.0252980589866638e-001
+ <_>
+
+ 0 -1 655 1.6750365030020475e-003
+
+ 6.3855156302452087e-002 -6.4757323265075684e-001
+ <_>
+
+ 0 -1 617 8.0223847180604935e-003
+
+ -1.3372656702995300e-001 3.1646871566772461e-001
+ <_>
+
+ 0 -1 302 -7.6437788084149361e-003
+
+ 3.6533179879188538e-001 -1.0963398963212967e-001
+ <_>
+
+ 0 -1 864 1.9589535077102482e-004
+
+ -1.8541762232780457e-001 1.9759687781333923e-001
+ <_>
+
+ 0 -1 235 -1.4239229494705796e-003
+
+ 2.4031755328178406e-001 -1.5697695314884186e-001
+ <_>
+
+ 0 -1 796 8.4227584302425385e-003
+
+ -8.4527194499969482e-002 4.2389118671417236e-001
+ <_>
+
+ 0 -1 797 -6.9234715774655342e-003
+
+ 3.8057762384414673e-001 -9.1416321694850922e-002
+ <_>
+
+ 0 -1 588 -1.8704653484746814e-003
+
+ -6.4613032341003418e-001 5.7689383625984192e-002
+ <_>
+
+ 0 -1 260 -2.7793958783149719e-002
+
+ 1.8243275582790375e-001 -1.8460384011268616e-001
+ <_>
+
+ 0 -1 780 -1.9853528589010239e-002
+
+ 7.5294703245162964e-001 -5.5559452623128891e-002
+ <_>
+
+ 0 -1 231 -9.3498677015304565e-002
+
+ -4.5725339651107788e-001 8.2762040197849274e-002
+ <_>
+
+ 0 -1 233 -5.1207490265369415e-002
+
+ -6.2534767389297485e-001 4.8502899706363678e-002
+ <_>
+
+ 0 -1 407 1.1575517710298300e-003
+
+ -1.9439546763896942e-001 1.6855290532112122e-001
+ <_>
+
+ 0 -1 24 -1.7103100195527077e-002
+
+ -5.6425410509109497e-001 5.8622561395168304e-002
+ <_>
+
+ 0 -1 731 -1.7147272592410445e-003
+
+ -4.4655910134315491e-001 6.4384043216705322e-002
+ <_>
+
+ 0 -1 704 -2.4417929351329803e-002
+
+ -4.3452578783035278e-001 7.0416867733001709e-002
+ <_>
+
+ 0 -1 572 3.7648410070687532e-003
+
+ -9.9933244287967682e-002 3.3911246061325073e-001
+ <_>
+
+ 0 -1 353 -1.0104919783771038e-002
+
+ 3.4629023075103760e-001 -8.8539779186248779e-002
+ <_>
+
+ 0 -1 712 5.0981063395738602e-003
+
+ 5.5100377649068832e-002 -6.0317450761795044e-001
+
+ <_>
+ 50
+ -2.3480093479156494e+000
+
+ <_>
+
+ 0 -1 343 -3.9326027035713196e-002
+
+ 1.5673981979489326e-002 -7.0409429073333740e-001
+ <_>
+
+ 0 -1 465 -8.4042851813137531e-004
+
+ 2.2963143885135651e-001 -4.5338386297225952e-001
+ <_>
+
+ 0 -1 768 1.2317419983446598e-002
+
+ -2.4286352097988129e-001 3.4696686267852783e-001
+ <_>
+
+ 0 -1 799 1.2345131486654282e-002
+
+ -1.2295535951852798e-001 5.7723248004913330e-001
+ <_>
+
+ 0 -1 334 -1.0166198946535587e-002
+
+ 3.6376756429672241e-001 -1.5697406232357025e-001
+ <_>
+
+ 0 -1 2 1.6935718012973666e-003
+
+ -1.6952106356620789e-001 3.3476638793945313e-001
+ <_>
+
+ 0 -1 355 2.4814529344439507e-002
+
+ -5.2621126174926758e-002 6.6913032531738281e-001
+ <_>
+
+ 0 -1 595 -7.9641379415988922e-003
+
+ 4.5105281472206116e-001 -1.0256277024745941e-001
+ <_>
+
+ 0 -1 923 -8.0780440475791693e-004
+
+ 3.4726995229721069e-001 -1.4011415839195251e-001
+ <_>
+
+ 0 -1 886 -4.2634975165128708e-002
+
+ 3.9254909753799438e-001 -9.5705978572368622e-002
+ <_>
+
+ 0 -1 645 -1.1309007182717323e-002
+
+ 5.3030455112457275e-001 -9.1078959405422211e-002
+ <_>
+
+ 0 -1 660 -5.3997440263628960e-003
+
+ 4.4208008050918579e-001 -8.9016474783420563e-002
+ <_>
+
+ 0 -1 922 8.0034844577312469e-003
+
+ -7.7505834400653839e-002 4.6123340725898743e-001
+ <_>
+
+ 0 -1 70 -2.1929096430540085e-002
+
+ -5.1349323987960815e-001 8.5143901407718658e-002
+ <_>
+
+ 0 -1 457 -1.1585029773414135e-002
+
+ -5.9067147970199585e-001 5.3899347782135010e-002
+ <_>
+
+ 0 -1 940 1.5154580585658550e-002
+
+ 4.7417007386684418e-002 -6.2853425741195679e-001
+ <_>
+
+ 0 -1 425 3.6063842475414276e-002
+
+ 7.1829482913017273e-002 -5.8649080991744995e-001
+ <_>
+
+ 0 -1 377 -1.2515364214777946e-003
+
+ 1.8929110467433929e-001 -1.8165642023086548e-001
+ <_>
+
+ 0 -1 443 -1.1191211640834808e-002
+
+ -6.1874210834503174e-001 6.0382697731256485e-002
+ <_>
+
+ 0 -1 892 -1.0454729199409485e-002
+
+ 3.9079114794731140e-001 -9.7279526293277740e-002
+ <_>
+
+ 0 -1 474 -1.3280634302645922e-003
+
+ -4.3977957963943481e-001 8.6543120443820953e-002
+ <_>
+
+ 0 -1 884 -6.5715098753571510e-003
+
+ 3.8899809122085571e-001 -9.9507912993431091e-002
+ <_>
+
+ 0 -1 802 -4.8141209408640862e-003
+
+ 2.7240043878555298e-001 -1.1941614747047424e-001
+ <_>
+
+ 0 -1 611 -4.9042850732803345e-003
+
+ 3.4554582834243774e-001 -1.0440594702959061e-001
+ <_>
+
+ 0 -1 589 4.1131088510155678e-003
+
+ 6.2906242907047272e-002 -6.3577443361282349e-001
+ <_>
+
+ 0 -1 564 -1.4377808198332787e-002
+
+ 2.6160046458244324e-001 -1.3126534223556519e-001
+ <_>
+
+ 0 -1 659 -7.9730991274118423e-003
+
+ 2.8418624401092529e-001 -1.1802970618009567e-001
+ <_>
+
+ 0 -1 632 1.2750998139381409e-002
+
+ -1.2246144562959671e-001 2.9994803667068481e-001
+ <_>
+
+ 0 -1 550 1.2405896559357643e-003
+
+ 6.8871341645717621e-002 -4.7651088237762451e-001
+ <_>
+
+ 0 -1 864 1.9797214190475643e-004
+
+ -1.8686980009078979e-001 1.7104914784431458e-001
+ <_>
+
+ 0 -1 773 -5.9868812561035156e-002
+
+ -7.4281668663024902e-001 4.0871854871511459e-002
+ <_>
+
+ 0 -1 20 1.7117856442928314e-001
+
+ 3.9691232144832611e-002 -6.0849416255950928e-001
+ <_>
+
+ 0 -1 583 -6.0836132615804672e-003
+
+ 2.6707777380943298e-001 -1.1131492257118225e-001
+ <_>
+
+ 0 -1 37 -1.6043212264776230e-002
+
+ -7.1336209774017334e-001 4.1814558207988739e-002
+ <_>
+
+ 0 -1 721 -3.5733331460505724e-003
+
+ -5.9263443946838379e-001 4.1711769998073578e-002
+ <_>
+
+ 0 -1 251 4.8501053825020790e-003
+
+ -1.7411983013153076e-001 1.6949725151062012e-001
+ <_>
+
+ 0 -1 932 -2.4870643392205238e-003
+
+ 3.5093098878860474e-001 -8.0437563359737396e-002
+ <_>
+
+ 0 -1 679 5.4334278684109449e-004
+
+ 7.2410888969898224e-002 -4.1958642005920410e-001
+ <_>
+
+ 0 -1 399 -6.7315630614757538e-002
+
+ -6.9776558876037598e-001 3.6959640681743622e-002
+ <_>
+
+ 0 -1 848 -1.5508693642914295e-002
+
+ 4.7738686203956604e-001 -6.2411848455667496e-002
+ <_>
+
+ 0 -1 240 9.8924851045012474e-003
+
+ 3.8795292377471924e-002 -7.5121307373046875e-001
+ <_>
+
+ 0 -1 626 -1.9304422894492745e-003
+
+ -6.6471725702285767e-001 3.2116148620843887e-002
+ <_>
+
+ 0 -1 877 -1.0774823604151607e-003
+
+ 1.5463894605636597e-001 -1.6525565087795258e-001
+ <_>
+
+ 0 -1 938 2.0380350761115551e-003
+
+ -8.5884653031826019e-002 3.1941527128219604e-001
+ <_>
+
+ 0 -1 296 2.6121754199266434e-003
+
+ 4.5351639389991760e-002 -6.1592888832092285e-001
+ <_>
+
+ 0 -1 360 -2.4895587936043739e-002
+
+ 1.9662404060363770e-001 -1.3288022577762604e-001
+ <_>
+
+ 0 -1 540 9.4352923333644867e-003
+
+ -7.7825613319873810e-002 3.3150759339332581e-001
+ <_>
+
+ 0 -1 475 3.4190870821475983e-002
+
+ 4.5858692377805710e-002 -6.1435216665267944e-001
+ <_>
+
+ 0 -1 685 -5.5097185075283051e-002
+
+ -4.9892291426658630e-001 4.7548539936542511e-002
+ <_>
+
+ 0 -1 287 3.8485769182443619e-003
+
+ -2.1700088679790497e-001 1.1295168846845627e-001
+
+ <_>
+ 61
+ -2.4126377105712891e+000
+
+ <_>
+
+ 0 -1 344 -9.5382995903491974e-002
+
+ -4.5056518167257309e-002 -7.4383479356765747e-001
+ <_>
+
+ 0 -1 696 -1.7865713685750961e-002
+
+ 2.4200576543807983e-001 -3.4111279249191284e-001
+ <_>
+
+ 0 -1 66 -1.7819929867982864e-002
+
+ -5.8606600761413574e-001 1.0216028243303299e-001
+ <_>
+
+ 0 -1 369 1.1929270811378956e-002
+
+ -1.3082079589366913e-001 4.3198430538177490e-001
+ <_>
+
+ 0 -1 677 -2.1402675658464432e-002
+
+ -7.3706889152526855e-001 7.2057045996189117e-002
+ <_>
+
+ 0 -1 880 2.0411442965269089e-003
+
+ -1.9257834553718567e-001 2.6624691486358643e-001
+ <_>
+
+ 0 -1 560 -9.2984475195407867e-003
+
+ 3.9710593223571777e-001 -1.1857020854949951e-001
+ <_>
+
+ 0 -1 870 -4.1869636625051498e-003
+
+ 4.2139983177185059e-001 -1.1628517508506775e-001
+ <_>
+
+ 0 -1 173 1.0577079653739929e-001
+
+ 6.7847460508346558e-002 -7.5728106498718262e-001
+ <_>
+
+ 0 -1 458 2.3821401409804821e-003
+
+ -1.7424334585666656e-001 2.4778348207473755e-001
+ <_>
+
+ 0 -1 365 1.7058081924915314e-002
+
+ -1.0784839093685150e-001 4.7589403390884399e-001
+ <_>
+
+ 0 -1 607 8.4047149866819382e-003
+
+ -1.6299639642238617e-001 2.5596112012863159e-001
+ <_>
+
+ 0 -1 669 6.4883893355727196e-003
+
+ -1.0720382630825043e-001 3.8739699125289917e-001
+ <_>
+
+ 0 -1 719 1.3821164146065712e-002
+
+ -1.0847893357276917e-001 3.7734055519104004e-001
+ <_>
+
+ 0 -1 730 6.3344044610857964e-004
+
+ 1.0369951277971268e-001 -4.1177383065223694e-001
+ <_>
+
+ 0 -1 649 2.5448631495237350e-002
+
+ -1.0093591362237930e-001 4.0250420570373535e-001
+ <_>
+
+ 0 -1 628 -6.6858739592134953e-003
+
+ 3.2515993714332581e-001 -1.2071736156940460e-001
+ <_>
+
+ 0 -1 847 1.5770105645060539e-002
+
+ -8.7370425462722778e-002 4.2094638943672180e-001
+ <_>
+
+ 0 -1 442 -6.1724921688437462e-003
+
+ 3.5812416672706604e-001 -9.5346152782440186e-002
+ <_>
+
+ 0 -1 456 -2.5777951814234257e-003
+
+ -4.5544171333312988e-001 9.0092077851295471e-002
+ <_>
+
+ 0 -1 535 -2.6305086910724640e-002
+
+ -6.4864850044250488e-001 4.1219502687454224e-002
+ <_>
+
+ 0 -1 542 8.0740137491375208e-004
+
+ 4.7109395265579224e-002 -6.0955244302749634e-001
+ <_>
+
+ 0 -1 68 1.4135822653770447e-002
+
+ -1.9197317957878113e-001 1.6882354021072388e-001
+ <_>
+
+ 0 -1 294 -9.4971470534801483e-003
+
+ 3.6509966850280762e-001 -9.9222034215927124e-002
+ <_>
+
+ 0 -1 542 -7.4699660763144493e-004
+
+ -4.7985881567001343e-001 6.8735912442207336e-002
+ <_>
+
+ 0 -1 500 1.6889899969100952e-002
+
+ -1.3929726183414459e-001 2.3301121592521667e-001
+ <_>
+
+ 0 -1 779 2.3306370712816715e-003
+
+ -8.4623180329799652e-002 3.3656537532806396e-001
+ <_>
+
+ 0 -1 778 8.7781455367803574e-003
+
+ -1.1189370602369308e-001 2.9142591357231140e-001
+ <_>
+
+ 0 -1 99 -1.5908680856227875e-002
+
+ 1.9325265288352966e-001 -1.6028961539268494e-001
+ <_>
+
+ 0 -1 744 1.9255496561527252e-002
+
+ 7.6108239591121674e-002 -3.9211651682853699e-001
+ <_>
+
+ 0 -1 914 5.0490582361817360e-003
+
+ -8.9932329952716827e-002 3.1994494795799255e-001
+ <_>
+
+ 0 -1 603 -2.4455685634166002e-003
+
+ -6.3004231452941895e-001 4.6506922692060471e-002
+ <_>
+
+ 0 -1 89 6.4034629613161087e-003
+
+ -1.2222797423601151e-001 2.2714875638484955e-001
+ <_>
+
+ 0 -1 88 -3.1981021165847778e-003
+
+ 2.8711226582527161e-001 -1.0478579252958298e-001
+ <_>
+
+ 0 -1 732 1.7579109407961369e-003
+
+ 5.1840141415596008e-002 -5.7752221822738647e-001
+ <_>
+
+ 0 -1 526 -2.6384353637695313e-002
+
+ -7.5548434257507324e-001 3.1215203925967216e-002
+ <_>
+
+ 0 -1 482 1.3470241427421570e-001
+
+ 4.5115962624549866e-002 -4.8610612750053406e-001
+ <_>
+
+ 0 -1 855 -2.5868147611618042e-002
+
+ -4.9144035577774048e-001 5.0334099680185318e-002
+ <_>
+
+ 0 -1 164 1.0719317197799683e-001
+
+ -1.4267221093177795e-001 1.7969062924385071e-001
+ <_>
+
+ 0 -1 781 -1.5155045315623283e-002
+
+ 4.2710477113723755e-001 -6.6483244299888611e-002
+ <_>
+
+ 0 -1 728 -3.8210965692996979e-002
+
+ -6.1093688011169434e-001 4.7181066125631332e-002
+ <_>
+
+ 0 -1 257 1.7748951911926270e-002
+
+ -6.6903516650199890e-002 4.1605830192565918e-001
+ <_>
+
+ 0 -1 272 -1.3678016141057014e-002
+
+ 3.2274204492568970e-001 -8.7739549577236176e-002
+ <_>
+
+ 0 -1 81 1.4629539102315903e-002
+
+ -1.1059324443340302e-001 2.4449653923511505e-001
+ <_>
+
+ 0 -1 754 6.4607188105583191e-003
+
+ -8.1396102905273438e-002 3.1605172157287598e-001
+ <_>
+
+ 0 -1 574 -8.4974901983514428e-004
+
+ 1.5621511638164520e-001 -1.6912016272544861e-001
+ <_>
+
+ 0 -1 332 -6.4049977809190750e-003
+
+ 2.2254464030265808e-001 -1.1970910429954529e-001
+ <_>
+
+ 0 -1 410 4.8453146591782570e-003
+
+ -1.0080187022686005e-001 2.5552451610565186e-001
+ <_>
+
+ 0 -1 694 1.0576892644166946e-002
+
+ -7.1883767843246460e-002 3.2368022203445435e-001
+ <_>
+
+ 0 -1 652 -2.0271514076739550e-003
+
+ 2.1205350756645203e-001 -1.4773385226726532e-001
+ <_>
+
+ 0 -1 379 1.2130783870816231e-003
+
+ -2.2663643956184387e-001 1.0520290583372116e-001
+ <_>
+
+ 0 -1 419 -7.9384088516235352e-002
+
+ -4.4897699356079102e-001 4.9417987465858459e-002
+ <_>
+
+ 0 -1 31 4.3571349233388901e-003
+
+ 3.1063990667462349e-002 -6.9149738550186157e-001
+ <_>
+
+ 0 -1 750 1.9707549363374710e-003
+
+ 4.4843826442956924e-002 -4.5625826716423035e-001
+ <_>
+
+ 0 -1 788 6.2818843871355057e-003
+
+ -9.5382869243621826e-002 2.6746883988380432e-001
+ <_>
+
+ 0 -1 789 -1.3252656906843185e-002
+
+ 4.0820258855819702e-001 -6.0815874487161636e-002
+ <_>
+
+ 0 -1 60 5.0364276394248009e-003
+
+ 9.0342856943607330e-002 -2.5253733992576599e-001
+ <_>
+
+ 0 -1 492 8.9537240564823151e-003
+
+ 3.2092411071062088e-002 -7.0339488983154297e-001
+ <_>
+
+ 0 -1 546 6.8814970552921295e-002
+
+ -7.1046918630599976e-002 3.6507198214530945e-001
+ <_>
+
+ 0 -1 544 -1.2149440124630928e-002
+
+ 3.3089646697044373e-001 -6.6771849989891052e-002
+ <_>
+
+ 0 -1 50 1.9094728631898761e-003
+
+ -1.3490848243236542e-001 1.6960476338863373e-001
+
+ <_>
+ 72
+ -2.3490672111511230e+000
+
+ <_>
+
+ 0 -1 371 1.4795187860727310e-002
+
+ -7.0123827457427979e-001 -2.0484872162342072e-002
+ <_>
+
+ 0 -1 612 2.6377664878964424e-002
+
+ -3.5620382428169250e-001 2.4889869987964630e-001
+ <_>
+
+ 0 -1 165 -1.1034142225980759e-002
+
+ 2.0675517618656158e-001 -3.3259147405624390e-001
+ <_>
+
+ 0 -1 692 -9.2857871204614639e-003
+
+ 4.4594430923461914e-001 -1.4160791039466858e-001
+ <_>
+
+ 0 -1 313 1.1126287281513214e-001
+
+ -7.9181507229804993e-002 6.0241782665252686e-001
+ <_>
+
+ 0 -1 751 3.0388862360268831e-003
+
+ -1.9209611415863037e-001 2.5241580605506897e-001
+ <_>
+
+ 0 -1 874 -2.0801391452550888e-002
+
+ 4.0978202223777771e-001 -9.8037041723728180e-002
+ <_>
+
+ 0 -1 892 1.0280778631567955e-002
+
+ -9.6344605088233948e-002 4.6578553318977356e-001
+ <_>
+
+ 0 -1 894 -5.4509467445313931e-003
+
+ 3.7336015701293945e-001 -1.0564301162958145e-001
+ <_>
+
+ 0 -1 376 -1.8031136132776737e-003
+
+ 3.5322296619415283e-001 -1.2390857189893723e-001
+ <_>
+
+ 0 -1 763 -4.7199074178934097e-003
+
+ 4.1106048226356506e-001 -9.3251600861549377e-002
+ <_>
+
+ 0 -1 323 -6.1694663017988205e-003
+
+ 3.3520108461380005e-001 -1.2836365401744843e-001
+ <_>
+
+ 0 -1 83 -6.9639906287193298e-003
+
+ 2.1963912248611450e-001 -1.8814907968044281e-001
+ <_>
+
+ 0 -1 683 -1.2535721994936466e-002
+
+ 3.8960403203964233e-001 -9.2547819018363953e-002
+ <_>
+
+ 0 -1 690 -1.6924859955906868e-002
+
+ 3.6892804503440857e-001 -9.4779089093208313e-002
+ <_>
+
+ 0 -1 54 1.6596701461821795e-003
+
+ -1.9850541651248932e-001 1.8709312379360199e-001
+ <_>
+
+ 0 -1 55 2.7687277644872665e-002
+
+ 7.0031657814979553e-002 -4.7238609194755554e-001
+ <_>
+
+ 0 -1 120 -1.1841375380754471e-002
+
+ 2.6792368292808533e-001 -1.2015427649021149e-001
+ <_>
+
+ 0 -1 261 -1.1048562824726105e-002
+
+ 3.6024233698844910e-001 -1.0290746390819550e-001
+ <_>
+
+ 0 -1 7 -6.2395762652158737e-002
+
+ -5.7112109661102295e-001 6.2251534312963486e-002
+ <_>
+
+ 0 -1 115 1.6063985228538513e-001
+
+ -7.0866517722606659e-002 4.5665851235389709e-001
+ <_>
+
+ 0 -1 232 2.1094676852226257e-001
+
+ 4.6763692051172256e-002 -7.0770156383514404e-001
+ <_>
+
+ 0 -1 358 -3.6897901445627213e-003
+
+ 3.7905600666999817e-001 -8.1804625689983368e-002
+ <_>
+
+ 0 -1 434 1.9055651500821114e-002
+
+ -1.0166674852371216e-001 2.7208462357521057e-001
+ <_>
+
+ 0 -1 947 -2.0279071759432554e-003
+
+ 3.1354761123657227e-001 -8.6894899606704712e-002
+ <_>
+
+ 0 -1 571 1.0916183236986399e-003
+
+ 7.6082363724708557e-002 -3.2986941933631897e-001
+ <_>
+
+ 0 -1 405 -5.5616937577724457e-002
+
+ -5.0169217586517334e-001 4.7203768044710159e-002
+ <_>
+
+ 0 -1 600 -2.1859644912183285e-003
+
+ -4.1108477115631104e-001 5.6136883795261383e-002
+ <_>
+
+ 0 -1 422 6.1606548726558685e-002
+
+ 3.8405187427997589e-002 -6.3146471977233887e-001
+ <_>
+
+ 0 -1 562 4.4989854097366333e-002
+
+ -7.8799270093441010e-002 3.5685274004936218e-001
+ <_>
+
+ 0 -1 900 1.4128099195659161e-002
+
+ -5.1783677190542221e-002 4.5928877592086792e-001
+ <_>
+
+ 0 -1 503 -2.2787526249885559e-002
+
+ -4.2496410012245178e-001 5.9822574257850647e-002
+ <_>
+
+ 0 -1 82 1.0302955284714699e-002
+
+ -1.5051785111427307e-001 1.8300771713256836e-001
+ <_>
+
+ 0 -1 733 -1.7985476879402995e-003
+
+ -5.0104391574859619e-001 5.1810134202241898e-002
+ <_>
+
+ 0 -1 783 -1.0919184423983097e-003
+
+ 1.6831028461456299e-001 -1.5063883364200592e-001
+ <_>
+
+ 0 -1 221 6.8745255470275879e-002
+
+ 2.5853699073195457e-002 -8.8202834129333496e-001
+ <_>
+
+ 0 -1 92 8.0964900553226471e-003
+
+ -1.4373345673084259e-001 1.6309750080108643e-001
+ <_>
+
+ 0 -1 669 -9.0615758672356606e-003
+
+ 4.4120463728904724e-001 -5.8328684419393539e-002
+ <_>
+
+ 0 -1 780 1.5157302841544151e-002
+
+ -6.2339264899492264e-002 3.7585461139678955e-001
+ <_>
+
+ 0 -1 852 -9.6248798072338104e-003
+
+ 3.3618140220642090e-001 -7.2854258120059967e-002
+ <_>
+
+ 0 -1 264 -2.6485668495297432e-003
+
+ -3.6842566728591919e-001 7.0426821708679199e-002
+ <_>
+
+ 0 -1 793 -2.5783948600292206e-002
+
+ -4.3915954232215881e-001 4.4346898794174194e-002
+ <_>
+
+ 0 -1 691 3.8045123219490051e-002
+
+ 2.0367870107293129e-002 -9.1361635923385620e-001
+ <_>
+
+ 0 -1 885 6.5762884914875031e-003
+
+ -7.7705778181552887e-002 2.7798372507095337e-001
+ <_>
+
+ 0 -1 527 1.4522124081850052e-002
+
+ -1.5169607102870941e-001 1.6986666619777679e-001
+ <_>
+
+ 0 -1 263 -2.9386302456259727e-002
+
+ 1.5261377394199371e-001 -1.4140434563159943e-001
+ <_>
+
+ 0 -1 252 -1.8363123759627342e-002
+
+ 5.7111293077468872e-001 -4.9465496093034744e-002
+ <_>
+
+ 0 -1 674 -5.1241345703601837e-002
+
+ -5.5350369215011597e-001 4.6895623207092285e-002
+ <_>
+
+ 0 -1 277 2.9151788912713528e-003
+
+ -9.0461745858192444e-002 2.4859617650508881e-001
+ <_>
+
+ 0 -1 749 1.7963855061680079e-003
+
+ 4.5411933213472366e-002 -5.4377090930938721e-001
+ <_>
+
+ 0 -1 198 4.7771027311682701e-003
+
+ -1.8385021388530731e-001 1.1213029175996780e-001
+ <_>
+
+ 0 -1 850 -1.1631837114691734e-003
+
+ 1.9307336211204529e-001 -1.0863032937049866e-001
+ <_>
+
+ 0 -1 739 -6.7155435681343079e-003
+
+ 3.4966903924942017e-001 -5.8376740664243698e-002
+ <_>
+
+ 0 -1 195 -6.6494196653366089e-002
+
+ 3.4874725341796875e-001 -5.7571310549974442e-002
+ <_>
+
+ 0 -1 750 -1.8951734527945518e-003
+
+ -5.0567263364791870e-001 4.2631916701793671e-002
+ <_>
+
+ 0 -1 832 -4.3506296351552010e-003
+
+ -5.0467538833618164e-001 3.8686964660882950e-002
+ <_>
+
+ 0 -1 725 5.5216029286384583e-003
+
+ -8.3722010254859924e-002 2.5723373889923096e-001
+ <_>
+
+ 0 -1 727 1.4174621552228928e-002
+
+ -5.2497696131467819e-002 4.3525427579879761e-001
+ <_>
+
+ 0 -1 25 1.1252675205469131e-002
+
+ -1.3312049210071564e-001 1.6167336702346802e-001
+ <_>
+
+ 0 -1 67 7.9240947961807251e-003
+
+ -1.1959484219551086e-001 1.6835211217403412e-001
+ <_>
+
+ 0 -1 784 1.0558717185631394e-003
+
+ -1.2297991663217545e-001 1.5906786918640137e-001
+ <_>
+
+ 0 -1 615 4.5906797051429749e-002
+
+ 3.6611214280128479e-002 -5.4427564144134521e-001
+ <_>
+
+ 0 -1 702 -9.5631275326013565e-003
+
+ 2.2376507520675659e-001 -9.2235445976257324e-002
+ <_>
+
+ 0 -1 290 -1.7671093344688416e-002
+
+ -6.2817609310150146e-001 3.3949319273233414e-002
+ <_>
+
+ 0 -1 764 -1.7188221681863070e-003
+
+ 2.0224046707153320e-001 -1.0232327878475189e-001
+ <_>
+
+ 0 -1 367 1.5140373259782791e-002
+
+ -5.6504372507333755e-002 3.4895980358123779e-001
+ <_>
+
+ 0 -1 366 -2.8949489817023277e-002
+
+ 3.1860530376434326e-001 -6.4782403409481049e-002
+ <_>
+
+ 0 -1 937 1.1647377163171768e-002
+
+ -3.6289941519498825e-002 5.4892385005950928e-001
+ <_>
+
+ 0 -1 741 -7.8217741101980209e-003
+
+ 2.0226673781871796e-001 -9.2000789940357208e-002
+ <_>
+
+ 0 -1 800 -8.4432046860456467e-003
+
+ 1.7921546101570129e-001 -1.0415823757648468e-001
+ <_>
+
+ 0 -1 854 -1.5566672198474407e-002
+
+ 3.9981749653816223e-001 -5.3077172487974167e-002
+ <_>
+
+ 0 -1 587 -1.2464943341910839e-002
+
+ 2.2552676498889923e-001 -9.0897649526596069e-002
+
+ <_>
+ 77
+ -2.2761957645416260e+000
+
+ <_>
+
+ 0 -1 402 -2.0046032965183258e-002
+
+ 2.7538803219795227e-001 -6.1105114221572876e-001
+ <_>
+
+ 0 -1 430 9.1837458312511444e-003
+
+ -4.0790805220603943e-001 2.0902955532073975e-001
+ <_>
+
+ 0 -1 21 4.2203110642731190e-003
+
+ -2.1331593394279480e-001 2.8156790137290955e-001
+ <_>
+
+ 0 -1 673 -1.4000188559293747e-002
+
+ 5.4547309875488281e-001 -9.6670299768447876e-002
+ <_>
+
+ 0 -1 926 -7.1464567445218563e-003
+
+ 4.6416798233985901e-001 -9.1218575835227966e-002
+ <_>
+
+ 0 -1 389 -1.0070230066776276e-001
+
+ -6.6349637508392334e-001 7.1100234985351563e-002
+ <_>
+
+ 0 -1 95 1.0696215555071831e-002
+
+ -1.9745405018329620e-001 2.0773608982563019e-001
+ <_>
+
+ 0 -1 149 -3.5202980041503906e-002
+
+ -7.6735103130340576e-001 5.0265740603208542e-002
+ <_>
+
+ 0 -1 311 7.4009604752063751e-002
+
+ -7.4828110635280609e-002 5.6469208002090454e-001
+ <_>
+
+ 0 -1 849 3.9156894199550152e-003
+
+ -1.3954170048236847e-001 2.7583837509155273e-001
+ <_>
+
+ 0 -1 335 -5.3920033387839794e-003
+
+ 3.0497005581855774e-001 -1.1606794595718384e-001
+ <_>
+
+ 0 -1 861 3.7412224337458611e-003
+
+ -7.9430311918258667e-002 4.4621026515960693e-001
+ <_>
+
+ 0 -1 868 7.1699996478855610e-003
+
+ -1.0092698037624359e-001 3.4257224202156067e-001
+ <_>
+
+ 0 -1 256 2.1885338425636292e-001
+
+ 5.8548614382743835e-002 -6.5264624357223511e-001
+ <_>
+
+ 0 -1 771 -5.3951903246343136e-003
+
+ 2.4228222668170929e-001 -1.3535094261169434e-001
+ <_>
+
+ 0 -1 695 -1.1738229077309370e-003
+
+ -4.7875782847404480e-001 6.8366907536983490e-002
+ <_>
+
+ 0 -1 666 2.1457400172948837e-002
+
+ -7.1118980646133423e-002 4.5637446641921997e-001
+ <_>
+
+ 0 -1 309 1.2115674093365669e-002
+
+ -5.8202955871820450e-002 4.6163806319236755e-001
+ <_>
+
+ 0 -1 273 -1.8007406964898109e-002
+
+ 3.2520860433578491e-001 -8.0533631145954132e-002
+ <_>
+
+ 0 -1 837 -1.2486811727285385e-002
+
+ 4.1279473900794983e-001 -5.1714207977056503e-002
+ <_>
+
+ 0 -1 820 -6.8574929609894753e-003
+
+ 2.6760685443878174e-001 -1.0764075815677643e-001
+ <_>
+
+ 0 -1 823 1.5099495649337769e-002
+
+ -7.4429087340831757e-002 4.6331611275672913e-001
+ <_>
+
+ 0 -1 418 5.6357895955443382e-003
+
+ 4.3343700468540192e-002 -6.8444931507110596e-001
+ <_>
+
+ 0 -1 496 -3.8149006664752960e-002
+
+ -5.0210982561111450e-001 4.6030189841985703e-002
+ <_>
+
+ 0 -1 488 6.9609917700290680e-002
+
+ -1.1487975716590881e-001 2.4527166783809662e-001
+ <_>
+
+ 0 -1 718 -1.4793819282203913e-003
+
+ -4.9200877547264099e-001 5.0612244755029678e-002
+ <_>
+
+ 0 -1 279 1.5615550801157951e-003
+
+ -1.4539672434329987e-001 1.8345473706722260e-001
+ <_>
+
+ 0 -1 444 -7.9339537769556046e-003
+
+ -6.9242167472839355e-001 3.2313633710145950e-002
+ <_>
+
+ 0 -1 69 3.8695998489856720e-002
+
+ 3.5442691296339035e-002 -5.8349174261093140e-001
+ <_>
+
+ 0 -1 27 3.4779291599988937e-002
+
+ -1.5399172902107239e-001 1.6672950983047485e-001
+ <_>
+
+ 0 -1 411 1.0367618873715401e-002
+
+ -1.0087994486093521e-001 2.7080667018890381e-001
+ <_>
+
+ 0 -1 924 -1.2352936901152134e-003
+
+ 2.6111871004104614e-001 -8.5407368838787079e-002
+ <_>
+
+ 0 -1 641 -3.8098993245512247e-003
+
+ -6.4659863710403442e-001 3.7423413246870041e-002
+ <_>
+
+ 0 -1 137 1.4491343870759010e-002
+
+ 1.9647786393761635e-002 -9.1479778289794922e-001
+ <_>
+
+ 0 -1 394 -8.3385318517684937e-002
+
+ -7.1166336536407471e-001 2.2575991228222847e-002
+ <_>
+
+ 0 -1 780 -1.9848600029945374e-002
+
+ 5.5954068899154663e-001 -4.1730873286724091e-002
+ <_>
+
+ 0 -1 241 -2.0697467029094696e-002
+
+ 3.3735945820808411e-001 -6.2523342669010162e-002
+ <_>
+
+ 0 -1 300 -1.1017382144927979e-002
+
+ 2.6414296030998230e-001 -1.0402554273605347e-001
+ <_>
+
+ 0 -1 78 2.7749380096793175e-003
+
+ -1.7511576414108276e-001 1.1715058237314224e-001
+ <_>
+
+ 0 -1 648 -1.5251778066158295e-002
+
+ 4.3819862604141235e-001 -4.5249339193105698e-002
+ <_>
+
+ 0 -1 108 1.1041477322578430e-002
+
+ 3.4502815455198288e-002 -6.0594552755355835e-001
+ <_>
+
+ 0 -1 112 -1.2095808982849121e-002
+
+ 2.3661912977695465e-001 -9.1371931135654449e-002
+ <_>
+
+ 0 -1 157 2.7025766670703888e-002
+
+ -8.9995227754116058e-002 2.4357070028781891e-001
+ <_>
+
+ 0 -1 253 2.0237984135746956e-002
+
+ -8.2986801862716675e-002 2.5786581635475159e-001
+ <_>
+
+ 0 -1 179 -2.5734171271324158e-002
+
+ -8.0328714847564697e-001 2.3963116109371185e-002
+ <_>
+
+ 0 -1 898 -7.0260283537209034e-003
+
+ 3.1706759333610535e-001 -6.8345665931701660e-002
+ <_>
+
+ 0 -1 785 8.9800115674734116e-003
+
+ -1.0068616271018982e-001 1.8837621808052063e-001
+ <_>
+
+ 0 -1 16 7.1165725588798523e-002
+
+ 2.9139470309019089e-002 -7.1776688098907471e-001
+ <_>
+
+ 0 -1 491 1.2540835887193680e-002
+
+ 2.8786318376660347e-002 -5.7155269384384155e-001
+ <_>
+
+ 0 -1 686 1.4826809987425804e-002
+
+ -5.3431484848260880e-002 3.7567591667175293e-001
+ <_>
+
+ 0 -1 756 -2.0885471254587173e-002
+
+ -5.5986213684082031e-001 3.5628255456686020e-002
+ <_>
+
+ 0 -1 395 -4.4493626803159714e-002
+
+ -6.0325270891189575e-001 2.8809506446123123e-002
+ <_>
+
+ 0 -1 469 -1.1605422478169203e-003
+
+ 1.3856917619705200e-001 -1.3231372833251953e-001
+ <_>
+
+ 0 -1 10 1.0227273404598236e-001
+
+ -6.3532300293445587e-002 3.1242474913597107e-001
+ <_>
+
+ 0 -1 134 -2.9290396720170975e-002
+
+ 1.9631637632846832e-001 -1.1773347854614258e-001
+ <_>
+
+ 0 -1 249 -2.7526013553142548e-002
+
+ -5.4162657260894775e-001 3.7284608930349350e-002
+ <_>
+
+ 0 -1 192 -6.8295732140541077e-002
+
+ -6.8661803007125854e-001 2.2030472755432129e-002
+ <_>
+
+ 0 -1 65 3.7252403795719147e-002
+
+ 1.4609245583415031e-002 -9.1920310258865356e-001
+ <_>
+
+ 0 -1 748 1.5438124537467957e-003
+
+ 3.9837431162595749e-002 -3.8516902923583984e-001
+ <_>
+
+ 0 -1 361 1.8146948888897896e-002
+
+ -8.1836819648742676e-002 2.2508986294269562e-001
+ <_>
+
+ 0 -1 153 -2.9618924017995596e-003
+
+ 1.7523658275604248e-001 -1.1428176611661911e-001
+ <_>
+
+ 0 -1 591 1.8150422722101212e-002
+
+ 3.3836413174867630e-002 -5.2116078138351440e-001
+ <_>
+
+ 0 -1 4 -3.3758711069822311e-002
+
+ 3.9958250522613525e-001 -4.5763287693262100e-002
+ <_>
+
+ 0 -1 79 -1.4841533266007900e-003
+
+ 1.6825924813747406e-001 -1.0908807814121246e-001
+ <_>
+
+ 0 -1 255 1.3028753455728292e-003
+
+ -1.0276191681623459e-001 1.8539939820766449e-001
+ <_>
+
+ 0 -1 920 1.0365190915763378e-002
+
+ -3.8271062076091766e-002 4.6489492058753967e-001
+ <_>
+
+ 0 -1 917 6.0222409665584564e-003
+
+ -6.5577961504459381e-002 2.7879896759986877e-001
+ <_>
+
+ 0 -1 105 1.0119758546352386e-001
+
+ -2.8418583795428276e-002 5.9041601419448853e-001
+ <_>
+
+ 0 -1 9 7.1856275200843811e-002
+
+ 2.8918648138642311e-002 -7.6654183864593506e-001
+ <_>
+
+ 0 -1 921 2.6606030762195587e-002
+
+ -6.2962368130683899e-002 3.0662769079208374e-001
+ <_>
+
+ 0 -1 384 1.5946386381983757e-002
+
+ -5.4566886276006699e-002 3.1234565377235413e-001
+ <_>
+
+ 0 -1 493 -8.2057155668735504e-003
+
+ 2.1779660880565643e-001 -8.3498664200305939e-002
+ <_>
+
+ 0 -1 270 1.2946184724569321e-002
+
+ 3.5179842263460159e-002 -5.1891100406646729e-001
+ <_>
+
+ 0 -1 141 -8.8035371154546738e-003
+
+ -4.6259808540344238e-001 3.4376677125692368e-002
+ <_>
+
+ 0 -1 477 -4.6518794260919094e-004
+
+ -2.6353842020034790e-001 6.2585823237895966e-002
+ <_>
+
+ 0 -1 743 2.4100966751575470e-002
+
+ 2.1097198128700256e-002 -7.4997889995574951e-001
+ <_>
+
+ 0 -1 170 -6.7410841584205627e-003
+
+ -8.7101519107818604e-001 1.3417764566838741e-002
+
+ <_>
+ 88
+ -2.2931215763092041e+000
+
+ <_>
+
+ 0 -1 400 -3.4661620855331421e-002
+
+ 2.1858149766921997e-001 -6.1113607883453369e-001
+ <_>
+
+ 0 -1 130 -8.0369092524051666e-002
+
+ 2.4827747046947479e-001 -3.6355212330818176e-001
+ <_>
+
+ 0 -1 911 2.5022951886057854e-003
+
+ -2.3158867657184601e-001 2.7031692862510681e-001
+ <_>
+
+ 0 -1 946 -6.8189981393516064e-003
+
+ 4.1294625401496887e-001 -1.2155807018280029e-001
+ <_>
+
+ 0 -1 459 3.2973052002489567e-003
+
+ -1.9231098890304565e-001 2.4345158040523529e-001
+ <_>
+
+ 0 -1 484 -6.6328542307019234e-003
+
+ -5.9019386768341064e-001 6.9055899977684021e-002
+ <_>
+
+ 0 -1 318 4.7803454101085663e-002
+
+ -5.1415871828794479e-002 5.9312266111373901e-001
+ <_>
+
+ 0 -1 350 1.3619948178529739e-002
+
+ -1.3920906186103821e-001 2.6931121945381165e-001
+ <_>
+
+ 0 -1 383 -3.7001757882535458e-003
+
+ -2.6682609319686890e-001 1.4955024421215057e-001
+ <_>
+
+ 0 -1 481 1.5951462090015411e-002
+
+ 3.0041305348277092e-002 -6.7943179607391357e-001
+ <_>
+
+ 0 -1 478 2.3432243615388870e-003
+
+ 4.9472317099571228e-002 -7.3165643215179443e-001
+ <_>
+
+ 0 -1 423 -4.0219593793153763e-003
+
+ -3.9633533358573914e-001 8.4367558360099792e-002
+ <_>
+
+ 0 -1 942 1.3890343718230724e-002
+
+ -1.1078495532274246e-001 3.0365592241287231e-001
+ <_>
+
+ 0 -1 777 -1.2505413033068180e-003
+
+ 2.0580539107322693e-001 -1.3080060482025146e-001
+ <_>
+
+ 0 -1 132 1.0764427483081818e-001
+
+ 7.7789157629013062e-002 -3.3906123042106628e-001
+ <_>
+
+ 0 -1 631 4.3811961077153683e-003
+
+ -1.1201550066471100e-001 2.5211933255195618e-001
+ <_>
+
+ 0 -1 686 -1.2142172083258629e-002
+
+ 3.7872961163520813e-001 -7.7070862054824829e-002
+ <_>
+
+ 0 -1 865 -4.4353669509291649e-003
+
+ 2.1270920336246490e-001 -1.2447933107614517e-001
+ <_>
+
+ 0 -1 619 1.4904401032254100e-003
+
+ 5.6515082716941833e-002 -5.1137989759445190e-001
+ <_>
+
+ 0 -1 792 -1.4859709888696671e-002
+
+ 4.4488805532455444e-001 -6.3839435577392578e-002
+ <_>
+
+ 0 -1 515 2.5369194336235523e-003
+
+ -1.4258751273155212e-001 1.8267530202865601e-001
+ <_>
+
+ 0 -1 558 -3.8392089772969484e-003
+
+ 2.3361504077911377e-001 -1.1508828401565552e-001
+ <_>
+
+ 0 -1 717 1.1982237920165062e-003
+
+ 4.8276327550411224e-002 -4.9198591709136963e-001
+ <_>
+
+ 0 -1 378 -1.8510858062654734e-003
+
+ 1.4056424796581268e-001 -1.6454231739044189e-001
+ <_>
+
+ 0 -1 918 -1.2120591476559639e-002
+
+ 3.7157261371612549e-001 -6.2530189752578735e-002
+ <_>
+
+ 0 -1 401 1.1447809636592865e-002
+
+ 4.1043214499950409e-002 -5.2705597877502441e-001
+ <_>
+
+ 0 -1 511 -1.4917021617293358e-002
+
+ 4.0471947193145752e-001 -5.6559596210718155e-002
+ <_>
+
+ 0 -1 472 3.1782940030097961e-002
+
+ 3.1669221818447113e-002 -7.1189236640930176e-001
+ <_>
+
+ 0 -1 204 2.8533251024782658e-003
+
+ -1.3680589199066162e-001 1.5116590261459351e-001
+ <_>
+
+ 0 -1 780 -2.0387873053550720e-002
+
+ 5.3041487932205200e-001 -3.6561626940965652e-002
+ <_>
+
+ 0 -1 225 1.6838125884532928e-002
+
+ -7.6846949756145477e-002 2.3742672801017761e-001
+ <_>
+
+ 0 -1 109 6.1867576092481613e-002
+
+ 3.4019146114587784e-002 -5.8948117494583130e-001
+ <_>
+
+ 0 -1 36 1.9018281251192093e-002
+
+ -8.8034287095069885e-002 2.8218820691108704e-001
+ <_>
+
+ 0 -1 288 9.3320291489362717e-003
+
+ 3.1055718660354614e-002 -6.0995835065841675e-001
+ <_>
+
+ 0 -1 553 -1.7446001293137670e-003
+
+ -3.1894925236701965e-001 5.7640552520751953e-002
+ <_>
+
+ 0 -1 497 -3.7551252171397209e-004
+
+ -2.9193779826164246e-001 6.5971598029136658e-002
+ <_>
+
+ 0 -1 906 -3.6254348233342171e-003
+
+ -5.2228099107742310e-001 3.2974440604448318e-002
+ <_>
+
+ 0 -1 49 3.1154025346040726e-003
+
+ 3.4256361424922943e-002 -4.9392226338386536e-001
+ <_>
+
+ 0 -1 761 -6.5814116969704628e-003
+
+ -8.5536497831344604e-001 1.7195183783769608e-002
+ <_>
+
+ 0 -1 154 3.6019994877278805e-004
+
+ -1.1677443981170654e-001 1.4939773082733154e-001
+ <_>
+
+ 0 -1 42 2.1521452814340591e-002
+
+ 6.1724990606307983e-002 -3.0582705140113831e-001
+ <_>
+
+ 0 -1 304 -3.1574545428156853e-003
+
+ 2.7675440907478333e-001 -7.9728044569492340e-002
+ <_>
+
+ 0 -1 608 6.8585420958697796e-003
+
+ -4.5498296618461609e-002 4.0476050972938538e-001
+ <_>
+
+ 0 -1 201 2.3597612977027893e-002
+
+ -6.8263813853263855e-002 2.7455106377601624e-001
+ <_>
+
+ 0 -1 182 4.1193626821041107e-002
+
+ 2.7521848678588867e-002 -7.5676482915878296e-001
+ <_>
+
+ 0 -1 133 -1.2081373482942581e-002
+
+ -6.3366323709487915e-001 2.1798284724354744e-002
+ <_>
+
+ 0 -1 716 -4.3834196403622627e-003
+
+ 2.2090788185596466e-001 -8.4348171949386597e-002
+ <_>
+
+ 0 -1 619 -9.1258285101503134e-004
+
+ -3.3701941370964050e-001 5.0720885396003723e-002
+ <_>
+
+ 0 -1 675 -8.5975639522075653e-003
+
+ 1.1742196232080460e-001 -1.5156917273998260e-001
+ <_>
+
+ 0 -1 904 -7.4663115665316582e-003
+
+ 4.0097141265869141e-001 -4.4417705386877060e-002
+ <_>
+
+ 0 -1 193 1.2276999652385712e-002
+
+ -7.3920600116252899e-002 2.5140073895454407e-001
+ <_>
+
+ 0 -1 283 -2.6504354551434517e-002
+
+ 1.3177506625652313e-001 -1.5368436276912689e-001
+ <_>
+
+ 0 -1 359 -2.9700677841901779e-002
+
+ -5.3993326425552368e-001 3.4572057425975800e-002
+ <_>
+
+ 0 -1 549 -1.0448409244418144e-002
+
+ 4.0107232332229614e-001 -4.6194877475500107e-002
+ <_>
+
+ 0 -1 274 5.0177536904811859e-003
+
+ -6.5788470208644867e-002 2.5757649540901184e-001
+ <_>
+
+ 0 -1 509 2.3238372057676315e-002
+
+ 2.3455925285816193e-002 -7.7699542045593262e-001
+ <_>
+
+ 0 -1 908 -4.9220167100429535e-002
+
+ 3.9117750525474548e-001 -4.7477778047323227e-002
+ <_>
+
+ 0 -1 936 -9.7046373412013054e-003
+
+ 3.3891412615776062e-001 -5.0453528761863708e-002
+ <_>
+
+ 0 -1 856 1.6913980245590210e-002
+
+ 4.0467191487550735e-002 -4.3838000297546387e-001
+ <_>
+
+ 0 -1 129 -7.5155749917030334e-002
+
+ -6.0346192121505737e-001 2.7455519884824753e-002
+ <_>
+
+ 0 -1 436 1.1202652007341385e-002
+
+ 2.4983508512377739e-002 -5.8596074581146240e-001
+ <_>
+
+ 0 -1 266 -3.9950847625732422e-002
+
+ -5.3495115041732788e-001 2.9331879690289497e-002
+ <_>
+
+ 0 -1 1 7.1143209934234619e-003
+
+ 3.1055316329002380e-002 -5.1785355806350708e-001
+ <_>
+
+ 0 -1 930 -2.7165055274963379e-002
+
+ 3.4092447161674500e-001 -4.8697970807552338e-002
+ <_>
+
+ 0 -1 135 1.5079226344823837e-002
+
+ -1.2215464562177658e-001 1.3460277020931244e-001
+ <_>
+
+ 0 -1 842 5.4478123784065247e-003
+
+ -9.0178862214088440e-002 1.9025686383247375e-001
+ <_>
+
+ 0 -1 381 -7.4798073619604111e-003
+
+ 2.4245217442512512e-001 -6.8944938480854034e-002
+ <_>
+
+ 0 -1 412 2.9248408973217010e-002
+
+ -8.9382030069828033e-002 1.9680260121822357e-001
+ <_>
+
+ 0 -1 613 -5.1055247895419598e-003
+
+ -4.0537586808204651e-001 4.3955769389867783e-002
+ <_>
+
+ 0 -1 417 -5.7464219629764557e-002
+
+ -7.8487586975097656e-001 1.8840260803699493e-002
+ <_>
+
+ 0 -1 682 -1.3099622447043657e-003
+
+ 1.2043049931526184e-001 -1.2602043151855469e-001
+ <_>
+
+ 0 -1 409 -1.0759031400084496e-002
+
+ 4.6101579070091248e-001 -3.9381790906190872e-002
+ <_>
+
+ 0 -1 440 -4.4700078666210175e-002
+
+ -4.9018231034278870e-001 3.9805438369512558e-002
+ <_>
+
+ 0 -1 697 2.6103520765900612e-002
+
+ 3.3186998218297958e-002 -4.4388863444328308e-001
+ <_>
+
+ 0 -1 722 -3.0565187335014343e-003
+
+ -3.1978246569633484e-001 4.8716515302658081e-002
+ <_>
+
+ 0 -1 113 6.5829858183860779e-002
+
+ 1.8730893731117249e-002 -7.3743104934692383e-001
+ <_>
+
+ 0 -1 57 2.5423550978302956e-003
+
+ 6.1064947396516800e-002 -2.3935855925083160e-001
+ <_>
+
+ 0 -1 755 -1.7830528318881989e-002
+
+ 3.3646425604820251e-001 -4.3943304568529129e-002
+ <_>
+
+ 0 -1 223 5.9305625036358833e-003
+
+ -6.8004354834556580e-002 2.1438401937484741e-001
+ <_>
+
+ 0 -1 156 -4.7256931662559509e-002
+
+ 2.3610806465148926e-001 -7.9913109540939331e-002
+ <_>
+
+ 0 -1 146 1.7100328579545021e-002
+
+ -4.8104494810104370e-002 3.4734794497489929e-001
+ <_>
+
+ 0 -1 174 -3.4349232912063599e-002
+
+ 1.6535361111164093e-001 -8.9516580104827881e-002
+ <_>
+
+ 0 -1 370 1.6256177332252264e-003
+
+ -7.9110637307167053e-002 1.9441387057304382e-001
+ <_>
+
+ 0 -1 724 -1.8217334523797035e-002
+
+ 4.5723637938499451e-001 -3.1193139031529427e-002
+ <_>
+
+ 0 -1 749 2.1156244911253452e-003
+
+ 2.7684733271598816e-002 -5.4580938816070557e-001
+ <_>
+
+ 0 -1 169 -2.6387263089418411e-002
+
+ 2.4881765246391296e-001 -5.7665079832077026e-002
+ <_>
+
+ 0 -1 18 4.5990861952304840e-002
+
+ -1.2064179033041000e-001 1.2435591220855713e-001
+ <_>
+
+ 0 -1 523 1.0681749880313873e-001
+
+ 5.0562918186187744e-002 -3.4403973817825317e-001
+
+ <_>
+ 85
+ -2.2744355201721191e+000
+
+ <_>
+
+ 0 -1 252 1.6897995024919510e-002
+
+ -6.9196498394012451e-001 -5.5616941303014755e-002
+ <_>
+
+ 0 -1 862 1.1701794341206551e-002
+
+ -2.7923116087913513e-001 3.9880016446113586e-001
+ <_>
+
+ 0 -1 618 2.7141885831952095e-002
+
+ 1.4071331918239594e-001 -4.8508083820343018e-001
+ <_>
+
+ 0 -1 949 -1.4755494194105268e-003
+
+ 3.7315878272056580e-001 -1.4565770328044891e-001
+ <_>
+
+ 0 -1 464 1.5615923330187798e-003
+
+ -9.6974156796932220e-002 3.6338686943054199e-001
+ <_>
+
+ 0 -1 292 -3.5046115517616272e-002
+
+ 6.5541946887969971e-001 -6.3480094075202942e-002
+ <_>
+
+ 0 -1 471 -2.7439640834927559e-003
+
+ -4.4147095084190369e-001 8.3881981670856476e-002
+ <_>
+
+ 0 -1 128 1.3140615075826645e-002
+
+ 6.2391642481088638e-002 -5.2230197191238403e-001
+ <_>
+
+ 0 -1 624 -2.3408148437738419e-002
+
+ -5.7339686155319214e-001 6.4651705324649811e-002
+ <_>
+
+ 0 -1 878 1.9269579788669944e-003
+
+ -1.3906709849834442e-001 2.6013106107711792e-001
+ <_>
+
+ 0 -1 510 9.1457850066944957e-004
+
+ 8.7518453598022461e-002 -4.9381819367408752e-001
+ <_>
+
+ 0 -1 76 -9.2652775347232819e-003
+
+ -4.3321701884269714e-001 5.2230410277843475e-002
+ <_>
+
+ 0 -1 437 -2.0753231365233660e-003
+
+ -5.0082236528396606e-001 6.1019111424684525e-002
+ <_>
+
+ 0 -1 791 1.9411731045693159e-003
+
+ -7.8411623835563660e-002 3.5945037007331848e-001
+ <_>
+
+ 0 -1 774 -1.2042262824252248e-003
+
+ 2.4952164292335510e-001 -1.1495979875326157e-001
+ <_>
+
+ 0 -1 428 4.5398853719234467e-002
+
+ 4.9534358084201813e-002 -5.7811236381530762e-001
+ <_>
+
+ 0 -1 243 1.6548346728086472e-002
+
+ 4.0716260671615601e-002 -5.4614287614822388e-001
+ <_>
+
+ 0 -1 747 -2.6393149048089981e-002
+
+ -6.4222121238708496e-001 3.5461250692605972e-002
+ <_>
+
+ 0 -1 315 -7.9056806862354279e-003
+
+ 2.7603831887245178e-001 -9.6884578466415405e-002
+ <_>
+
+ 0 -1 294 -8.6138453334569931e-003
+
+ 3.4293037652969360e-001 -9.2569984495639801e-002
+ <_>
+
+ 0 -1 220 1.2120688334107399e-002
+
+ 4.1071321815252304e-002 -5.9789633750915527e-001
+ <_>
+
+ 0 -1 213 -2.3794029839336872e-003
+
+ 1.7102584242820740e-001 -1.3294184207916260e-001
+ <_>
+
+ 0 -1 667 1.5191107988357544e-002
+
+ -5.9681247919797897e-002 3.9729467034339905e-001
+ <_>
+
+ 0 -1 497 -9.4484502915292978e-004
+
+ -4.9290084838867188e-001 4.8412941396236420e-002
+ <_>
+
+ 0 -1 110 -7.5291972607374191e-003
+
+ -4.4807717204093933e-001 4.6233657747507095e-002
+ <_>
+
+ 0 -1 226 2.0139738917350769e-002
+
+ -8.7880477309226990e-002 2.5611591339111328e-001
+ <_>
+
+ 0 -1 934 -6.2278993427753448e-003
+
+ 3.8167408108711243e-001 -5.7190407067537308e-002
+ <_>
+
+ 0 -1 485 -1.4294605702161789e-002
+
+ 2.2094787657260895e-001 -1.0475759208202362e-001
+ <_>
+
+ 0 -1 707 -5.4574096575379372e-003
+
+ 2.4806049466133118e-001 -8.7989374995231628e-002
+ <_>
+
+ 0 -1 928 1.1277779936790466e-002
+
+ -6.8190395832061768e-002 3.0197840929031372e-001
+ <_>
+
+ 0 -1 193 1.2542145326733589e-002
+
+ -7.4142687022686005e-002 2.5129452347755432e-001
+ <_>
+
+ 0 -1 161 -1.0840824991464615e-001
+
+ -6.1061251163482666e-001 3.2729376107454300e-002
+ <_>
+
+ 0 -1 403 1.5083145117387176e-003
+
+ -7.0102758705615997e-002 3.0823647975921631e-001
+ <_>
+
+ 0 -1 745 -6.4324252307415009e-002
+
+ -7.6457482576370239e-001 2.8049679473042488e-002
+ <_>
+
+ 0 -1 635 -1.0857153683900833e-002
+
+ 3.0212178826332092e-001 -6.9806925952434540e-002
+ <_>
+
+ 0 -1 93 5.6619346141815186e-002
+
+ -1.2564770877361298e-001 1.7084783315658569e-001
+ <_>
+
+ 0 -1 576 -2.4015609174966812e-002
+
+ -4.6767771244049072e-001 4.4055789709091187e-002
+ <_>
+
+ 0 -1 554 1.6571693122386932e-002
+
+ -1.5079098939895630e-001 1.3097193837165833e-001
+ <_>
+
+ 0 -1 452 -1.3210725039243698e-002
+
+ 4.0740290284156799e-001 -4.6674277633428574e-002
+ <_>
+
+ 0 -1 121 -9.6322391182184219e-003
+
+ -3.4347525238990784e-001 5.1074773073196411e-002
+ <_>
+
+ 0 -1 155 1.2867329642176628e-002
+
+ -9.5492877066135406e-002 1.9662295281887054e-001
+ <_>
+
+ 0 -1 915 2.5710439309477806e-002
+
+ 2.4007089436054230e-002 -7.1648633480072021e-001
+ <_>
+
+ 0 -1 116 -7.6815150678157806e-003
+
+ -6.2318617105484009e-001 2.3343794047832489e-002
+ <_>
+
+ 0 -1 709 -3.0568044167011976e-003
+
+ 1.6469573974609375e-001 -1.0857288539409637e-001
+ <_>
+
+ 0 -1 35 7.0850662887096405e-002
+
+ 2.7203138917684555e-002 -6.5618228912353516e-001
+ <_>
+
+ 0 -1 639 -1.9809347577393055e-003
+
+ -6.1460441350936890e-001 2.4520153179764748e-002
+ <_>
+
+ 0 -1 236 7.0611112751066685e-003
+
+ -7.4253976345062256e-002 2.5537955760955811e-001
+ <_>
+
+ 0 -1 186 3.0076294206082821e-003
+
+ -9.6944920718669891e-002 2.4430949985980988e-001
+ <_>
+
+ 0 -1 172 -3.0732229351997375e-002
+
+ -6.0257941484451294e-001 2.9267333447933197e-002
+ <_>
+
+ 0 -1 450 1.6364458948373795e-002
+
+ 2.3035932332277298e-002 -6.2698912620544434e-001
+ <_>
+
+ 0 -1 114 1.4988467097282410e-001
+
+ -4.8197094351053238e-002 3.9452686905860901e-001
+ <_>
+
+ 0 -1 197 -8.2194441929459572e-003
+
+ 1.0664895921945572e-001 -1.8545584380626678e-001
+ <_>
+
+ 0 -1 84 -8.2502886652946472e-003
+
+ 1.2596343457698822e-001 -1.4223846793174744e-001
+ <_>
+
+ 0 -1 73 1.3518449850380421e-002
+
+ 7.5415953993797302e-002 -2.6633748412132263e-001
+ <_>
+
+ 0 -1 446 -1.4376571401953697e-002
+
+ 3.4983170032501221e-001 -4.7824632376432419e-002
+ <_>
+
+ 0 -1 602 1.2734688818454742e-002
+
+ -5.0567589700222015e-002 3.5038754343986511e-001
+ <_>
+
+ 0 -1 857 -1.3710462953895330e-003
+
+ 1.8082229793071747e-001 -9.6974305808544159e-002
+ <_>
+
+ 0 -1 306 -2.6267360895872116e-002
+
+ 4.1006618738174438e-001 -4.0112689137458801e-002
+ <_>
+
+ 0 -1 59 2.1102664992213249e-002
+
+ 2.7978396043181419e-002 -5.8651155233383179e-001
+ <_>
+
+ 0 -1 909 -1.4474790543317795e-002
+
+ 3.6871808767318726e-001 -4.5918777585029602e-002
+ <_>
+
+ 0 -1 817 7.2440858930349350e-003
+
+ -7.5330309569835663e-002 2.0376025140285492e-001
+ <_>
+
+ 0 -1 815 1.0546022094786167e-002
+
+ -6.1415266245603561e-002 3.0458399653434753e-001
+ <_>
+
+ 0 -1 101 5.5407796055078506e-002
+
+ 2.5191115215420723e-002 -6.5944659709930420e-001
+ <_>
+
+ 0 -1 91 9.4949062913656235e-003
+
+ -1.5944498777389526e-001 1.0568149387836456e-001
+ <_>
+
+ 0 -1 925 -6.2020965851843357e-003
+
+ 2.7509790658950806e-001 -6.5234497189521790e-002
+ <_>
+
+ 0 -1 507 1.3317565619945526e-001
+
+ 2.2181767970323563e-002 -7.3483341932296753e-001
+ <_>
+
+ 0 -1 448 2.5796357076615095e-003
+
+ 1.9557425752282143e-002 -6.5313297510147095e-001
+ <_>
+
+ 0 -1 390 3.4660965204238892e-002
+
+ -5.1162503659725189e-002 3.2590973377227783e-001
+ <_>
+
+ 0 -1 30 9.5607116818428040e-002
+
+ -2.4739582091569901e-002 5.7837259769439697e-001
+ <_>
+
+ 0 -1 148 1.6605708748102188e-002
+
+ 5.7055354118347168e-002 -3.5466542840003967e-001
+ <_>
+
+ 0 -1 123 1.1670887470245361e-002
+
+ -8.0407410860061646e-002 1.9471745193004608e-001
+ <_>
+
+ 0 -1 208 1.0822312906384468e-002
+
+ 2.6732437312602997e-002 -5.8917897939682007e-001
+ <_>
+
+ 0 -1 708 2.7245271950960159e-002
+
+ 3.0616169795393944e-002 -4.8082390427589417e-001
+ <_>
+
+ 0 -1 217 -1.3694438338279724e-001
+
+ -4.8311397433280945e-001 3.3773597329854965e-002
+ <_>
+
+ 0 -1 899 -1.4758360339328647e-003
+
+ 2.5075155496597290e-001 -6.7788824439048767e-002
+ <_>
+
+ 0 -1 275 2.7167074382305145e-002
+
+ 2.5224637240171432e-002 -6.3691717386245728e-001
+ <_>
+
+ 0 -1 657 1.8945746123790741e-002
+
+ -5.7760879397392273e-002 2.6149269938468933e-001
+ <_>
+
+ 0 -1 102 1.2368987500667572e-001
+
+ -3.2363165169954300e-002 4.5130741596221924e-001
+ <_>
+
+ 0 -1 43 3.9710897952318192e-002
+
+ -3.0226422473788261e-002 4.6590203046798706e-001
+ <_>
+
+ 0 -1 136 -3.6290191113948822e-002
+
+ 3.6348423361778259e-001 -4.1874047368764877e-002
+ <_>
+
+ 0 -1 846 2.5501720607280731e-002
+
+ 3.5494077950716019e-002 -4.5727846026420593e-001
+ <_>
+
+ 0 -1 772 5.3392872214317322e-003
+
+ -6.0394711792469025e-002 2.5488924980163574e-001
+ <_>
+
+ 0 -1 950 7.9108221689239144e-004
+
+ 5.4109033197164536e-002 -2.7065926790237427e-001
+ <_>
+
+ 0 -1 929 -1.6701441258192062e-002
+
+ 4.8040628433227539e-001 -3.0404916033148766e-002
+ <_>
+
+ 0 -1 566 7.1975095197558403e-003
+
+ -7.0362947881221771e-002 1.9959311187267303e-001
+
+ <_>
+ 100
+ -2.2887177467346191e+000
+
+ <_>
+
+ 0 -1 286 -1.6051483154296875e-001
+
+ 9.3009121716022491e-002 -6.5350115299224854e-001
+ <_>
+
+ 0 -1 623 1.2457310222089291e-002
+
+ -3.1717920303344727e-001 2.3368784785270691e-001
+ <_>
+
+ 0 -1 29 2.3608796764165163e-003
+
+ -2.9248744249343872e-001 1.8054312467575073e-001
+ <_>
+
+ 0 -1 339 1.4379444532096386e-002
+
+ -5.7956293225288391e-002 7.6479458808898926e-001
+ <_>
+
+ 0 -1 871 6.8126469850540161e-003
+
+ -1.4748461544513702e-001 2.3818431794643402e-001
+ <_>
+
+ 0 -1 247 4.3051101267337799e-002
+
+ 8.7559670209884644e-002 -7.2269368171691895e-001
+ <_>
+
+ 0 -1 867 -5.0154160708189011e-002
+
+ 3.1918609142303467e-001 -1.3582608103752136e-001
+ <_>
+
+ 0 -1 212 -3.1796738039702177e-003
+
+ 2.7597072720527649e-001 -9.0522617101669312e-002
+ <_>
+
+ 0 -1 677 -1.2342665344476700e-002
+
+ -3.9158377051353455e-001 5.3565893322229385e-002
+ <_>
+
+ 0 -1 897 1.1861260049045086e-002
+
+ -6.1517983675003052e-002 3.6472269892692566e-001
+ <_>
+
+ 0 -1 252 -2.1985735744237900e-002
+
+ 6.5143728256225586e-001 -4.0598560124635696e-002
+ <_>
+
+ 0 -1 63 -1.2279948219656944e-002
+
+ 2.1631649136543274e-001 -1.2024078518152237e-001
+ <_>
+
+ 0 -1 640 8.2167033106088638e-003
+
+ -9.4497188925743103e-002 2.4828021228313446e-001
+ <_>
+
+ 0 -1 357 1.0111754760146141e-002
+
+ -3.3160492777824402e-002 6.2502938508987427e-001
+ <_>
+
+ 0 -1 924 -7.7025225618854165e-004
+
+ 2.3218974471092224e-001 -1.0222402960062027e-001
+ <_>
+
+ 0 -1 467 -1.4080689288675785e-003
+
+ 1.3447046279907227e-001 -1.6994857788085938e-001
+ <_>
+
+ 0 -1 140 1.0420590639114380e-002
+
+ 2.9845444485545158e-002 -7.5183397531509399e-001
+ <_>
+
+ 0 -1 356 1.3691674917936325e-002
+
+ 2.8088988736271858e-002 -5.7496672868728638e-001
+ <_>
+
+ 0 -1 155 1.7491653561592102e-002
+
+ -9.8534837365150452e-002 2.2351761162281036e-001
+ <_>
+
+ 0 -1 762 7.4883676134049892e-003
+
+ -9.7045794129371643e-002 2.0625646412372589e-001
+ <_>
+
+ 0 -1 104 -8.4146633744239807e-003
+
+ -4.8472663760185242e-001 4.1302844882011414e-002
+ <_>
+
+ 0 -1 342 3.0617808923125267e-002
+
+ -3.7334404885768890e-002 6.1179280281066895e-001
+ <_>
+
+ 0 -1 326 1.6346010379493237e-003
+
+ -1.8315000832080841e-001 1.0951925814151764e-001
+ <_>
+
+ 0 -1 901 -1.1816060170531273e-002
+
+ 3.0801647901535034e-001 -6.1308264732360840e-002
+ <_>
+
+ 0 -1 351 -1.0661455802619457e-002
+
+ 3.3249661326408386e-001 -5.0642840564250946e-002
+ <_>
+
+ 0 -1 84 -9.6190627664327621e-003
+
+ 1.3975782692432404e-001 -1.3763442635536194e-001
+ <_>
+
+ 0 -1 289 -1.2881286442279816e-002
+
+ 3.6742180585861206e-001 -5.0860747694969177e-002
+ <_>
+
+ 0 -1 824 1.3589482754468918e-002
+
+ -5.1274802535772324e-002 3.1885984539985657e-001
+ <_>
+
+ 0 -1 234 4.6852193772792816e-003
+
+ -7.2946086525917053e-002 2.5181108713150024e-001
+ <_>
+
+ 0 -1 432 1.9752513617277145e-002
+
+ -1.4621073007583618e-001 1.2726816534996033e-001
+ <_>
+
+ 0 -1 454 3.6341309547424316e-002
+
+ 2.4868825450539589e-002 -6.9947302341461182e-001
+ <_>
+
+ 0 -1 636 -1.1957485694438219e-003
+
+ 1.5675933659076691e-001 -1.1705233156681061e-001
+ <_>
+
+ 0 -1 40 -9.9432021379470825e-003
+
+ -3.4487789869308472e-001 4.9324721097946167e-002
+ <_>
+
+ 0 -1 269 6.0083293356001377e-003
+
+ 3.3568043261766434e-002 -4.3638321757316589e-001
+ <_>
+
+ 0 -1 14 9.6278168261051178e-002
+
+ 4.0310282260179520e-002 -3.9266702532768250e-001
+ <_>
+
+ 0 -1 154 4.3072472908534110e-004
+
+ -1.0427023470401764e-001 1.4397470653057098e-001
+ <_>
+
+ 0 -1 504 -4.7720400616526604e-003
+
+ -4.4805496931076050e-001 3.4855298697948456e-002
+ <_>
+
+ 0 -1 87 -1.0016669984906912e-003
+
+ 1.3649077713489532e-001 -1.2140301614999771e-001
+ <_>
+
+ 0 -1 254 2.3308012634515762e-002
+
+ 3.6392133682966232e-002 -4.5537215471267700e-001
+ <_>
+
+ 0 -1 802 -4.8546120524406433e-003
+
+ 1.5793082118034363e-001 -9.6185155212879181e-002
+ <_>
+
+ 0 -1 795 -6.5906550735235214e-003
+
+ 3.2166856527328491e-001 -4.9290131777524948e-002
+ <_>
+
+ 0 -1 126 -2.7226015925407410e-002
+
+ 2.8352561593055725e-001 -5.1984444260597229e-002
+ <_>
+
+ 0 -1 938 5.5622356012463570e-003
+
+ -3.3917389810085297e-002 4.3498530983924866e-001
+ <_>
+
+ 0 -1 534 -5.8775981888175011e-003
+
+ 1.7455618083477020e-001 -8.4790699183940887e-002
+ <_>
+
+ 0 -1 627 -1.1768937110900879e-003
+
+ -4.4403216242790222e-001 3.4572694450616837e-002
+ <_>
+
+ 0 -1 625 1.4337021857500076e-003
+
+ -8.8692568242549896e-002 1.6940893232822418e-001
+ <_>
+
+ 0 -1 51 1.3953970745205879e-002
+
+ 3.9221145212650299e-002 -3.8308286666870117e-001
+ <_>
+
+ 0 -1 106 5.3161740303039551e-002
+
+ -3.9227265864610672e-002 4.0637263655662537e-001
+ <_>
+
+ 0 -1 916 1.1670306324958801e-002
+
+ -6.2661647796630859e-002 2.2897149622440338e-001
+ <_>
+
+ 0 -1 524 -8.5611653048545122e-004
+
+ -3.1393322348594666e-001 4.4154506176710129e-002
+ <_>
+
+ 0 -1 362 3.1659279484301805e-003
+
+ -1.0416875034570694e-001 1.4386938512325287e-001
+ <_>
+
+ 0 -1 94 9.2105150222778320e-002
+
+ 2.5259945541620255e-002 -6.3980853557586670e-001
+ <_>
+
+ 0 -1 681 2.2438270971179008e-003
+
+ 2.9625944793224335e-002 -4.4926467537879944e-001
+ <_>
+
+ 0 -1 592 -1.4502200298011303e-002
+
+ 2.3043723404407501e-001 -6.8583212792873383e-002
+ <_>
+
+ 0 -1 17 3.1762875616550446e-002
+
+ -1.1820482462644577e-001 1.3017164170742035e-001
+ <_>
+
+ 0 -1 372 8.3491904661059380e-003
+
+ -5.4794549942016602e-002 3.0562251806259155e-001
+ <_>
+
+ 0 -1 945 1.1813377961516380e-002
+
+ -4.4218052178621292e-002 3.2657644152641296e-001
+ <_>
+
+ 0 -1 517 -4.3407902121543884e-003
+
+ 2.3012351989746094e-001 -6.2401693314313889e-002
+ <_>
+
+ 0 -1 835 -5.1777150481939316e-002
+
+ -4.2195704579353333e-001 3.3818338066339493e-002
+ <_>
+
+ 0 -1 573 9.5773371867835522e-004
+
+ -1.2982761859893799e-001 1.0589899122714996e-001
+ <_>
+
+ 0 -1 329 2.6355611626058817e-003
+
+ -1.1849098652601242e-001 1.2649086117744446e-001
+ <_>
+
+ 0 -1 738 -6.9736450910568237e-002
+
+ 5.4316484928131104e-001 -2.8468221426010132e-002
+ <_>
+
+ 0 -1 166 -4.1691556572914124e-002
+
+ 1.8529292941093445e-001 -7.9085260629653931e-002
+ <_>
+
+ 0 -1 72 3.0405964702367783e-002
+
+ -6.7499466240406036e-002 2.3227298259735107e-001
+ <_>
+
+ 0 -1 202 1.6526731848716736e-001
+
+ 2.3192871361970901e-002 -6.6413503885269165e-001
+ <_>
+
+ 0 -1 244 -7.9902745783329010e-003
+
+ 1.6699096560478210e-001 -8.0209225416183472e-002
+ <_>
+
+ 0 -1 435 -8.4093026816844940e-003
+
+ 3.8385570049285889e-001 -3.3093310892581940e-002
+ <_>
+
+ 0 -1 580 -6.2388582155108452e-003
+
+ 2.2031579911708832e-001 -5.9756781905889511e-002
+ <_>
+
+ 0 -1 416 2.2657278925180435e-002
+
+ 2.9750887304544449e-002 -4.3571525812149048e-001
+ <_>
+
+ 0 -1 245 -3.3273398876190186e-002
+
+ -7.2214579582214355e-001 1.7277766019105911e-002
+ <_>
+
+ 0 -1 805 -7.5985761359333992e-003
+
+ -4.8032435774803162e-001 2.3796260356903076e-002
+ <_>
+
+ 0 -1 490 1.4554752968251705e-002
+
+ 2.0614990964531898e-002 -5.7951718568801880e-001
+ <_>
+
+ 0 -1 348 -2.4409522302448750e-003
+
+ 1.5682564675807953e-001 -8.2513608038425446e-002
+ <_>
+
+ 0 -1 216 -2.7174502611160278e-002
+
+ -5.4916822910308838e-001 2.3511687293648720e-002
+ <_>
+
+ 0 -1 599 1.8674493767321110e-003
+
+ 3.5896647721529007e-002 -3.5593807697296143e-001
+ <_>
+
+ 0 -1 599 -1.7106164013966918e-003
+
+ -2.9658839106559753e-001 4.5083675533533096e-002
+ <_>
+
+ 0 -1 698 -1.2188366800546646e-001
+
+ -6.8481236696243286e-001 1.6469523310661316e-002
+ <_>
+
+ 0 -1 206 1.6452776268124580e-002
+
+ 1.6632448881864548e-002 -6.3031005859375000e-001
+ <_>
+
+ 0 -1 913 3.3029774203896523e-003
+
+ 5.2817359566688538e-002 -2.3288796842098236e-001
+ <_>
+
+ 0 -1 678 6.5974113531410694e-003
+
+ -5.9827085584402084e-002 2.2615881264209747e-001
+ <_>
+
+ 0 -1 947 -2.2020633332431316e-003
+
+ 2.2270961105823517e-001 -5.8337379246950150e-002
+ <_>
+
+ 0 -1 582 -8.9172367006540298e-003
+
+ 2.3682470619678497e-001 -5.5845208466053009e-002
+ <_>
+
+ 0 -1 100 -3.8233667612075806e-002
+
+ 1.9340702891349792e-001 -7.3905274271965027e-002
+ <_>
+
+ 0 -1 214 -5.8171510696411133e-002
+
+ -3.3873862028121948e-001 3.6934167146682739e-002
+ <_>
+
+ 0 -1 142 1.3129880651831627e-002
+
+ -5.7335916906595230e-002 2.4769510328769684e-001
+ <_>
+
+ 0 -1 606 -2.3510225117206573e-002
+
+ -7.3440921306610107e-001 2.1062126383185387e-002
+ <_>
+
+ 0 -1 180 -3.2106369733810425e-002
+
+ 1.9888436794281006e-001 -6.8882115185260773e-002
+ <_>
+
+ 0 -1 798 1.0653462260961533e-002
+
+ -3.1876940280199051e-002 3.7958627939224243e-001
+ <_>
+
+ 0 -1 325 2.5438904762268066e-002
+
+ -2.5426354259252548e-002 4.6004450321197510e-001
+ <_>
+
+ 0 -1 239 2.6357024908065796e-002
+
+ -4.9807246774435043e-002 2.5959959626197815e-001
+ <_>
+
+ 0 -1 525 5.6436131708323956e-003
+
+ -4.5353759080171585e-002 2.8858882188796997e-001
+ <_>
+
+ 0 -1 267 -4.3369065970182419e-003
+
+ 1.4867325127124786e-001 -8.8411331176757813e-002
+ <_>
+
+ 0 -1 215 -1.9298204779624939e-001
+
+ -5.3079867362976074e-001 2.5263534858822823e-002
+ <_>
+
+ 0 -1 734 5.7046163827180862e-002
+
+ 1.1847544461488724e-002 -8.2090246677398682e-001
+ <_>
+
+ 0 -1 352 4.9701407551765442e-002
+
+ 1.3225952163338661e-002 -6.8998688459396362e-001
+ <_>
+
+ 0 -1 278 -2.8292792849242687e-003
+
+ 1.7430420219898224e-001 -6.6152326762676239e-002
+ <_>
+
+ 0 -1 476 -1.4506326988339424e-002
+
+ -3.1870725750923157e-001 3.8834158331155777e-002
+ <_>
+
+ 0 -1 859 3.5564824938774109e-002
+
+ -5.6947514414787292e-002 2.1859169006347656e-001
+ <_>
+
+ 0 -1 98 2.0967530086636543e-002
+
+ -5.9812918305397034e-002 2.2214832901954651e-001
+ <_>
+
+ 0 -1 127 7.3756486177444458e-002
+
+ 2.5129400193691254e-002 -4.9916529655456543e-001
+
+ <_>
+ 100
+ -2.2359671592712402e+000
+
+ <_>
+
+ 0 -1 285 -9.3501225113868713e-002
+
+ -4.6586804091930389e-002 -7.2199982404708862e-001
+ <_>
+
+ 0 -1 238 4.9442616291344166e-003
+
+ -3.9842179417610168e-001 2.1402300894260406e-001
+ <_>
+
+ 0 -1 799 1.0407378897070885e-002
+
+ -1.3988684117794037e-001 3.9579308032989502e-001
+ <_>
+
+ 0 -1 322 -1.4162844978272915e-002
+
+ 6.4931660890579224e-001 -5.7302106171846390e-002
+ <_>
+
+ 0 -1 449 9.8008674103766680e-004
+
+ -1.7719046771526337e-001 2.0141038298606873e-001
+ <_>
+
+ 0 -1 218 1.4206364750862122e-002
+
+ -9.3258224427700043e-002 3.4144768118858337e-001
+ <_>
+
+ 0 -1 879 2.5848676450550556e-003
+
+ -1.4990748465061188e-001 2.2581319510936737e-001
+ <_>
+
+ 0 -1 22 8.0643901601433754e-003
+
+ -8.8275857269763947e-002 2.8663924336433411e-001
+ <_>
+
+ 0 -1 881 -8.6236204952001572e-003
+
+ 3.3490571379661560e-001 -8.2069411873817444e-002
+ <_>
+
+ 0 -1 723 1.2022950686514378e-002
+
+ -6.3569039106369019e-002 3.9191362261772156e-001
+ <_>
+
+ 0 -1 665 -1.5419950708746910e-002
+
+ 4.4637352228164673e-001 -6.6652692854404449e-002
+ <_>
+
+ 0 -1 735 -6.3524805009365082e-003
+
+ 1.8987259268760681e-001 -1.2892219424247742e-001
+ <_>
+
+ 0 -1 408 6.9541163742542267e-002
+
+ 4.3989829719066620e-002 -4.4642734527587891e-001
+ <_>
+
+ 0 -1 368 7.4983224272727966e-002
+
+ -5.2028596401214600e-002 5.7951992750167847e-001
+ <_>
+
+ 0 -1 486 2.0330501720309258e-003
+
+ -1.3492821156978607e-001 2.0830303430557251e-001
+ <_>
+
+ 0 -1 28 1.8707301467657089e-002
+
+ 3.0162446200847626e-002 -7.5620234012603760e-001
+ <_>
+
+ 0 -1 33 9.1869030147790909e-003
+
+ -1.5992332994937897e-001 1.3838322460651398e-001
+ <_>
+
+ 0 -1 473 -2.0068701356649399e-002
+
+ 4.9636912345886230e-001 -3.8212534040212631e-002
+ <_>
+
+ 0 -1 32 9.3690613284707069e-003
+
+ 2.7963882312178612e-002 -7.0575749874114990e-001
+ <_>
+
+ 0 -1 63 -9.2746205627918243e-003
+
+ 1.7214477062225342e-001 -1.1743877083063126e-001
+ <_>
+
+ 0 -1 671 -3.7561631761491299e-003
+
+ 1.9893965125083923e-001 -1.0429763048887253e-001
+ <_>
+
+ 0 -1 642 -2.8749569319188595e-003
+
+ -3.7584275007247925e-001 4.6344734728336334e-002
+ <_>
+
+ 0 -1 145 -1.1727647855877876e-002
+
+ -4.4696572422981262e-001 4.0343362838029861e-002
+ <_>
+
+ 0 -1 590 1.0945920832455158e-002
+
+ 5.6218206882476807e-002 -2.9916441440582275e-001
+ <_>
+
+ 0 -1 341 -1.2209227308630943e-002
+
+ 3.9286783337593079e-001 -4.2874403297901154e-002
+ <_>
+
+ 0 -1 447 -2.5397611781954765e-002
+
+ -3.8478189706802368e-001 4.3343432247638702e-002
+ <_>
+
+ 0 -1 746 -4.5675365254282951e-003
+
+ 2.3299069702625275e-001 -7.3202215135097504e-002
+ <_>
+
+ 0 -1 935 -6.0586854815483093e-003
+
+ 2.2465232014656067e-001 -7.7056594192981720e-002
+ <_>
+
+ 0 -1 131 1.5789955854415894e-002
+
+ -8.7083600461483002e-002 1.9742278754711151e-001
+ <_>
+
+ 0 -1 759 -1.7314129509031773e-003
+
+ 2.0412902534008026e-001 -8.9147895574569702e-002
+ <_>
+
+ 0 -1 939 7.3486715555191040e-003
+
+ -4.5228123664855957e-002 3.5152116417884827e-001
+ <_>
+
+ 0 -1 246 1.6278622671961784e-002
+
+ 5.0431668758392334e-002 -3.4917074441909790e-001
+ <_>
+
+ 0 -1 151 -4.9730124883353710e-003
+
+ 1.8474133312702179e-001 -9.4716101884841919e-002
+ <_>
+
+ 0 -1 334 1.3617072254419327e-002
+
+ -3.4493431448936462e-002 5.1511102914810181e-001
+ <_>
+
+ 0 -1 516 -3.5471074283123016e-002
+
+ -3.9388224482536316e-001 4.3496731668710709e-002
+ <_>
+
+ 0 -1 103 5.2554365247488022e-003
+
+ -1.2609277665615082e-001 1.2129900604486465e-001
+ <_>
+
+ 0 -1 489 -4.1965182870626450e-002
+
+ -6.2069499492645264e-001 2.4282006546854973e-002
+ <_>
+
+ 0 -1 61 9.6745520830154419e-002
+
+ 3.0231734737753868e-002 -4.6271669864654541e-001
+ <_>
+
+ 0 -1 661 -6.8811019882559776e-003
+
+ 2.8159707784652710e-001 -5.7276148349046707e-002
+ <_>
+
+ 0 -1 616 1.0784192010760307e-002
+
+ -4.8847943544387817e-002 3.2464641332626343e-001
+ <_>
+
+ 0 -1 466 -3.3961618319153786e-003
+
+ 4.0418368577957153e-001 -4.2481750249862671e-002
+ <_>
+
+ 0 -1 420 -6.9079827517271042e-003
+
+ 1.1404169350862503e-001 -1.2768752872943878e-001
+ <_>
+
+ 0 -1 167 1.4355555176734924e-001
+
+ -3.9203863590955734e-002 3.9233651757240295e-001
+ <_>
+
+ 0 -1 210 -3.5771834664046764e-003
+
+ 1.4706018567085266e-001 -1.3173283636569977e-001
+ <_>
+
+ 0 -1 439 3.0234435573220253e-002
+
+ 1.8946202471852303e-002 -8.0503576993942261e-001
+ <_>
+
+ 0 -1 567 7.8391470015048981e-004
+
+ 8.7953150272369385e-002 -1.6678945720195770e-001
+ <_>
+
+ 0 -1 42 -2.2085051983594894e-002
+
+ -3.8623884320259094e-001 4.2284723371267319e-002
+ <_>
+
+ 0 -1 818 -2.6205494999885559e-002
+
+ 1.6326524317264557e-001 -1.0225085169076920e-001
+ <_>
+
+ 0 -1 581 -9.5918308943510056e-003
+
+ 2.5218212604522705e-001 -6.0809265822172165e-002
+ <_>
+
+ 0 -1 242 -2.6144424453377724e-002
+
+ -6.9495695829391479e-001 2.2685619071125984e-002
+ <_>
+
+ 0 -1 424 9.2253191396594048e-003
+
+ -8.8936053216457367e-002 1.6087681055068970e-001
+ <_>
+
+ 0 -1 843 -3.1533516012132168e-003
+
+ 2.2563895583152771e-001 -6.3495889306068420e-002
+ <_>
+
+ 0 -1 56 -6.6996468231081963e-003
+
+ -2.4251624941825867e-001 6.1135187745094299e-002
+ <_>
+
+ 0 -1 282 -1.2584788724780083e-002
+
+ 2.9776036739349365e-001 -4.9212120473384857e-002
+ <_>
+
+ 0 -1 903 -4.2148698121309280e-003
+
+ 3.0259734392166138e-001 -4.4676482677459717e-002
+ <_>
+
+ 0 -1 653 -9.4317561015486717e-003
+
+ 1.1043215543031693e-001 -1.2356746196746826e-001
+ <_>
+
+ 0 -1 654 2.1886886097490788e-003
+
+ -6.1201002448797226e-002 2.2712202370166779e-001
+ <_>
+
+ 0 -1 398 2.4963401257991791e-002
+
+ 2.4292556568980217e-002 -5.4634368419647217e-001
+ <_>
+
+ 0 -1 205 -8.7548848241567612e-003
+
+ 2.5255405902862549e-001 -5.4619345813989639e-002
+ <_>
+
+ 0 -1 487 7.0049557834863663e-003
+
+ 3.9875753223896027e-002 -3.8009002804756165e-001
+ <_>
+
+ 0 -1 258 3.7140229251235723e-003
+
+ -9.3989297747612000e-002 1.5871012210845947e-001
+ <_>
+
+ 0 -1 565 -8.4969010204076767e-003
+
+ 2.0674896240234375e-001 -6.4190469682216644e-002
+ <_>
+
+ 0 -1 147 -5.0333619117736816e-002
+
+ 3.0274888873100281e-001 -4.3931342661380768e-002
+ <_>
+
+ 0 -1 80 7.2737382724881172e-003
+
+ -8.7947271764278412e-002 1.5312801301479340e-001
+ <_>
+
+ 0 -1 58 9.9609624594449997e-003
+
+ 4.6528778970241547e-002 -2.9576960206031799e-001
+ <_>
+
+ 0 -1 909 -1.3673231005668640e-002
+
+ 3.2159554958343506e-001 -4.6024739742279053e-002
+ <_>
+
+ 0 -1 460 2.4796918034553528e-002
+
+ 2.3450840264558792e-002 -6.3208627700805664e-001
+ <_>
+
+ 0 -1 790 -8.9704394340515137e-003
+
+ 1.7290446162223816e-001 -8.1694059073925018e-002
+ <_>
+
+ 0 -1 191 -2.3638601414859295e-003
+
+ 1.0641085356473923e-001 -1.2656879425048828e-001
+ <_>
+
+ 0 -1 45 -3.0800779350101948e-003
+
+ 1.4082619547843933e-001 -9.4026930630207062e-002
+ <_>
+
+ 0 -1 138 -1.0759308934211731e-002
+
+ -4.0597277879714966e-001 3.1949173659086227e-002
+ <_>
+
+ 0 -1 176 7.2143180295825005e-003
+
+ 1.2054420076310635e-002 -8.5538458824157715e-001
+ <_>
+
+ 0 -1 384 1.9637834280729294e-002
+
+ -4.5702952891588211e-002 3.0082041025161743e-001
+ <_>
+
+ 0 -1 181 -2.6587650179862976e-002
+
+ -4.8827502131462097e-001 2.5739965960383415e-002
+ <_>
+
+ 0 -1 429 -2.8913402929902077e-003
+
+ 1.5120062232017517e-001 -8.3084680140018463e-002
+ <_>
+
+ 0 -1 462 -1.7486744036432356e-004
+
+ -1.6527174413204193e-001 7.9318381845951080e-002
+ <_>
+
+ 0 -1 93 5.8025561273097992e-002
+
+ -9.3625135719776154e-002 1.3428705930709839e-001
+ <_>
+
+ 0 -1 895 7.7226985013112426e-004
+
+ 6.4624220132827759e-002 -1.9347991049289703e-001
+ <_>
+
+ 0 -1 506 -6.4398542046546936e-002
+
+ -8.3100390434265137e-001 1.3259679079055786e-002
+ <_>
+
+ 0 -1 794 2.7848746627569199e-002
+
+ 1.3673855923116207e-002 -7.1600478887557983e-001
+ <_>
+
+ 0 -1 308 -1.7273522913455963e-002
+
+ -6.1328560113906860e-001 1.7129577696323395e-002
+ <_>
+
+ 0 -1 117 2.2771380841732025e-002
+
+ 1.4634012244641781e-002 -6.9125133752822876e-001
+ <_>
+
+ 0 -1 155 1.7879681661725044e-002
+
+ -6.6493585705757141e-002 1.8808430433273315e-001
+ <_>
+
+ 0 -1 188 -7.5980871915817261e-003
+
+ 2.1208682656288147e-001 -6.9655627012252808e-002
+ <_>
+
+ 0 -1 468 8.3334632217884064e-003
+
+ -4.5091670006513596e-002 2.5533476471900940e-001
+ <_>
+
+ 0 -1 451 9.5366090536117554e-003
+
+ 3.3587828278541565e-002 -3.8594719767570496e-001
+ <_>
+
+ 0 -1 349 1.9022613763809204e-002
+
+ -4.2280010879039764e-002 3.0593034625053406e-001
+ <_>
+
+ 0 -1 522 3.6582566797733307e-002
+
+ -6.8928316235542297e-002 1.8224547803401947e-001
+ <_>
+
+ 0 -1 159 -2.5450623035430908e-001
+
+ -7.9693830013275146e-001 1.6522107645869255e-002
+ <_>
+
+ 0 -1 905 -5.8933448046445847e-002
+
+ 3.6613103747367859e-001 -3.7511564791202545e-002
+ <_>
+
+ 0 -1 64 8.5881188511848450e-002
+
+ 3.5934593528509140e-002 -3.7825050950050354e-001
+ <_>
+
+ 0 -1 810 -6.8585649132728577e-002
+
+ -5.4236054420471191e-001 2.0104518160223961e-002
+ <_>
+
+ 0 -1 529 4.8160655423998833e-003
+
+ -4.3085236102342606e-002 2.8620475530624390e-001
+ <_>
+
+ 0 -1 498 6.1599753098562360e-004
+
+ 5.0022143870592117e-002 -2.7295649051666260e-001
+ <_>
+
+ 0 -1 710 7.4446541257202625e-003
+
+ -6.7837722599506378e-002 1.9111913442611694e-001
+ <_>
+
+ 0 -1 333 1.3981198891997337e-002
+
+ 2.1413592621684074e-002 -6.2269157171249390e-001
+ <_>
+
+ 0 -1 941 -1.4853913336992264e-002
+
+ 4.0018329024314880e-001 -3.4097265452146530e-002
+ <_>
+
+ 0 -1 3 1.3497969135642052e-002
+
+ 3.0796987935900688e-002 -4.2009493708610535e-001
+ <_>
+
+ 0 -1 887 9.1592809185385704e-003
+
+ 3.0317120254039764e-002 -3.5625258088111877e-001
+ <_>
+
+ 0 -1 11 2.9643373563885689e-002
+
+ -1.1319724470376968e-001 1.0797596722841263e-001
+
+ <_>
+ 100
+ -2.0808603763580322e+000
+
+ <_>
+
+ 0 -1 284 -7.5377658009529114e-002
+
+ -1.0360029339790344e-001 -7.0443350076675415e-001
+ <_>
+
+ 0 -1 301 -4.6968553215265274e-003
+
+ 2.6461517810821533e-001 -2.6632103323936462e-001
+ <_>
+
+ 0 -1 851 4.5106429606676102e-003
+
+ -1.9236828386783600e-001 2.4530071020126343e-001
+ <_>
+
+ 0 -1 324 -1.3677397742867470e-002
+
+ 4.8842102289199829e-001 -7.8666172921657562e-002
+ <_>
+
+ 0 -1 621 8.4240939468145370e-003
+
+ -1.1324168741703033e-001 2.8638821840286255e-001
+ <_>
+
+ 0 -1 827 1.0163122788071632e-003
+
+ -1.7518180608749390e-001 1.6443368792533875e-001
+ <_>
+
+ 0 -1 375 3.2988777384161949e-003
+
+ -7.6549887657165527e-002 2.8202313184738159e-001
+ <_>
+
+ 0 -1 85 1.4450255781412125e-002
+
+ -1.4695851504802704e-001 1.9833040237426758e-001
+ <_>
+
+ 0 -1 328 5.9788756072521210e-002
+
+ -2.7597570791840553e-002 6.0443407297134399e-001
+ <_>
+
+ 0 -1 668 -4.0823942981660366e-003
+
+ 3.7376108765602112e-001 -6.6522486507892609e-002
+ <_>
+
+ 0 -1 651 9.4101820141077042e-003
+
+ -7.5030580163002014e-002 3.3643370866775513e-001
+ <_>
+
+ 0 -1 770 1.2895615771412849e-002
+
+ -6.6736064851284027e-002 3.4388977289199829e-001
+ <_>
+
+ 0 -1 0 1.8281452357769012e-003
+
+ -7.6577022671699524e-002 3.0855756998062134e-001
+ <_>
+
+ 0 -1 811 1.2842542491853237e-002
+
+ -6.6831089556217194e-002 3.5320571064949036e-001
+ <_>
+
+ 0 -1 556 2.6731539517641068e-002
+
+ 4.3738048523664474e-002 -5.4744714498519897e-001
+ <_>
+
+ 0 -1 593 -2.1810945123434067e-002
+
+ -4.9039456248283386e-001 3.5305779427289963e-002
+ <_>
+
+ 0 -1 397 1.4120168052613735e-003
+
+ -1.7367108166217804e-001 1.1572990566492081e-001
+ <_>
+
+ 0 -1 494 1.5707452548667789e-003
+
+ -1.1095841974020004e-001 1.6702808439731598e-001
+ <_>
+
+ 0 -1 869 -7.3387438897043467e-004
+
+ 1.8617554008960724e-001 -9.1079324483871460e-002
+ <_>
+
+ 0 -1 495 -6.4388057217001915e-004
+
+ -2.6845857501029968e-001 6.1447944492101669e-002
+ <_>
+
+ 0 -1 427 1.1414934694766998e-001
+
+ 2.0975470542907715e-002 -7.1357190608978271e-001
+ <_>
+
+ 0 -1 931 1.3404923956841230e-003
+
+ -9.0797364711761475e-002 1.8696101009845734e-001
+ <_>
+
+ 0 -1 46 2.3350983858108521e-002
+
+ 2.9028130695223808e-002 -5.2345710992813110e-001
+ <_>
+
+ 0 -1 143 1.5429967083036900e-002
+
+ -9.4941243529319763e-002 1.6368669271469116e-001
+ <_>
+
+ 0 -1 357 1.0943166911602020e-002
+
+ -3.1125182285904884e-002 5.9323889017105103e-001
+ <_>
+
+ 0 -1 705 2.6839743368327618e-003
+
+ -7.5778268277645111e-002 2.1814092993736267e-001
+ <_>
+
+ 0 -1 39 -6.2261838465929031e-003
+
+ -2.8783807158470154e-001 5.5791638791561127e-002
+ <_>
+
+ 0 -1 207 1.0724554955959320e-001
+
+ 2.4116434156894684e-002 -5.8035951852798462e-001
+ <_>
+
+ 0 -1 199 -6.5348353236913681e-003
+
+ -2.8312593698501587e-001 5.1936011761426926e-002
+ <_>
+
+ 0 -1 415 -1.1670710518956184e-003
+
+ -1.8463888764381409e-001 8.3705939352512360e-002
+ <_>
+
+ 0 -1 808 -1.4070876641198993e-003
+
+ 1.5036344528198242e-001 -1.0249616205692291e-001
+ <_>
+
+ 0 -1 122 -3.9912573993206024e-002
+
+ -3.8639402389526367e-001 3.9821352809667587e-002
+ <_>
+
+ 0 -1 413 1.0381672531366348e-002
+
+ -1.2079605460166931e-001 1.2945999205112457e-001
+ <_>
+
+ 0 -1 453 -9.9312573671340942e-002
+
+ 6.0750687122344971e-001 -2.8503781184554100e-002
+ <_>
+
+ 0 -1 816 1.0430534370243549e-002
+
+ -6.0343675315380096e-002 2.3242907226085663e-001
+ <_>
+
+ 0 -1 445 3.5891016013920307e-003
+
+ 4.1434522718191147e-002 -3.4602153301239014e-001
+ <_>
+
+ 0 -1 788 1.0015227831900120e-002
+
+ -5.6792665272951126e-002 2.6468506455421448e-001
+ <_>
+
+ 0 -1 749 -9.2321680858731270e-004
+
+ -3.1470552086830139e-001 4.6375431120395660e-002
+ <_>
+
+ 0 -1 384 2.0065717399120331e-002
+
+ -4.7381434589624405e-002 3.2506260275840759e-001
+ <_>
+
+ 0 -1 782 2.0691626705229282e-003
+
+ -8.8068872690200806e-002 1.7662553489208221e-001
+ <_>
+
+ 0 -1 150 -2.0592920482158661e-002
+
+ 2.1614389121532440e-001 -6.7837409675121307e-002
+ <_>
+
+ 0 -1 729 -2.5132454931735992e-002
+
+ 2.9875260591506958e-001 -5.0642240792512894e-002
+ <_>
+
+ 0 -1 893 1.6763649880886078e-002
+
+ -5.6825786828994751e-002 2.6688432693481445e-001
+ <_>
+
+ 0 -1 5 2.4304956197738647e-002
+
+ -7.3691956698894501e-002 1.8922545015811920e-001
+ <_>
+
+ 0 -1 604 5.2945837378501892e-003
+
+ -6.8203508853912354e-002 2.3238344490528107e-001
+ <_>
+
+ 0 -1 146 1.7194304615259171e-002
+
+ -4.1591234505176544e-002 3.3211585879325867e-001
+ <_>
+
+ 0 -1 119 -1.0534466244280338e-002
+
+ 2.0838305354118347e-001 -8.1538312137126923e-002
+ <_>
+
+ 0 -1 171 3.3360864967107773e-002
+
+ -6.7458741366863251e-002 2.5852772593498230e-001
+ <_>
+
+ 0 -1 183 4.6436764299869537e-002
+
+ 1.9892208278179169e-002 -8.1141030788421631e-001
+ <_>
+
+ 0 -1 8 -4.1056036949157715e-002
+
+ -4.9327704310417175e-001 2.3769956082105637e-002
+ <_>
+
+ 0 -1 514 -1.8552202731370926e-002
+
+ -5.7725781202316284e-001 2.1620772778987885e-002
+ <_>
+
+ 0 -1 310 -1.5498932916671038e-003
+
+ 1.3356749713420868e-001 -1.0274448245763779e-001
+ <_>
+
+ 0 -1 144 -1.2870179489254951e-002
+
+ -6.8844175338745117e-001 1.6567943617701530e-002
+ <_>
+
+ 0 -1 162 1.1060645803809166e-002
+
+ -6.5967611968517303e-002 2.0074956119060516e-001
+ <_>
+
+ 0 -1 737 -1.9628754816949368e-003
+
+ 1.7064040899276733e-001 -7.5410693883895874e-002
+ <_>
+
+ 0 -1 118 3.2771207392215729e-002
+
+ 1.7548711970448494e-002 -7.5103056430816650e-001
+ <_>
+
+ 0 -1 62 -5.6525086984038353e-004
+
+ 1.0811340808868408e-001 -1.1322978138923645e-001
+ <_>
+
+ 0 -1 920 6.6395318135619164e-003
+
+ -4.8233803361654282e-002 2.5985202193260193e-001
+ <_>
+
+ 0 -1 933 5.3288890048861504e-003
+
+ -5.8816779404878616e-002 2.0709130167961121e-001
+ <_>
+
+ 0 -1 30 9.5648169517517090e-002
+
+ -2.3178230971097946e-002 5.3592687845230103e-001
+ <_>
+
+ 0 -1 505 2.3851044476032257e-002
+
+ 3.9325568825006485e-002 -3.2090389728546143e-001
+ <_>
+
+ 0 -1 380 4.9215428531169891e-002
+
+ -8.0275781452655792e-002 2.1604713797569275e-001
+ <_>
+
+ 0 -1 404 5.1129907369613647e-002
+
+ 2.0917052403092384e-002 -6.7675739526748657e-001
+ <_>
+
+ 0 -1 470 -9.5789285842329264e-004
+
+ 1.3741976022720337e-001 -9.2351287603378296e-002
+ <_>
+
+ 0 -1 38 4.3797735124826431e-002
+
+ -5.2134189754724503e-002 2.3939897119998932e-001
+ <_>
+
+ 0 -1 177 -3.7566445767879486e-002
+
+ -5.0337618589401245e-001 3.2042562961578369e-002
+ <_>
+
+ 0 -1 293 -6.6379196941852570e-003
+
+ 2.3610880970954895e-001 -5.9629496186971664e-002
+ <_>
+
+ 0 -1 569 4.4785980135202408e-003
+
+ -6.9053784012794495e-002 1.8493640422821045e-001
+ <_>
+
+ 0 -1 680 -1.9650494214147329e-003
+
+ -5.0821167230606079e-001 2.3264253512024879e-002
+ <_>
+
+ 0 -1 826 -8.4884336683899164e-004
+
+ 1.7365188896656036e-001 -7.3235429823398590e-002
+ <_>
+
+ 0 -1 421 -5.7333573698997498e-002
+
+ -3.1190565228462219e-001 4.1780386120080948e-002
+ <_>
+
+ 0 -1 599 1.8632253631949425e-003
+
+ 3.1603202223777771e-002 -3.6946067214012146e-001
+ <_>
+
+ 0 -1 336 -2.0456001162528992e-002
+
+ 3.0203589797019958e-001 -4.1565753519535065e-002
+ <_>
+
+ 0 -1 938 5.5945245549082756e-003
+
+ -3.2002035528421402e-002 3.7638634443283081e-001
+ <_>
+
+ 0 -1 152 -1.8559835851192474e-002
+
+ 2.4045053124427795e-001 -5.1895260810852051e-002
+ <_>
+
+ 0 -1 706 -1.0816272348165512e-002
+
+ -4.1922396421432495e-001 3.0057143419981003e-002
+ <_>
+
+ 0 -1 717 -1.5897199045866728e-003
+
+ -3.8717699050903320e-001 2.7556220069527626e-002
+ <_>
+
+ 0 -1 337 -1.8832697533071041e-003
+
+ 1.8341954052448273e-001 -6.8402133882045746e-002
+ <_>
+
+ 0 -1 107 -6.8602010607719421e-002
+
+ -4.3040940165519714e-001 2.7811320498585701e-002
+ <_>
+
+ 0 -1 605 3.1656727194786072e-002
+
+ 1.4831826090812683e-002 -6.9200241565704346e-001
+ <_>
+
+ 0 -1 178 -1.1699689552187920e-002
+
+ -4.7378033399581909e-001 2.2049939259886742e-002
+ <_>
+
+ 0 -1 175 -4.9252226948738098e-002
+
+ 2.0226360857486725e-001 -5.8283366262912750e-002
+ <_>
+
+ 0 -1 200 -1.4749905094504356e-002
+
+ -6.3420587778091431e-001 1.7177773639559746e-002
+ <_>
+
+ 0 -1 594 1.3355823233723640e-002
+
+ -5.3626276552677155e-002 2.3158134520053864e-001
+ <_>
+
+ 0 -1 688 2.7912877500057220e-002
+
+ -3.2106213271617889e-002 3.9656600356101990e-001
+ <_>
+
+ 0 -1 433 -1.8341368064284325e-002
+
+ 3.0023518204689026e-001 -3.9390310645103455e-002
+ <_>
+
+ 0 -1 320 3.3382259309291840e-002
+
+ -5.0307501107454300e-002 2.3759432137012482e-001
+ <_>
+
+ 0 -1 414 2.2881597280502319e-002
+
+ 2.9198208823800087e-002 -4.3145897984504700e-001
+ <_>
+
+ 0 -1 271 1.7183616757392883e-001
+
+ 1.9492210820317268e-002 -5.7107782363891602e-001
+ <_>
+
+ 0 -1 889 4.3015915900468826e-002
+
+ 1.8091753125190735e-002 -5.8863103389739990e-001
+ <_>
+
+ 0 -1 545 -1.2893548235297203e-002
+
+ 1.4482001960277557e-001 -8.2013383507728577e-002
+ <_>
+
+ 0 -1 910 5.9737069532275200e-003
+
+ -7.2960324585437775e-002 1.6368763148784637e-001
+ <_>
+
+ 0 -1 664 1.1285657994449139e-002
+
+ -4.4454183429479599e-002 2.5658103823661804e-001
+ <_>
+
+ 0 -1 951 -9.9752098321914673e-004
+
+ -2.6904699206352234e-001 4.0726143866777420e-002
+ <_>
+
+ 0 -1 111 2.1743077784776688e-002
+
+ 1.7429182305932045e-002 -6.2877011299133301e-001
+ <_>
+
+ 0 -1 866 3.7145437672734261e-003
+
+ -8.1450186669826508e-002 1.3246190547943115e-001
+ <_>
+
+ 0 -1 888 -1.5904067084193230e-002
+
+ 3.2105255126953125e-001 -3.4731235355138779e-002
+ <_>
+
+ 0 -1 907 -2.6992281898856163e-002
+
+ -6.8835800886154175e-001 1.6344616189599037e-002
+ <_>
+
+ 0 -1 830 6.8261945853009820e-004
+
+ -1.1232791095972061e-001 9.8401591181755066e-002
+ <_>
+
+ 0 -1 807 -2.5938652455806732e-002
+
+ -5.0289982557296753e-001 2.3814825341105461e-002
+
+ <_>
+
+ <_>
+ 0 0 2 2 -1.
+ <_>
+ 1 0 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 1 6 -1.
+ <_>
+ 0 2 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 0 0 2 4 -1.
+ <_>
+ 1 0 1 4 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 2 6 -1.
+ <_>
+ 0 2 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 0 0 8 7 -1.
+ <_>
+ 2 0 4 7 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 8 8 -1.
+ <_>
+ 2 0 4 8 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 6 13 -1.
+ <_>
+ 2 0 2 13 3.
+ 0
+ <_>
+
+ <_>
+ 0 0 12 13 -1.
+ <_>
+ 3 0 6 13 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 12 4 -1.
+ <_>
+ 4 0 4 4 3.
+ 0
+ <_>
+
+ <_>
+ 0 0 18 4 -1.
+ <_>
+ 6 0 6 4 3.
+ 0
+ <_>
+
+ <_>
+ 0 0 36 11 -1.
+ <_>
+ 12 0 12 11 3.
+ 0
+ <_>
+
+ <_>
+ 0 0 17 12 -1.
+ <_>
+ 0 4 17 4 3.
+ 0
+ <_>
+
+ <_>
+ 0 0 36 13 -1.
+ <_>
+ 18 0 18 13 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 22 2 -1.
+ <_>
+ 0 1 22 1 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 24 9 -1.
+ <_>
+ 0 3 24 3 3.
+ 0
+ <_>
+
+ <_>
+ 0 0 29 2 -1.
+ <_>
+ 0 1 29 1 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 34 2 -1.
+ <_>
+ 0 1 34 1 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 36 8 -1.
+ <_>
+ 0 2 36 4 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 42 6 -1.
+ <_>
+ 0 3 42 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 44 2 -1.
+ <_>
+ 0 1 44 1 2.
+ 0
+ <_>
+
+ <_>
+ 0 0 51 8 -1.
+ <_>
+ 0 2 51 4 2.
+ 0
+ <_>
+
+ <_>
+ 0 1 2 9 -1.
+ <_>
+ 1 1 1 9 2.
+ 0
+ <_>
+
+ <_>
+ 0 1 2 12 -1.
+ <_>
+ 1 1 1 12 2.
+ 0
+ <_>
+
+ <_>
+ 0 1 2 12 -1.
+ <_>
+ 0 7 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 0 1 8 10 -1.
+ <_>
+ 0 1 4 5 2.
+ <_>
+ 4 6 4 5 2.
+ 0
+ <_>
+
+ <_>
+ 0 1 7 12 -1.
+ <_>
+ 0 4 7 6 2.
+ 0
+ <_>
+
+ <_>
+ 0 1 12 12 -1.
+ <_>
+ 0 5 12 4 3.
+ 0
+ <_>
+
+ <_>
+ 0 1 17 12 -1.
+ <_>
+ 0 5 17 4 3.
+ 0
+ <_>
+
+ <_>
+ 0 2 6 2 -1.
+ <_>
+ 2 2 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 0 2 4 6 -1.
+ <_>
+ 2 2 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 0 2 20 7 -1.
+ <_>
+ 5 2 10 7 2.
+ 0
+ <_>
+
+ <_>
+ 0 3 1 4 -1.
+ <_>
+ 0 5 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 3 4 2 -1.
+ <_>
+ 1 3 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 3 6 9 -1.
+ <_>
+ 2 3 2 9 3.
+ 0
+ <_>
+
+ <_>
+ 0 3 4 10 -1.
+ <_>
+ 2 3 2 10 2.
+ 0
+ <_>
+
+ <_>
+ 0 3 6 10 -1.
+ <_>
+ 2 3 2 10 3.
+ 0
+ <_>
+
+ <_>
+ 0 3 9 3 -1.
+ <_>
+ 3 3 3 3 3.
+ 0
+ <_>
+
+ <_>
+ 0 3 3 9 -1.
+ <_>
+ 0 6 3 3 3.
+ 0
+ <_>
+
+ <_>
+ 0 3 9 6 -1.
+ <_>
+ 3 3 3 6 3.
+ 0
+ <_>
+
+ <_>
+ 0 3 8 4 -1.
+ <_>
+ 0 3 4 2 2.
+ <_>
+ 4 5 4 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 3 8 6 -1.
+ <_>
+ 0 3 4 3 2.
+ <_>
+ 4 6 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 3 16 10 -1.
+ <_>
+ 4 3 8 10 2.
+ 0
+ <_>
+
+ <_>
+ 0 3 10 6 -1.
+ <_>
+ 0 5 10 2 3.
+ 0
+ <_>
+
+ <_>
+ 0 3 16 8 -1.
+ <_>
+ 0 7 16 4 2.
+ 0
+ <_>
+
+ <_>
+ 0 3 51 8 -1.
+ <_>
+ 0 7 51 4 2.
+ 0
+ <_>
+
+ <_>
+ 0 4 3 3 -1.
+ <_>
+ 1 5 1 1 9.
+ 0
+ <_>
+
+ <_>
+ 0 4 3 9 -1.
+ <_>
+ 0 7 3 3 3.
+ 0
+ <_>
+
+ <_>
+ 0 4 20 7 -1.
+ <_>
+ 10 4 10 7 2.
+ 0
+ <_>
+
+ <_>
+ 0 4 34 9 -1.
+ <_>
+ 17 4 17 9 2.
+ 0
+ <_>
+
+ <_>
+ 0 5 1 4 -1.
+ <_>
+ 0 7 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 5 2 8 -1.
+ <_>
+ 1 5 1 8 2.
+ 0
+ <_>
+
+ <_>
+ 0 5 10 4 -1.
+ <_>
+ 0 7 10 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 5 22 6 -1.
+ <_>
+ 0 8 22 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 6 2 7 -1.
+ <_>
+ 1 6 1 7 2.
+ 0
+ <_>
+
+ <_>
+ 0 6 4 2 -1.
+ <_>
+ 2 6 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 6 6 5 -1.
+ <_>
+ 2 6 2 5 3.
+ 0
+ <_>
+
+ <_>
+ 0 6 3 6 -1.
+ <_>
+ 0 8 3 2 3.
+ 0
+ <_>
+
+ <_>
+ 0 6 4 6 -1.
+ <_>
+ 0 9 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 6 13 4 -1.
+ <_>
+ 0 8 13 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 6 14 4 -1.
+ <_>
+ 0 8 14 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 6 33 4 -1.
+ <_>
+ 0 8 33 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 6 44 6 -1.
+ <_>
+ 0 8 44 2 3.
+ 0
+ <_>
+
+ <_>
+ 0 7 1 6 -1.
+ <_>
+ 0 10 1 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 7 7 6 -1.
+ <_>
+ 0 10 7 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 7 25 6 -1.
+ <_>
+ 0 9 25 2 3.
+ 0
+ <_>
+
+ <_>
+ 0 7 32 3 -1.
+ <_>
+ 0 8 32 1 3.
+ 0
+ <_>
+
+ <_>
+ 0 8 12 5 -1.
+ <_>
+ 3 8 6 5 2.
+ 0
+ <_>
+
+ <_>
+ 0 8 12 2 -1.
+ <_>
+ 6 8 6 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 8 21 4 -1.
+ <_>
+ 7 8 7 4 3.
+ 0
+ <_>
+
+ <_>
+ 0 8 25 4 -1.
+ <_>
+ 0 9 25 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 9 15 4 -1.
+ <_>
+ 5 9 5 4 3.
+ 0
+ <_>
+
+ <_>
+ 0 9 28 4 -1.
+ <_>
+ 7 9 14 4 2.
+ 0
+ <_>
+
+ <_>
+ 0 9 28 4 -1.
+ <_>
+ 14 9 14 4 2.
+ 0
+ <_>
+
+ <_>
+ 0 9 46 2 -1.
+ <_>
+ 0 10 46 1 2.
+ 0
+ <_>
+
+ <_>
+ 0 9 50 2 -1.
+ <_>
+ 0 10 50 1 2.
+ 0
+ <_>
+
+ <_>
+ 0 10 6 3 -1.
+ <_>
+ 3 10 3 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 10 12 3 -1.
+ <_>
+ 3 10 6 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 10 10 3 -1.
+ <_>
+ 5 10 5 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 10 12 3 -1.
+ <_>
+ 6 10 6 3 2.
+ 0
+ <_>
+
+ <_>
+ 0 11 5 2 -1.
+ <_>
+ 0 12 5 1 2.
+ 0
+ <_>
+
+ <_>
+ 0 11 26 2 -1.
+ <_>
+ 13 11 13 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 11 28 2 -1.
+ <_>
+ 14 11 14 2 2.
+ 0
+ <_>
+
+ <_>
+ 0 11 42 2 -1.
+ <_>
+ 14 11 14 2 3.
+ 0
+ <_>
+
+ <_>
+ 0 11 19 2 -1.
+ <_>
+ 0 12 19 1 2.
+ 0
+ <_>
+
+ <_>
+ 0 11 23 2 -1.
+ <_>
+ 0 12 23 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 0 5 12 -1.
+ <_>
+ 1 3 5 6 2.
+ 0
+ <_>
+
+ <_>
+ 1 0 15 4 -1.
+ <_>
+ 6 0 5 4 3.
+ 0
+ <_>
+
+ <_>
+ 1 0 14 1 -1.
+ <_>
+ 8 0 7 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 0 8 2 -1.
+ <_>
+ 1 1 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 0 9 2 -1.
+ <_>
+ 1 1 9 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 0 11 2 -1.
+ <_>
+ 1 1 11 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 0 17 9 -1.
+ <_>
+ 1 3 17 3 3.
+ 0
+ <_>
+
+ <_>
+ 1 0 21 2 -1.
+ <_>
+ 1 1 21 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 0 41 6 -1.
+ <_>
+ 1 3 41 3 2.
+ 0
+ <_>
+
+ <_>
+ 1 0 47 2 -1.
+ <_>
+ 1 1 47 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 1 6 8 -1.
+ <_>
+ 3 1 2 8 3.
+ 0
+ <_>
+
+ <_>
+ 1 1 6 9 -1.
+ <_>
+ 3 1 2 9 3.
+ 0
+ <_>
+
+ <_>
+ 1 1 6 11 -1.
+ <_>
+ 3 1 2 11 3.
+ 0
+ <_>
+
+ <_>
+ 1 1 9 5 -1.
+ <_>
+ 4 1 3 5 3.
+ 0
+ <_>
+
+ <_>
+ 1 1 20 7 -1.
+ <_>
+ 6 1 10 7 2.
+ 0
+ <_>
+
+ <_>
+ 1 1 20 8 -1.
+ <_>
+ 6 1 10 8 2.
+ 0
+ <_>
+
+ <_>
+ 1 1 9 9 -1.
+ <_>
+ 1 4 9 3 3.
+ 0
+ <_>
+
+ <_>
+ 1 1 27 10 -1.
+ <_>
+ 10 1 9 10 3.
+ 0
+ <_>
+
+ <_>
+ 1 1 10 6 -1.
+ <_>
+ 1 3 10 2 3.
+ 0
+ <_>
+
+ <_>
+ 1 2 4 6 -1.
+ <_>
+ 1 2 2 3 2.
+ <_>
+ 3 5 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 1 2 20 8 -1.
+ <_>
+ 6 2 10 8 2.
+ 0
+ <_>
+
+ <_>
+ 1 2 13 10 -1.
+ <_>
+ 1 7 13 5 2.
+ 0
+ <_>
+
+ <_>
+ 1 2 34 7 -1.
+ <_>
+ 18 2 17 7 2.
+ 0
+ <_>
+
+ <_>
+ 1 3 4 3 -1.
+ <_>
+ 2 3 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 1 3 6 8 -1.
+ <_>
+ 3 3 2 8 3.
+ 0
+ <_>
+
+ <_>
+ 1 3 6 4 -1.
+ <_>
+ 1 3 3 2 2.
+ <_>
+ 4 5 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 1 3 6 8 -1.
+ <_>
+ 1 3 3 4 2.
+ <_>
+ 4 7 3 4 2.
+ 0
+ <_>
+
+ <_>
+ 1 3 6 5 -1.
+ <_>
+ 4 3 3 5 2.
+ 0
+ <_>
+
+ <_>
+ 1 3 15 3 -1.
+ <_>
+ 6 3 5 3 3.
+ 0
+ <_>
+
+ <_>
+ 1 3 36 9 -1.
+ <_>
+ 13 3 12 9 3.
+ 0
+ <_>
+
+ <_>
+ 1 3 36 10 -1.
+ <_>
+ 13 3 12 10 3.
+ 0
+ <_>
+
+ <_>
+ 1 4 4 2 -1.
+ <_>
+ 2 4 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 1 4 6 2 -1.
+ <_>
+ 3 4 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 1 4 6 3 -1.
+ <_>
+ 3 4 2 3 3.
+ 0
+ <_>
+
+ <_>
+ 1 4 6 4 -1.
+ <_>
+ 4 4 3 4 2.
+ 0
+ <_>
+
+ <_>
+ 1 4 6 6 -1.
+ <_>
+ 4 4 3 6 2.
+ 0
+ <_>
+
+ <_>
+ 1 4 9 4 -1.
+ <_>
+ 1 6 9 2 2.
+ 0
+ <_>
+
+ <_>
+ 1 5 12 3 -1.
+ <_>
+ 5 6 4 1 9.
+ 0
+ <_>
+
+ <_>
+ 1 7 16 6 -1.
+ <_>
+ 1 7 8 3 2.
+ <_>
+ 9 10 8 3 2.
+ 0
+ <_>
+
+ <_>
+ 1 11 46 2 -1.
+ <_>
+ 1 12 46 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 11 50 2 -1.
+ <_>
+ 1 12 50 1 2.
+ 0
+ <_>
+
+ <_>
+ 1 12 50 1 -1.
+ <_>
+ 26 12 25 1 2.
+ 0
+ <_>
+
+ <_>
+ 2 0 6 13 -1.
+ <_>
+ 4 0 2 13 3.
+ 0
+ <_>
+
+ <_>
+ 2 0 24 3 -1.
+ <_>
+ 8 0 12 3 2.
+ 0
+ <_>
+
+ <_>
+ 2 0 12 10 -1.
+ <_>
+ 8 0 6 10 2.
+ 0
+ <_>
+
+ <_>
+ 2 0 33 11 -1.
+ <_>
+ 13 0 11 11 3.
+ 0
+ <_>
+
+ <_>
+ 2 0 20 2 -1.
+ <_>
+ 2 1 20 1 2.
+ 0
+ <_>
+
+ <_>
+ 2 0 48 12 -1.
+ <_>
+ 26 0 24 12 2.
+ 0
+ <_>
+
+ <_>
+ 2 1 4 6 -1.
+ <_>
+ 2 1 2 3 2.
+ <_>
+ 4 4 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 2 1 16 9 -1.
+ <_>
+ 10 1 8 9 2.
+ 0
+ <_>
+
+ <_>
+ 2 1 11 9 -1.
+ <_>
+ 2 4 11 3 3.
+ 0
+ <_>
+
+ <_>
+ 2 1 18 10 -1.
+ <_>
+ 2 6 18 5 2.
+ 0
+ <_>
+
+ <_>
+ 2 2 3 2 -1.
+ <_>
+ 3 3 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 2 3 16 1 -1.
+ <_>
+ 6 3 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 2 3 25 6 -1.
+ <_>
+ 2 6 25 3 2.
+ 0
+ <_>
+
+ <_>
+ 2 4 4 2 -1.
+ <_>
+ 3 4 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 2 5 2 8 -1.
+ <_>
+ 2 5 1 4 2.
+ <_>
+ 3 9 1 4 2.
+ 0
+ <_>
+
+ <_>
+ 2 5 6 4 -1.
+ <_>
+ 5 5 3 4 2.
+ 0
+ <_>
+
+ <_>
+ 2 5 10 8 -1.
+ <_>
+ 2 7 10 4 2.
+ 0
+ <_>
+
+ <_>
+ 2 7 4 6 -1.
+ <_>
+ 2 7 2 3 2.
+ <_>
+ 4 10 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 2 7 4 4 -1.
+ <_>
+ 2 9 4 2 2.
+ 0
+ <_>
+
+ <_>
+ 2 8 14 2 -1.
+ <_>
+ 9 8 7 2 2.
+ 0
+ <_>
+
+ <_>
+ 2 8 24 5 -1.
+ <_>
+ 14 8 12 5 2.
+ 0
+ <_>
+
+ <_>
+ 2 9 8 3 -1.
+ <_>
+ 6 9 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 2 9 12 4 -1.
+ <_>
+ 6 9 4 4 3.
+ 0
+ <_>
+
+ <_>
+ 2 9 32 4 -1.
+ <_>
+ 2 9 16 2 2.
+ <_>
+ 18 11 16 2 2.
+ 0
+ <_>
+
+ <_>
+ 2 10 12 2 -1.
+ <_>
+ 2 10 6 1 2.
+ <_>
+ 8 11 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 2 11 38 1 -1.
+ <_>
+ 21 11 19 1 2.
+ 0
+ <_>
+
+ <_>
+ 2 12 32 1 -1.
+ <_>
+ 18 12 16 1 2.
+ 0
+ <_>
+
+ <_>
+ 3 0 1 2 -1.
+ <_>
+ 3 1 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 3 0 3 9 -1.
+ <_>
+ 4 3 1 3 9.
+ 0
+ <_>
+
+ <_>
+ 3 0 6 11 -1.
+ <_>
+ 5 0 2 11 3.
+ 0
+ <_>
+
+ <_>
+ 3 0 6 12 -1.
+ <_>
+ 5 0 2 12 3.
+ 0
+ <_>
+
+ <_>
+ 3 0 16 10 -1.
+ <_>
+ 11 0 8 10 2.
+ 0
+ <_>
+
+ <_>
+ 3 0 42 9 -1.
+ <_>
+ 17 3 14 3 9.
+ 0
+ <_>
+
+ <_>
+ 3 0 15 6 -1.
+ <_>
+ 3 3 15 3 2.
+ 0
+ <_>
+
+ <_>
+ 3 0 30 13 -1.
+ <_>
+ 18 0 15 13 2.
+ 0
+ <_>
+
+ <_>
+ 3 1 3 9 -1.
+ <_>
+ 4 1 1 9 3.
+ 0
+ <_>
+
+ <_>
+ 3 1 6 10 -1.
+ <_>
+ 5 1 2 10 3.
+ 0
+ <_>
+
+ <_>
+ 3 1 15 12 -1.
+ <_>
+ 8 5 5 4 9.
+ 0
+ <_>
+
+ <_>
+ 3 1 21 3 -1.
+ <_>
+ 10 1 7 3 3.
+ 0
+ <_>
+
+ <_>
+ 3 1 32 7 -1.
+ <_>
+ 11 1 16 7 2.
+ 0
+ <_>
+
+ <_>
+ 3 1 33 11 -1.
+ <_>
+ 14 1 11 11 3.
+ 0
+ <_>
+
+ <_>
+ 3 1 42 9 -1.
+ <_>
+ 17 4 14 3 9.
+ 0
+ <_>
+
+ <_>
+ 3 1 29 10 -1.
+ <_>
+ 3 6 29 5 2.
+ 0
+ <_>
+
+ <_>
+ 3 2 1 2 -1.
+ <_>
+ 3 2 1 1 2.
+ 1
+ <_>
+
+ <_>
+ 3 2 6 11 -1.
+ <_>
+ 5 2 2 11 3.
+ 0
+ <_>
+
+ <_>
+ 3 2 16 3 -1.
+ <_>
+ 7 2 8 3 2.
+ 0
+ <_>
+
+ <_>
+ 3 2 46 6 -1.
+ <_>
+ 3 5 46 3 2.
+ 0
+ <_>
+
+ <_>
+ 3 3 14 10 -1.
+ <_>
+ 10 3 7 10 2.
+ 0
+ <_>
+
+ <_>
+ 3 3 40 5 -1.
+ <_>
+ 13 3 20 5 2.
+ 0
+ <_>
+
+ <_>
+ 3 5 2 2 -1.
+ <_>
+ 4 5 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 3 5 16 5 -1.
+ <_>
+ 7 5 8 5 2.
+ 0
+ <_>
+
+ <_>
+ 3 5 16 2 -1.
+ <_>
+ 3 5 8 1 2.
+ <_>
+ 11 6 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 3 6 8 3 -1.
+ <_>
+ 7 6 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 3 7 16 6 -1.
+ <_>
+ 11 7 8 6 2.
+ 0
+ <_>
+
+ <_>
+ 3 7 45 2 -1.
+ <_>
+ 3 8 45 1 2.
+ 0
+ <_>
+
+ <_>
+ 3 9 9 4 -1.
+ <_>
+ 6 9 3 4 3.
+ 0
+ <_>
+
+ <_>
+ 3 10 6 3 -1.
+ <_>
+ 5 11 2 1 9.
+ 0
+ <_>
+
+ <_>
+ 3 11 9 2 -1.
+ <_>
+ 3 12 9 1 2.
+ 0
+ <_>
+
+ <_>
+ 3 11 48 2 -1.
+ <_>
+ 3 12 48 1 2.
+ 0
+ <_>
+
+ <_>
+ 4 0 4 1 -1.
+ <_>
+ 4 0 2 1 2.
+ 1
+ <_>
+
+ <_>
+ 4 0 6 11 -1.
+ <_>
+ 6 0 2 11 3.
+ 0
+ <_>
+
+ <_>
+ 4 0 4 12 -1.
+ <_>
+ 4 3 4 6 2.
+ 0
+ <_>
+
+ <_>
+ 4 0 18 4 -1.
+ <_>
+ 10 0 6 4 3.
+ 0
+ <_>
+
+ <_>
+ 4 1 6 9 -1.
+ <_>
+ 6 1 2 9 3.
+ 0
+ <_>
+
+ <_>
+ 4 1 14 2 -1.
+ <_>
+ 11 1 7 2 2.
+ 0
+ <_>
+
+ <_>
+ 4 1 36 4 -1.
+ <_>
+ 22 1 18 4 2.
+ 0
+ <_>
+
+ <_>
+ 4 2 3 11 -1.
+ <_>
+ 5 2 1 11 3.
+ 0
+ <_>
+
+ <_>
+ 4 2 6 5 -1.
+ <_>
+ 6 2 2 5 3.
+ 0
+ <_>
+
+ <_>
+ 4 2 6 10 -1.
+ <_>
+ 6 2 2 10 3.
+ 0
+ <_>
+
+ <_>
+ 4 2 10 10 -1.
+ <_>
+ 4 2 5 5 2.
+ <_>
+ 9 7 5 5 2.
+ 0
+ <_>
+
+ <_>
+ 4 2 21 3 -1.
+ <_>
+ 11 2 7 3 3.
+ 0
+ <_>
+
+ <_>
+ 4 2 27 8 -1.
+ <_>
+ 4 4 27 4 2.
+ 0
+ <_>
+
+ <_>
+ 4 3 3 2 -1.
+ <_>
+ 5 4 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 4 3 2 6 -1.
+ <_>
+ 4 5 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 4 3 6 5 -1.
+ <_>
+ 6 3 2 5 3.
+ 0
+ <_>
+
+ <_>
+ 4 3 30 6 -1.
+ <_>
+ 14 5 10 2 9.
+ 0
+ <_>
+
+ <_>
+ 4 3 37 8 -1.
+ <_>
+ 4 5 37 4 2.
+ 0
+ <_>
+
+ <_>
+ 4 4 4 2 -1.
+ <_>
+ 5 5 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 4 4 4 2 -1.
+ <_>
+ 4 4 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 4 4 7 3 -1.
+ <_>
+ 4 5 7 1 3.
+ 0
+ <_>
+
+ <_>
+ 4 4 23 9 -1.
+ <_>
+ 4 7 23 3 3.
+ 0
+ <_>
+
+ <_>
+ 4 5 5 4 -1.
+ <_>
+ 4 7 5 2 2.
+ 0
+ <_>
+
+ <_>
+ 4 7 42 4 -1.
+ <_>
+ 4 8 42 2 2.
+ 0
+ <_>
+
+ <_>
+ 4 8 16 1 -1.
+ <_>
+ 12 8 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 4 9 24 4 -1.
+ <_>
+ 10 9 12 4 2.
+ 0
+ <_>
+
+ <_>
+ 4 10 10 2 -1.
+ <_>
+ 4 10 5 1 2.
+ <_>
+ 9 11 5 1 2.
+ 0
+ <_>
+
+ <_>
+ 4 10 7 2 -1.
+ <_>
+ 4 11 7 1 2.
+ 0
+ <_>
+
+ <_>
+ 5 0 16 8 -1.
+ <_>
+ 9 0 8 8 2.
+ 0
+ <_>
+
+ <_>
+ 5 0 24 13 -1.
+ <_>
+ 13 0 8 13 3.
+ 0
+ <_>
+
+ <_>
+ 5 1 8 12 -1.
+ <_>
+ 5 1 4 6 2.
+ <_>
+ 9 7 4 6 2.
+ 0
+ <_>
+
+ <_>
+ 5 1 36 12 -1.
+ <_>
+ 5 7 36 6 2.
+ 0
+ <_>
+
+ <_>
+ 5 2 3 10 -1.
+ <_>
+ 6 2 1 10 3.
+ 0
+ <_>
+
+ <_>
+ 5 2 6 6 -1.
+ <_>
+ 7 2 2 6 3.
+ 0
+ <_>
+
+ <_>
+ 5 2 3 6 -1.
+ <_>
+ 5 5 3 3 2.
+ 0
+ <_>
+
+ <_>
+ 5 2 12 9 -1.
+ <_>
+ 5 5 12 3 3.
+ 0
+ <_>
+
+ <_>
+ 5 2 34 8 -1.
+ <_>
+ 5 6 34 4 2.
+ 0
+ <_>
+
+ <_>
+ 5 3 3 6 -1.
+ <_>
+ 6 3 1 6 3.
+ 0
+ <_>
+
+ <_>
+ 5 3 6 4 -1.
+ <_>
+ 7 3 2 4 3.
+ 0
+ <_>
+
+ <_>
+ 5 3 4 5 -1.
+ <_>
+ 7 3 2 5 2.
+ 0
+ <_>
+
+ <_>
+ 5 3 4 6 -1.
+ <_>
+ 7 3 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 5 3 4 6 -1.
+ <_>
+ 5 6 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 5 3 21 8 -1.
+ <_>
+ 12 3 7 8 3.
+ 0
+ <_>
+
+ <_>
+ 5 4 3 7 -1.
+ <_>
+ 6 4 1 7 3.
+ 0
+ <_>
+
+ <_>
+ 5 4 3 9 -1.
+ <_>
+ 6 4 1 9 3.
+ 0
+ <_>
+
+ <_>
+ 5 4 18 6 -1.
+ <_>
+ 11 6 6 2 9.
+ 0
+ <_>
+
+ <_>
+ 5 4 27 9 -1.
+ <_>
+ 14 7 9 3 9.
+ 0
+ <_>
+
+ <_>
+ 5 4 24 6 -1.
+ <_>
+ 17 4 12 6 2.
+ 0
+ <_>
+
+ <_>
+ 5 5 4 2 -1.
+ <_>
+ 6 5 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 5 5 2 3 -1.
+ <_>
+ 6 5 1 3 2.
+ 0
+ <_>
+
+ <_>
+ 5 5 3 4 -1.
+ <_>
+ 6 5 1 4 3.
+ 0
+ <_>
+
+ <_>
+ 5 5 4 7 -1.
+ <_>
+ 6 5 2 7 2.
+ 0
+ <_>
+
+ <_>
+ 5 5 4 2 -1.
+ <_>
+ 5 5 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 5 5 6 4 -1.
+ <_>
+ 7 5 2 4 3.
+ 0
+ <_>
+
+ <_>
+ 5 5 4 4 -1.
+ <_>
+ 5 7 4 2 2.
+ 0
+ <_>
+
+ <_>
+ 5 6 4 6 -1.
+ <_>
+ 6 6 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 5 6 12 2 -1.
+ <_>
+ 11 6 6 2 2.
+ 0
+ <_>
+
+ <_>
+ 5 7 3 6 -1.
+ <_>
+ 5 9 3 2 3.
+ 0
+ <_>
+
+ <_>
+ 5 7 6 6 -1.
+ <_>
+ 5 7 3 3 2.
+ <_>
+ 8 10 3 3 2.
+ 0
+ <_>
+
+ <_>
+ 5 7 6 6 -1.
+ <_>
+ 8 7 3 6 2.
+ 0
+ <_>
+
+ <_>
+ 5 7 12 6 -1.
+ <_>
+ 5 10 12 3 2.
+ 0
+ <_>
+
+ <_>
+ 5 9 9 4 -1.
+ <_>
+ 8 9 3 4 3.
+ 0
+ <_>
+
+ <_>
+ 5 10 6 2 -1.
+ <_>
+ 5 10 3 1 2.
+ <_>
+ 8 11 3 1 2.
+ 0
+ <_>
+
+ <_>
+ 5 10 20 3 -1.
+ <_>
+ 10 10 10 3 2.
+ 0
+ <_>
+
+ <_>
+ 5 11 16 2 -1.
+ <_>
+ 5 12 16 1 2.
+ 0
+ <_>
+
+ <_>
+ 6 0 2 6 -1.
+ <_>
+ 4 2 2 2 3.
+ 1
+ <_>
+
+ <_>
+ 6 0 12 1 -1.
+ <_>
+ 9 3 6 1 2.
+ 1
+ <_>
+
+ <_>
+ 6 0 3 6 -1.
+ <_>
+ 4 2 3 2 3.
+ 1
+ <_>
+
+ <_>
+ 6 0 6 5 -1.
+ <_>
+ 6 0 3 5 2.
+ 1
+ <_>
+
+ <_>
+ 6 0 8 2 -1.
+ <_>
+ 6 0 4 1 2.
+ <_>
+ 10 1 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 6 0 33 13 -1.
+ <_>
+ 17 0 11 13 3.
+ 0
+ <_>
+
+ <_>
+ 6 1 4 5 -1.
+ <_>
+ 7 1 2 5 2.
+ 0
+ <_>
+
+ <_>
+ 6 1 2 11 -1.
+ <_>
+ 7 1 1 11 2.
+ 0
+ <_>
+
+ <_>
+ 6 1 6 12 -1.
+ <_>
+ 8 1 2 12 3.
+ 0
+ <_>
+
+ <_>
+ 6 1 12 11 -1.
+ <_>
+ 12 1 6 11 2.
+ 0
+ <_>
+
+ <_>
+ 6 2 4 4 -1.
+ <_>
+ 7 2 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 6 2 3 7 -1.
+ <_>
+ 7 2 1 7 3.
+ 0
+ <_>
+
+ <_>
+ 6 2 12 10 -1.
+ <_>
+ 12 2 6 10 2.
+ 0
+ <_>
+
+ <_>
+ 6 3 1 6 -1.
+ <_>
+ 6 6 1 3 2.
+ 0
+ <_>
+
+ <_>
+ 6 3 3 8 -1.
+ <_>
+ 7 3 1 8 3.
+ 0
+ <_>
+
+ <_>
+ 6 3 37 6 -1.
+ <_>
+ 6 6 37 3 2.
+ 0
+ <_>
+
+ <_>
+ 6 4 3 4 -1.
+ <_>
+ 7 4 1 4 3.
+ 0
+ <_>
+
+ <_>
+ 6 4 8 2 -1.
+ <_>
+ 8 4 4 2 2.
+ 0
+ <_>
+
+ <_>
+ 6 4 3 4 -1.
+ <_>
+ 6 6 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 6 4 3 6 -1.
+ <_>
+ 6 6 3 2 3.
+ 0
+ <_>
+
+ <_>
+ 6 4 9 9 -1.
+ <_>
+ 9 7 3 3 9.
+ 0
+ <_>
+
+ <_>
+ 6 6 4 5 -1.
+ <_>
+ 7 6 2 5 2.
+ 0
+ <_>
+
+ <_>
+ 6 6 4 6 -1.
+ <_>
+ 7 6 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 6 9 6 4 -1.
+ <_>
+ 6 9 3 2 2.
+ <_>
+ 9 11 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 6 10 20 3 -1.
+ <_>
+ 11 10 10 3 2.
+ 0
+ <_>
+
+ <_>
+ 6 11 7 2 -1.
+ <_>
+ 6 12 7 1 2.
+ 0
+ <_>
+
+ <_>
+ 6 11 17 2 -1.
+ <_>
+ 6 12 17 1 2.
+ 0
+ <_>
+
+ <_>
+ 7 0 12 1 -1.
+ <_>
+ 10 0 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 7 0 4 2 -1.
+ <_>
+ 7 1 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 7 0 32 9 -1.
+ <_>
+ 23 0 16 9 2.
+ 0
+ <_>
+
+ <_>
+ 7 0 38 13 -1.
+ <_>
+ 26 0 19 13 2.
+ 0
+ <_>
+
+ <_>
+ 7 1 4 2 -1.
+ <_>
+ 8 2 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 7 1 16 10 -1.
+ <_>
+ 11 1 8 10 2.
+ 0
+ <_>
+
+ <_>
+ 7 1 15 6 -1.
+ <_>
+ 12 1 5 6 3.
+ 0
+ <_>
+
+ <_>
+ 7 1 15 8 -1.
+ <_>
+ 12 1 5 8 3.
+ 0
+ <_>
+
+ <_>
+ 7 1 15 11 -1.
+ <_>
+ 12 1 5 11 3.
+ 0
+ <_>
+
+ <_>
+ 7 1 7 6 -1.
+ <_>
+ 7 4 7 3 2.
+ 0
+ <_>
+
+ <_>
+ 7 2 1 4 -1.
+ <_>
+ 6 3 1 2 2.
+ 1
+ <_>
+
+ <_>
+ 7 2 4 2 -1.
+ <_>
+ 8 3 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 7 2 4 7 -1.
+ <_>
+ 8 3 2 7 2.
+ 1
+ <_>
+
+ <_>
+ 7 2 2 9 -1.
+ <_>
+ 8 2 1 9 2.
+ 0
+ <_>
+
+ <_>
+ 7 2 6 3 -1.
+ <_>
+ 9 3 2 1 9.
+ 0
+ <_>
+
+ <_>
+ 7 3 2 5 -1.
+ <_>
+ 8 3 1 5 2.
+ 0
+ <_>
+
+ <_>
+ 7 3 2 6 -1.
+ <_>
+ 8 3 1 6 2.
+ 0
+ <_>
+
+ <_>
+ 7 3 3 7 -1.
+ <_>
+ 8 3 1 7 3.
+ 0
+ <_>
+
+ <_>
+ 7 4 1 4 -1.
+ <_>
+ 7 5 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 7 4 3 7 -1.
+ <_>
+ 8 4 1 7 3.
+ 0
+ <_>
+
+ <_>
+ 7 4 28 9 -1.
+ <_>
+ 21 4 14 9 2.
+ 0
+ <_>
+
+ <_>
+ 7 5 3 6 -1.
+ <_>
+ 8 5 1 6 3.
+ 0
+ <_>
+
+ <_>
+ 7 5 4 6 -1.
+ <_>
+ 8 5 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 7 5 4 4 -1.
+ <_>
+ 7 5 2 2 2.
+ <_>
+ 9 7 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 7 6 3 3 -1.
+ <_>
+ 8 6 1 3 3.
+ 0
+ <_>
+
+ <_>
+ 7 6 3 6 -1.
+ <_>
+ 8 6 1 6 3.
+ 0
+ <_>
+
+ <_>
+ 7 10 4 2 -1.
+ <_>
+ 7 10 2 1 2.
+ <_>
+ 9 11 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 7 10 6 2 -1.
+ <_>
+ 7 11 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 7 11 36 2 -1.
+ <_>
+ 7 11 18 1 2.
+ <_>
+ 25 12 18 1 2.
+ 0
+ <_>
+
+ <_>
+ 8 0 3 2 -1.
+ <_>
+ 9 1 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 8 0 2 8 -1.
+ <_>
+ 8 0 1 8 2.
+ 1
+ <_>
+
+ <_>
+ 8 0 6 4 -1.
+ <_>
+ 8 0 3 2 2.
+ <_>
+ 11 2 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 8 0 8 2 -1.
+ <_>
+ 8 0 4 1 2.
+ <_>
+ 12 1 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 8 0 10 12 -1.
+ <_>
+ 13 0 5 12 2.
+ 0
+ <_>
+
+ <_>
+ 8 0 15 12 -1.
+ <_>
+ 13 0 5 12 3.
+ 0
+ <_>
+
+ <_>
+ 8 0 15 13 -1.
+ <_>
+ 13 0 5 13 3.
+ 0
+ <_>
+
+ <_>
+ 8 0 8 6 -1.
+ <_>
+ 8 3 8 3 2.
+ 0
+ <_>
+
+ <_>
+ 8 1 3 2 -1.
+ <_>
+ 9 2 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 8 1 12 3 -1.
+ <_>
+ 12 1 4 3 3.
+ 0
+ <_>
+
+ <_>
+ 8 1 8 6 -1.
+ <_>
+ 12 1 4 6 2.
+ 0
+ <_>
+
+ <_>
+ 8 1 15 4 -1.
+ <_>
+ 13 1 5 4 3.
+ 0
+ <_>
+
+ <_>
+ 8 1 15 12 -1.
+ <_>
+ 13 1 5 12 3.
+ 0
+ <_>
+
+ <_>
+ 8 1 8 10 -1.
+ <_>
+ 8 6 8 5 2.
+ 0
+ <_>
+
+ <_>
+ 8 1 10 8 -1.
+ <_>
+ 8 3 10 4 2.
+ 0
+ <_>
+
+ <_>
+ 8 2 4 3 -1.
+ <_>
+ 9 2 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 8 2 3 4 -1.
+ <_>
+ 9 2 1 4 3.
+ 0
+ <_>
+
+ <_>
+ 8 2 4 4 -1.
+ <_>
+ 9 2 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 8 2 6 2 -1.
+ <_>
+ 10 2 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 8 2 7 4 -1.
+ <_>
+ 8 4 7 2 2.
+ 0
+ <_>
+
+ <_>
+ 8 3 4 3 -1.
+ <_>
+ 9 3 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 8 4 10 9 -1.
+ <_>
+ 13 4 5 9 2.
+ 0
+ <_>
+
+ <_>
+ 8 5 23 2 -1.
+ <_>
+ 8 6 23 1 2.
+ 0
+ <_>
+
+ <_>
+ 8 6 3 1 -1.
+ <_>
+ 9 7 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 8 6 3 5 -1.
+ <_>
+ 9 6 1 5 3.
+ 0
+ <_>
+
+ <_>
+ 8 6 3 6 -1.
+ <_>
+ 9 6 1 6 3.
+ 0
+ <_>
+
+ <_>
+ 8 7 6 2 -1.
+ <_>
+ 11 7 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 8 9 4 4 -1.
+ <_>
+ 8 11 4 2 2.
+ 0
+ <_>
+
+ <_>
+ 8 10 8 2 -1.
+ <_>
+ 8 11 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 9 0 4 10 -1.
+ <_>
+ 10 0 2 10 2.
+ 0
+ <_>
+
+ <_>
+ 9 0 6 1 -1.
+ <_>
+ 11 0 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 9 0 6 3 -1.
+ <_>
+ 11 1 2 1 9.
+ 0
+ <_>
+
+ <_>
+ 9 0 4 4 -1.
+ <_>
+ 9 0 2 2 2.
+ <_>
+ 11 2 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 9 0 12 12 -1.
+ <_>
+ 13 0 4 12 3.
+ 0
+ <_>
+
+ <_>
+ 9 1 3 2 -1.
+ <_>
+ 10 2 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 9 1 12 2 -1.
+ <_>
+ 13 1 4 2 3.
+ 0
+ <_>
+
+ <_>
+ 9 1 12 4 -1.
+ <_>
+ 13 1 4 4 3.
+ 0
+ <_>
+
+ <_>
+ 9 1 12 11 -1.
+ <_>
+ 13 1 4 11 3.
+ 0
+ <_>
+
+ <_>
+ 9 1 8 12 -1.
+ <_>
+ 13 1 4 12 2.
+ 0
+ <_>
+
+ <_>
+ 9 1 12 12 -1.
+ <_>
+ 13 1 4 12 3.
+ 0
+ <_>
+
+ <_>
+ 9 2 12 10 -1.
+ <_>
+ 13 2 4 10 3.
+ 0
+ <_>
+
+ <_>
+ 9 3 4 8 -1.
+ <_>
+ 9 7 4 4 2.
+ 0
+ <_>
+
+ <_>
+ 9 3 6 8 -1.
+ <_>
+ 9 7 6 4 2.
+ 0
+ <_>
+
+ <_>
+ 9 4 33 4 -1.
+ <_>
+ 9 5 33 2 2.
+ 0
+ <_>
+
+ <_>
+ 9 5 4 6 -1.
+ <_>
+ 9 5 2 3 2.
+ <_>
+ 11 8 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 9 7 8 6 -1.
+ <_>
+ 9 9 8 2 3.
+ 0
+ <_>
+
+ <_>
+ 9 8 3 3 -1.
+ <_>
+ 10 9 1 1 9.
+ 0
+ <_>
+
+ <_>
+ 9 8 3 2 -1.
+ <_>
+ 10 9 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 9 8 8 4 -1.
+ <_>
+ 13 8 4 4 2.
+ 0
+ <_>
+
+ <_>
+ 9 8 20 1 -1.
+ <_>
+ 19 8 10 1 2.
+ 0
+ <_>
+
+ <_>
+ 9 9 2 4 -1.
+ <_>
+ 9 11 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 9 10 6 2 -1.
+ <_>
+ 9 10 3 1 2.
+ <_>
+ 12 11 3 1 2.
+ 0
+ <_>
+
+ <_>
+ 9 10 16 3 -1.
+ <_>
+ 13 10 8 3 2.
+ 0
+ <_>
+
+ <_>
+ 9 10 42 3 -1.
+ <_>
+ 30 10 21 3 2.
+ 0
+ <_>
+
+ <_>
+ 9 12 42 1 -1.
+ <_>
+ 23 12 14 1 3.
+ 0
+ <_>
+
+ <_>
+ 10 0 12 2 -1.
+ <_>
+ 10 0 6 1 2.
+ <_>
+ 16 1 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 10 0 8 2 -1.
+ <_>
+ 10 1 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 10 1 9 11 -1.
+ <_>
+ 13 1 3 11 3.
+ 0
+ <_>
+
+ <_>
+ 10 1 12 2 -1.
+ <_>
+ 14 1 4 2 3.
+ 0
+ <_>
+
+ <_>
+ 10 2 3 9 -1.
+ <_>
+ 11 5 1 3 9.
+ 0
+ <_>
+
+ <_>
+ 10 2 4 5 -1.
+ <_>
+ 11 2 2 5 2.
+ 0
+ <_>
+
+ <_>
+ 10 2 12 11 -1.
+ <_>
+ 13 2 6 11 2.
+ 0
+ <_>
+
+ <_>
+ 10 2 4 3 -1.
+ <_>
+ 9 3 4 1 3.
+ 1
+ <_>
+
+ <_>
+ 10 3 2 4 -1.
+ <_>
+ 10 3 1 2 2.
+ <_>
+ 11 5 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 10 4 8 1 -1.
+ <_>
+ 10 4 4 1 2.
+ 1
+ <_>
+
+ <_>
+ 10 6 4 4 -1.
+ <_>
+ 10 6 2 2 2.
+ <_>
+ 12 8 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 10 6 6 5 -1.
+ <_>
+ 13 6 3 5 2.
+ 0
+ <_>
+
+ <_>
+ 10 7 2 6 -1.
+ <_>
+ 10 9 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 10 9 2 3 -1.
+ <_>
+ 10 10 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 10 10 1 2 -1.
+ <_>
+ 10 11 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 10 11 3 2 -1.
+ <_>
+ 10 12 3 1 2.
+ 0
+ <_>
+
+ <_>
+ 10 11 6 2 -1.
+ <_>
+ 10 12 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 11 0 3 8 -1.
+ <_>
+ 11 4 3 4 2.
+ 0
+ <_>
+
+ <_>
+ 11 0 12 12 -1.
+ <_>
+ 15 0 4 12 3.
+ 0
+ <_>
+
+ <_>
+ 11 0 10 4 -1.
+ <_>
+ 11 0 5 2 2.
+ <_>
+ 16 2 5 2 2.
+ 0
+ <_>
+
+ <_>
+ 11 0 6 6 -1.
+ <_>
+ 11 3 6 3 2.
+ 0
+ <_>
+
+ <_>
+ 11 0 21 7 -1.
+ <_>
+ 18 0 7 7 3.
+ 0
+ <_>
+
+ <_>
+ 11 0 10 3 -1.
+ <_>
+ 10 1 10 1 3.
+ 1
+ <_>
+
+ <_>
+ 11 0 36 9 -1.
+ <_>
+ 29 0 18 9 2.
+ 0
+ <_>
+
+ <_>
+ 11 1 2 3 -1.
+ <_>
+ 10 2 2 1 3.
+ 1
+ <_>
+
+ <_>
+ 11 1 9 11 -1.
+ <_>
+ 14 1 3 11 3.
+ 0
+ <_>
+
+ <_>
+ 11 1 12 11 -1.
+ <_>
+ 15 1 4 11 3.
+ 0
+ <_>
+
+ <_>
+ 11 2 9 9 -1.
+ <_>
+ 14 5 3 3 9.
+ 0
+ <_>
+
+ <_>
+ 11 2 12 5 -1.
+ <_>
+ 14 2 6 5 2.
+ 0
+ <_>
+
+ <_>
+ 11 3 6 9 -1.
+ <_>
+ 13 6 2 3 9.
+ 0
+ <_>
+
+ <_>
+ 11 3 3 3 -1.
+ <_>
+ 10 4 3 1 3.
+ 1
+ <_>
+
+ <_>
+ 11 3 27 6 -1.
+ <_>
+ 11 6 27 3 2.
+ 0
+ <_>
+
+ <_>
+ 11 4 6 9 -1.
+ <_>
+ 13 7 2 3 9.
+ 0
+ <_>
+
+ <_>
+ 11 4 26 6 -1.
+ <_>
+ 11 7 26 3 2.
+ 0
+ <_>
+
+ <_>
+ 11 4 27 6 -1.
+ <_>
+ 11 7 27 3 2.
+ 0
+ <_>
+
+ <_>
+ 11 4 31 2 -1.
+ <_>
+ 11 5 31 1 2.
+ 0
+ <_>
+
+ <_>
+ 11 4 35 2 -1.
+ <_>
+ 11 5 35 1 2.
+ 0
+ <_>
+
+ <_>
+ 11 7 30 3 -1.
+ <_>
+ 21 8 10 1 9.
+ 0
+ <_>
+
+ <_>
+ 11 8 8 4 -1.
+ <_>
+ 13 8 4 4 2.
+ 0
+ <_>
+
+ <_>
+ 11 8 6 4 -1.
+ <_>
+ 11 10 6 2 2.
+ 0
+ <_>
+
+ <_>
+ 11 9 8 2 -1.
+ <_>
+ 13 9 4 2 2.
+ 0
+ <_>
+
+ <_>
+ 12 0 4 1 -1.
+ <_>
+ 14 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 12 0 16 5 -1.
+ <_>
+ 16 0 8 5 2.
+ 0
+ <_>
+
+ <_>
+ 12 0 16 13 -1.
+ <_>
+ 16 0 8 13 2.
+ 0
+ <_>
+
+ <_>
+ 12 0 18 5 -1.
+ <_>
+ 18 0 6 5 3.
+ 0
+ <_>
+
+ <_>
+ 12 0 7 2 -1.
+ <_>
+ 12 1 7 1 2.
+ 0
+ <_>
+
+ <_>
+ 12 1 6 12 -1.
+ <_>
+ 14 5 2 4 9.
+ 0
+ <_>
+
+ <_>
+ 12 1 10 2 -1.
+ <_>
+ 17 1 5 2 2.
+ 0
+ <_>
+
+ <_>
+ 12 2 2 3 -1.
+ <_>
+ 12 2 1 3 2.
+ 1
+ <_>
+
+ <_>
+ 12 2 9 2 -1.
+ <_>
+ 15 2 3 2 3.
+ 0
+ <_>
+
+ <_>
+ 12 2 12 4 -1.
+ <_>
+ 16 2 4 4 3.
+ 0
+ <_>
+
+ <_>
+ 12 2 28 2 -1.
+ <_>
+ 19 2 14 2 2.
+ 0
+ <_>
+
+ <_>
+ 12 3 6 2 -1.
+ <_>
+ 14 5 2 2 3.
+ 1
+ <_>
+
+ <_>
+ 12 4 4 5 -1.
+ <_>
+ 13 5 2 5 2.
+ 1
+ <_>
+
+ <_>
+ 12 4 4 3 -1.
+ <_>
+ 12 4 2 3 2.
+ 1
+ <_>
+
+ <_>
+ 12 4 6 6 -1.
+ <_>
+ 14 4 2 6 3.
+ 0
+ <_>
+
+ <_>
+ 12 4 5 2 -1.
+ <_>
+ 12 5 5 1 2.
+ 0
+ <_>
+
+ <_>
+ 12 4 18 9 -1.
+ <_>
+ 18 7 6 3 9.
+ 0
+ <_>
+
+ <_>
+ 12 5 6 5 -1.
+ <_>
+ 14 5 2 5 3.
+ 0
+ <_>
+
+ <_>
+ 12 5 18 6 -1.
+ <_>
+ 18 7 6 2 9.
+ 0
+ <_>
+
+ <_>
+ 12 7 21 3 -1.
+ <_>
+ 19 8 7 1 9.
+ 0
+ <_>
+
+ <_>
+ 12 12 6 1 -1.
+ <_>
+ 14 12 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 12 12 39 1 -1.
+ <_>
+ 25 12 13 1 3.
+ 0
+ <_>
+
+ <_>
+ 13 0 16 5 -1.
+ <_>
+ 17 0 8 5 2.
+ 0
+ <_>
+
+ <_>
+ 13 0 5 8 -1.
+ <_>
+ 11 2 5 4 2.
+ 1
+ <_>
+
+ <_>
+ 13 0 24 10 -1.
+ <_>
+ 19 0 12 10 2.
+ 0
+ <_>
+
+ <_>
+ 13 0 36 3 -1.
+ <_>
+ 22 0 18 3 2.
+ 0
+ <_>
+
+ <_>
+ 13 0 28 1 -1.
+ <_>
+ 27 0 14 1 2.
+ 0
+ <_>
+
+ <_>
+ 13 1 8 3 -1.
+ <_>
+ 17 1 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 13 1 8 6 -1.
+ <_>
+ 17 1 4 6 2.
+ 0
+ <_>
+
+ <_>
+ 13 1 20 7 -1.
+ <_>
+ 18 1 10 7 2.
+ 0
+ <_>
+
+ <_>
+ 13 1 36 1 -1.
+ <_>
+ 31 1 18 1 2.
+ 0
+ <_>
+
+ <_>
+ 13 1 20 3 -1.
+ <_>
+ 13 2 20 1 3.
+ 0
+ <_>
+
+ <_>
+ 13 2 14 1 -1.
+ <_>
+ 20 2 7 1 2.
+ 0
+ <_>
+
+ <_>
+ 13 3 3 8 -1.
+ <_>
+ 13 5 3 4 2.
+ 0
+ <_>
+
+ <_>
+ 13 3 4 2 -1.
+ <_>
+ 13 4 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 13 4 5 2 -1.
+ <_>
+ 13 5 5 1 2.
+ 0
+ <_>
+
+ <_>
+ 13 5 4 3 -1.
+ <_>
+ 13 5 2 3 2.
+ 1
+ <_>
+
+ <_>
+ 13 5 24 6 -1.
+ <_>
+ 19 5 12 6 2.
+ 0
+ <_>
+
+ <_>
+ 13 5 32 6 -1.
+ <_>
+ 13 8 32 3 2.
+ 0
+ <_>
+
+ <_>
+ 13 6 1 3 -1.
+ <_>
+ 12 7 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 13 6 3 6 -1.
+ <_>
+ 13 8 3 2 3.
+ 0
+ <_>
+
+ <_>
+ 13 7 3 4 -1.
+ <_>
+ 13 9 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 13 8 6 2 -1.
+ <_>
+ 13 9 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 13 9 10 4 -1.
+ <_>
+ 18 9 5 4 2.
+ 0
+ <_>
+
+ <_>
+ 13 9 18 4 -1.
+ <_>
+ 19 9 6 4 3.
+ 0
+ <_>
+
+ <_>
+ 14 0 4 1 -1.
+ <_>
+ 15 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 14 0 1 8 -1.
+ <_>
+ 14 4 1 4 2.
+ 0
+ <_>
+
+ <_>
+ 14 0 1 12 -1.
+ <_>
+ 14 4 1 4 3.
+ 0
+ <_>
+
+ <_>
+ 14 0 1 12 -1.
+ <_>
+ 14 6 1 6 2.
+ 0
+ <_>
+
+ <_>
+ 14 0 8 4 -1.
+ <_>
+ 14 0 4 2 2.
+ <_>
+ 18 2 4 2 2.
+ 0
+ <_>
+
+ <_>
+ 14 0 12 6 -1.
+ <_>
+ 18 2 4 2 9.
+ 0
+ <_>
+
+ <_>
+ 14 0 16 4 -1.
+ <_>
+ 18 0 8 4 2.
+ 0
+ <_>
+
+ <_>
+ 14 1 1 4 -1.
+ <_>
+ 14 3 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 14 1 2 4 -1.
+ <_>
+ 14 2 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 14 1 2 12 -1.
+ <_>
+ 14 7 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 14 2 2 8 -1.
+ <_>
+ 14 4 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 14 2 2 9 -1.
+ <_>
+ 14 5 2 3 3.
+ 0
+ <_>
+
+ <_>
+ 14 2 18 4 -1.
+ <_>
+ 14 2 9 2 2.
+ <_>
+ 23 4 9 2 2.
+ 0
+ <_>
+
+ <_>
+ 14 3 12 9 -1.
+ <_>
+ 14 6 12 3 3.
+ 0
+ <_>
+
+ <_>
+ 14 4 2 1 -1.
+ <_>
+ 15 4 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 14 4 16 1 -1.
+ <_>
+ 22 4 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 14 5 2 4 -1.
+ <_>
+ 14 6 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 14 5 2 6 -1.
+ <_>
+ 14 8 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 14 5 3 4 -1.
+ <_>
+ 14 6 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 14 5 3 6 -1.
+ <_>
+ 14 8 3 3 2.
+ 0
+ <_>
+
+ <_>
+ 14 5 4 3 -1.
+ <_>
+ 13 6 4 1 3.
+ 1
+ <_>
+
+ <_>
+ 14 6 3 4 -1.
+ <_>
+ 14 8 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 14 7 3 2 -1.
+ <_>
+ 14 8 3 1 2.
+ 0
+ <_>
+
+ <_>
+ 14 8 2 3 -1.
+ <_>
+ 15 8 1 3 2.
+ 0
+ <_>
+
+ <_>
+ 14 8 9 2 -1.
+ <_>
+ 17 8 3 2 3.
+ 0
+ <_>
+
+ <_>
+ 14 8 6 4 -1.
+ <_>
+ 17 8 3 4 2.
+ 0
+ <_>
+
+ <_>
+ 14 9 2 2 -1.
+ <_>
+ 14 10 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 14 9 16 4 -1.
+ <_>
+ 18 9 8 4 2.
+ 0
+ <_>
+
+ <_>
+ 14 11 15 2 -1.
+ <_>
+ 19 11 5 2 3.
+ 0
+ <_>
+
+ <_>
+ 14 12 2 1 -1.
+ <_>
+ 15 12 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 14 12 3 1 -1.
+ <_>
+ 15 12 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 15 0 4 1 -1.
+ <_>
+ 16 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 15 0 10 2 -1.
+ <_>
+ 20 0 5 2 2.
+ 0
+ <_>
+
+ <_>
+ 15 0 15 2 -1.
+ <_>
+ 20 0 5 2 3.
+ 0
+ <_>
+
+ <_>
+ 15 0 33 9 -1.
+ <_>
+ 15 3 33 3 3.
+ 0
+ <_>
+
+ <_>
+ 15 1 1 12 -1.
+ <_>
+ 15 7 1 6 2.
+ 0
+ <_>
+
+ <_>
+ 15 1 2 6 -1.
+ <_>
+ 15 3 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 15 1 36 2 -1.
+ <_>
+ 33 1 18 2 2.
+ 0
+ <_>
+
+ <_>
+ 15 2 1 9 -1.
+ <_>
+ 15 5 1 3 3.
+ 0
+ <_>
+
+ <_>
+ 15 2 3 4 -1.
+ <_>
+ 15 4 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 15 2 9 9 -1.
+ <_>
+ 18 5 3 3 9.
+ 0
+ <_>
+
+ <_>
+ 15 2 24 6 -1.
+ <_>
+ 15 2 12 3 2.
+ <_>
+ 27 5 12 3 2.
+ 0
+ <_>
+
+ <_>
+ 15 3 4 3 -1.
+ <_>
+ 16 4 2 3 2.
+ 1
+ <_>
+
+ <_>
+ 15 3 4 6 -1.
+ <_>
+ 15 6 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 15 4 3 4 -1.
+ <_>
+ 15 6 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 15 4 6 3 -1.
+ <_>
+ 14 5 6 1 3.
+ 1
+ <_>
+
+ <_>
+ 15 6 4 4 -1.
+ <_>
+ 15 6 2 2 2.
+ <_>
+ 17 8 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 15 8 1 3 -1.
+ <_>
+ 15 9 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 15 8 15 5 -1.
+ <_>
+ 20 8 5 5 3.
+ 0
+ <_>
+
+ <_>
+ 15 9 1 2 -1.
+ <_>
+ 15 10 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 15 9 2 2 -1.
+ <_>
+ 15 9 1 1 2.
+ <_>
+ 16 10 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 15 10 13 3 -1.
+ <_>
+ 15 11 13 1 3.
+ 0
+ <_>
+
+ <_>
+ 15 10 34 3 -1.
+ <_>
+ 15 11 34 1 3.
+ 0
+ <_>
+
+ <_>
+ 15 11 35 2 -1.
+ <_>
+ 15 12 35 1 2.
+ 0
+ <_>
+
+ <_>
+ 16 0 1 2 -1.
+ <_>
+ 16 0 1 1 2.
+ 1
+ <_>
+
+ <_>
+ 16 0 4 8 -1.
+ <_>
+ 16 0 2 8 2.
+ 1
+ <_>
+
+ <_>
+ 16 0 12 1 -1.
+ <_>
+ 19 0 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 16 0 6 6 -1.
+ <_>
+ 14 2 6 2 3.
+ 1
+ <_>
+
+ <_>
+ 16 0 26 4 -1.
+ <_>
+ 29 0 13 4 2.
+ 0
+ <_>
+
+ <_>
+ 16 1 18 12 -1.
+ <_>
+ 22 1 6 12 3.
+ 0
+ <_>
+
+ <_>
+ 16 1 18 2 -1.
+ <_>
+ 16 2 18 1 2.
+ 0
+ <_>
+
+ <_>
+ 16 2 4 5 -1.
+ <_>
+ 16 2 2 5 2.
+ 1
+ <_>
+
+ <_>
+ 16 3 1 2 -1.
+ <_>
+ 16 4 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 16 5 5 3 -1.
+ <_>
+ 15 6 5 1 3.
+ 1
+ <_>
+
+ <_>
+ 16 9 15 4 -1.
+ <_>
+ 21 9 5 4 3.
+ 0
+ <_>
+
+ <_>
+ 16 9 18 4 -1.
+ <_>
+ 22 9 6 4 3.
+ 0
+ <_>
+
+ <_>
+ 17 0 1 6 -1.
+ <_>
+ 15 2 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 17 0 6 2 -1.
+ <_>
+ 17 1 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 17 0 18 5 -1.
+ <_>
+ 23 0 6 5 3.
+ 0
+ <_>
+
+ <_>
+ 17 0 8 2 -1.
+ <_>
+ 17 1 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 17 0 11 4 -1.
+ <_>
+ 17 2 11 2 2.
+ 0
+ <_>
+
+ <_>
+ 17 0 16 3 -1.
+ <_>
+ 17 1 16 1 3.
+ 0
+ <_>
+
+ <_>
+ 17 0 17 3 -1.
+ <_>
+ 17 1 17 1 3.
+ 0
+ <_>
+
+ <_>
+ 17 0 19 2 -1.
+ <_>
+ 17 1 19 1 2.
+ 0
+ <_>
+
+ <_>
+ 17 0 20 4 -1.
+ <_>
+ 17 1 20 2 2.
+ 0
+ <_>
+
+ <_>
+ 17 0 32 8 -1.
+ <_>
+ 17 4 32 4 2.
+ 0
+ <_>
+
+ <_>
+ 17 4 1 2 -1.
+ <_>
+ 17 5 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 17 7 8 1 -1.
+ <_>
+ 21 7 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 17 7 21 3 -1.
+ <_>
+ 17 8 21 1 3.
+ 0
+ <_>
+
+ <_>
+ 17 7 28 6 -1.
+ <_>
+ 17 9 28 2 3.
+ 0
+ <_>
+
+ <_>
+ 18 0 3 1 -1.
+ <_>
+ 19 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 18 0 2 5 -1.
+ <_>
+ 18 0 1 5 2.
+ 1
+ <_>
+
+ <_>
+ 18 0 3 4 -1.
+ <_>
+ 18 2 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 18 0 11 2 -1.
+ <_>
+ 18 1 11 1 2.
+ 0
+ <_>
+
+ <_>
+ 18 0 18 3 -1.
+ <_>
+ 18 1 18 1 3.
+ 0
+ <_>
+
+ <_>
+ 18 1 17 2 -1.
+ <_>
+ 18 2 17 1 2.
+ 0
+ <_>
+
+ <_>
+ 18 2 4 4 -1.
+ <_>
+ 19 2 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 18 2 2 6 -1.
+ <_>
+ 16 4 2 2 3.
+ 1
+ <_>
+
+ <_>
+ 18 2 6 4 -1.
+ <_>
+ 20 2 2 4 3.
+ 0
+ <_>
+
+ <_>
+ 18 3 3 2 -1.
+ <_>
+ 19 3 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 18 7 4 3 -1.
+ <_>
+ 19 7 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 18 8 4 2 -1.
+ <_>
+ 19 8 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 18 8 4 3 -1.
+ <_>
+ 19 8 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 18 10 27 3 -1.
+ <_>
+ 18 11 27 1 3.
+ 0
+ <_>
+
+ <_>
+ 19 0 2 1 -1.
+ <_>
+ 20 0 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 19 0 3 1 -1.
+ <_>
+ 20 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 19 0 3 8 -1.
+ <_>
+ 20 1 1 8 3.
+ 1
+ <_>
+
+ <_>
+ 19 1 3 6 -1.
+ <_>
+ 20 3 1 2 9.
+ 0
+ <_>
+
+ <_>
+ 19 1 9 12 -1.
+ <_>
+ 22 1 3 12 3.
+ 0
+ <_>
+
+ <_>
+ 19 1 17 2 -1.
+ <_>
+ 19 2 17 1 2.
+ 0
+ <_>
+
+ <_>
+ 19 3 6 2 -1.
+ <_>
+ 21 3 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 19 4 4 4 -1.
+ <_>
+ 19 4 2 2 2.
+ <_>
+ 21 6 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 19 12 2 1 -1.
+ <_>
+ 20 12 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 20 0 4 1 -1.
+ <_>
+ 21 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 20 0 4 11 -1.
+ <_>
+ 21 0 2 11 2.
+ 0
+ <_>
+
+ <_>
+ 20 0 6 1 -1.
+ <_>
+ 22 0 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 20 0 12 12 -1.
+ <_>
+ 24 0 4 12 3.
+ 0
+ <_>
+
+ <_>
+ 20 0 12 3 -1.
+ <_>
+ 26 0 6 3 2.
+ 0
+ <_>
+
+ <_>
+ 20 0 18 3 -1.
+ <_>
+ 26 0 6 3 3.
+ 0
+ <_>
+
+ <_>
+ 20 0 18 4 -1.
+ <_>
+ 29 0 9 4 2.
+ 0
+ <_>
+
+ <_>
+ 20 0 26 1 -1.
+ <_>
+ 33 0 13 1 2.
+ 0
+ <_>
+
+ <_>
+ 20 0 22 4 -1.
+ <_>
+ 20 1 22 2 2.
+ 0
+ <_>
+
+ <_>
+ 20 2 3 2 -1.
+ <_>
+ 21 3 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 20 3 4 8 -1.
+ <_>
+ 21 3 2 8 2.
+ 0
+ <_>
+
+ <_>
+ 20 4 3 9 -1.
+ <_>
+ 21 7 1 3 9.
+ 0
+ <_>
+
+ <_>
+ 20 5 3 5 -1.
+ <_>
+ 21 5 1 5 3.
+ 0
+ <_>
+
+ <_>
+ 20 5 4 8 -1.
+ <_>
+ 22 5 2 8 2.
+ 0
+ <_>
+
+ <_>
+ 20 6 3 2 -1.
+ <_>
+ 21 7 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 20 6 4 2 -1.
+ <_>
+ 21 7 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 20 6 24 6 -1.
+ <_>
+ 20 9 24 3 2.
+ 0
+ <_>
+
+ <_>
+ 20 8 4 2 -1.
+ <_>
+ 21 8 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 20 9 4 4 -1.
+ <_>
+ 20 9 2 2 2.
+ <_>
+ 22 11 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 20 9 18 4 -1.
+ <_>
+ 26 9 6 4 3.
+ 0
+ <_>
+
+ <_>
+ 20 12 4 1 -1.
+ <_>
+ 21 12 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 21 0 2 6 -1.
+ <_>
+ 21 0 1 3 2.
+ <_>
+ 22 3 1 3 2.
+ 0
+ <_>
+
+ <_>
+ 21 0 4 2 -1.
+ <_>
+ 21 1 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 21 0 28 1 -1.
+ <_>
+ 28 0 14 1 2.
+ 0
+ <_>
+
+ <_>
+ 21 0 21 4 -1.
+ <_>
+ 28 0 7 4 3.
+ 0
+ <_>
+
+ <_>
+ 21 0 14 5 -1.
+ <_>
+ 28 0 7 5 2.
+ 0
+ <_>
+
+ <_>
+ 21 1 4 11 -1.
+ <_>
+ 22 1 2 11 2.
+ 0
+ <_>
+
+ <_>
+ 21 2 25 9 -1.
+ <_>
+ 21 5 25 3 3.
+ 0
+ <_>
+
+ <_>
+ 21 3 4 9 -1.
+ <_>
+ 22 3 2 9 2.
+ 0
+ <_>
+
+ <_>
+ 21 3 6 1 -1.
+ <_>
+ 23 3 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 21 6 4 2 -1.
+ <_>
+ 22 7 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 21 7 3 2 -1.
+ <_>
+ 22 8 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 21 7 3 3 -1.
+ <_>
+ 22 8 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 21 7 6 4 -1.
+ <_>
+ 23 7 2 4 3.
+ 0
+ <_>
+
+ <_>
+ 21 10 21 3 -1.
+ <_>
+ 28 10 7 3 3.
+ 0
+ <_>
+
+ <_>
+ 21 10 18 3 -1.
+ <_>
+ 21 11 18 1 3.
+ 0
+ <_>
+
+ <_>
+ 21 12 30 1 -1.
+ <_>
+ 36 12 15 1 2.
+ 0
+ <_>
+
+ <_>
+ 22 0 4 1 -1.
+ <_>
+ 23 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 22 0 8 1 -1.
+ <_>
+ 24 0 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 22 0 12 4 -1.
+ <_>
+ 25 0 6 4 2.
+ 0
+ <_>
+
+ <_>
+ 22 0 15 2 -1.
+ <_>
+ 27 0 5 2 3.
+ 0
+ <_>
+
+ <_>
+ 22 0 28 2 -1.
+ <_>
+ 36 0 14 2 2.
+ 0
+ <_>
+
+ <_>
+ 22 1 15 2 -1.
+ <_>
+ 27 1 5 2 3.
+ 0
+ <_>
+
+ <_>
+ 22 1 8 3 -1.
+ <_>
+ 21 2 8 1 3.
+ 1
+ <_>
+
+ <_>
+ 22 2 3 3 -1.
+ <_>
+ 23 2 1 3 3.
+ 0
+ <_>
+
+ <_>
+ 22 2 3 9 -1.
+ <_>
+ 23 2 1 9 3.
+ 0
+ <_>
+
+ <_>
+ 22 2 3 10 -1.
+ <_>
+ 23 2 1 10 3.
+ 0
+ <_>
+
+ <_>
+ 22 5 3 3 -1.
+ <_>
+ 22 6 3 1 3.
+ 0
+ <_>
+
+ <_>
+ 22 6 2 3 -1.
+ <_>
+ 22 7 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 22 7 2 3 -1.
+ <_>
+ 22 8 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 22 8 3 2 -1.
+ <_>
+ 23 8 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 22 8 3 2 -1.
+ <_>
+ 23 9 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 22 8 2 2 -1.
+ <_>
+ 22 9 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 22 9 4 4 -1.
+ <_>
+ 22 9 2 2 2.
+ <_>
+ 24 11 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 22 9 9 2 -1.
+ <_>
+ 25 9 3 2 3.
+ 0
+ <_>
+
+ <_>
+ 22 9 6 4 -1.
+ <_>
+ 25 9 3 4 2.
+ 0
+ <_>
+
+ <_>
+ 22 9 9 4 -1.
+ <_>
+ 25 9 3 4 3.
+ 0
+ <_>
+
+ <_>
+ 22 10 6 2 -1.
+ <_>
+ 22 10 3 1 2.
+ <_>
+ 25 11 3 1 2.
+ 0
+ <_>
+
+ <_>
+ 23 0 3 1 -1.
+ <_>
+ 24 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 23 0 6 1 -1.
+ <_>
+ 25 0 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 23 0 4 4 -1.
+ <_>
+ 23 0 2 2 2.
+ <_>
+ 25 2 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 23 0 8 12 -1.
+ <_>
+ 25 0 4 12 2.
+ 0
+ <_>
+
+ <_>
+ 23 0 12 1 -1.
+ <_>
+ 26 0 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 23 0 21 2 -1.
+ <_>
+ 23 1 21 1 2.
+ 0
+ <_>
+
+ <_>
+ 23 2 12 10 -1.
+ <_>
+ 29 2 6 10 2.
+ 0
+ <_>
+
+ <_>
+ 23 3 4 2 -1.
+ <_>
+ 24 3 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 23 4 2 4 -1.
+ <_>
+ 22 5 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 23 4 12 9 -1.
+ <_>
+ 27 4 4 9 3.
+ 0
+ <_>
+
+ <_>
+ 23 5 1 3 -1.
+ <_>
+ 23 6 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 23 6 9 1 -1.
+ <_>
+ 26 6 3 1 3.
+ 0
+ <_>
+
+ <_>
+ 23 8 4 3 -1.
+ <_>
+ 24 8 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 23 9 4 1 -1.
+ <_>
+ 24 9 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 23 9 8 4 -1.
+ <_>
+ 25 9 4 4 2.
+ 0
+ <_>
+
+ <_>
+ 23 9 12 4 -1.
+ <_>
+ 26 9 6 4 2.
+ 0
+ <_>
+
+ <_>
+ 23 11 6 2 -1.
+ <_>
+ 23 11 3 1 2.
+ <_>
+ 26 12 3 1 2.
+ 0
+ <_>
+
+ <_>
+ 24 0 3 1 -1.
+ <_>
+ 25 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 24 0 4 1 -1.
+ <_>
+ 25 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 24 0 4 6 -1.
+ <_>
+ 24 0 2 3 2.
+ <_>
+ 26 3 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 24 0 17 2 -1.
+ <_>
+ 24 1 17 1 2.
+ 0
+ <_>
+
+ <_>
+ 24 0 22 2 -1.
+ <_>
+ 24 1 22 1 2.
+ 0
+ <_>
+
+ <_>
+ 24 1 4 4 -1.
+ <_>
+ 24 1 2 2 2.
+ <_>
+ 26 3 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 24 1 13 2 -1.
+ <_>
+ 24 2 13 1 2.
+ 0
+ <_>
+
+ <_>
+ 24 2 2 2 -1.
+ <_>
+ 24 2 1 1 2.
+ <_>
+ 25 3 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 24 6 6 1 -1.
+ <_>
+ 26 6 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 24 7 4 6 -1.
+ <_>
+ 24 7 2 3 2.
+ <_>
+ 26 10 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 24 8 2 5 -1.
+ <_>
+ 25 8 1 5 2.
+ 0
+ <_>
+
+ <_>
+ 24 9 15 4 -1.
+ <_>
+ 29 9 5 4 3.
+ 0
+ <_>
+
+ <_>
+ 24 10 27 3 -1.
+ <_>
+ 24 11 27 1 3.
+ 0
+ <_>
+
+ <_>
+ 25 0 3 1 -1.
+ <_>
+ 26 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 25 0 3 2 -1.
+ <_>
+ 26 1 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 25 0 4 1 -1.
+ <_>
+ 27 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 25 0 8 1 -1.
+ <_>
+ 27 0 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 25 0 26 3 -1.
+ <_>
+ 25 1 26 1 3.
+ 0
+ <_>
+
+ <_>
+ 25 1 2 4 -1.
+ <_>
+ 25 1 1 2 2.
+ <_>
+ 26 3 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 25 1 3 2 -1.
+ <_>
+ 26 2 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 25 2 3 2 -1.
+ <_>
+ 26 3 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 25 4 4 1 -1.
+ <_>
+ 26 4 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 25 4 4 6 -1.
+ <_>
+ 25 4 2 3 2.
+ <_>
+ 27 7 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 25 6 3 6 -1.
+ <_>
+ 26 8 1 2 9.
+ 0
+ <_>
+
+ <_>
+ 25 7 4 2 -1.
+ <_>
+ 26 7 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 25 8 4 2 -1.
+ <_>
+ 26 8 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 25 9 3 3 -1.
+ <_>
+ 26 9 1 3 3.
+ 0
+ <_>
+
+ <_>
+ 25 9 13 4 -1.
+ <_>
+ 25 11 13 2 2.
+ 0
+ <_>
+
+ <_>
+ 25 10 2 2 -1.
+ <_>
+ 25 11 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 26 0 3 1 -1.
+ <_>
+ 27 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 26 0 4 1 -1.
+ <_>
+ 27 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 26 0 1 12 -1.
+ <_>
+ 23 3 1 6 2.
+ 1
+ <_>
+
+ <_>
+ 26 0 18 13 -1.
+ <_>
+ 32 0 6 13 3.
+ 0
+ <_>
+
+ <_>
+ 26 0 18 2 -1.
+ <_>
+ 35 0 9 2 2.
+ 0
+ <_>
+
+ <_>
+ 26 2 1 6 -1.
+ <_>
+ 26 4 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 26 2 2 2 -1.
+ <_>
+ 26 2 1 2 2.
+ 1
+ <_>
+
+ <_>
+ 26 2 3 2 -1.
+ <_>
+ 27 3 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 26 2 5 3 -1.
+ <_>
+ 25 3 5 1 3.
+ 1
+ <_>
+
+ <_>
+ 26 2 10 4 -1.
+ <_>
+ 26 3 10 2 2.
+ 0
+ <_>
+
+ <_>
+ 26 3 4 6 -1.
+ <_>
+ 26 3 2 3 2.
+ <_>
+ 28 6 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 26 3 5 3 -1.
+ <_>
+ 25 4 5 1 3.
+ 1
+ <_>
+
+ <_>
+ 26 4 4 6 -1.
+ <_>
+ 26 4 2 3 2.
+ <_>
+ 28 7 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 26 5 4 2 -1.
+ <_>
+ 26 5 2 1 2.
+ <_>
+ 28 6 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 26 5 4 4 -1.
+ <_>
+ 26 5 2 2 2.
+ <_>
+ 28 7 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 26 6 1 6 -1.
+ <_>
+ 26 8 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 26 6 4 1 -1.
+ <_>
+ 28 6 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 26 7 4 3 -1.
+ <_>
+ 27 7 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 26 7 4 6 -1.
+ <_>
+ 26 7 2 3 2.
+ <_>
+ 28 10 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 26 7 18 6 -1.
+ <_>
+ 32 7 6 6 3.
+ 0
+ <_>
+
+ <_>
+ 26 7 17 6 -1.
+ <_>
+ 26 10 17 3 2.
+ 0
+ <_>
+
+ <_>
+ 26 8 3 1 -1.
+ <_>
+ 27 8 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 26 9 12 4 -1.
+ <_>
+ 29 9 6 4 2.
+ 0
+ <_>
+
+ <_>
+ 26 11 20 1 -1.
+ <_>
+ 36 11 10 1 2.
+ 0
+ <_>
+
+ <_>
+ 27 0 2 1 -1.
+ <_>
+ 28 0 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 27 0 3 1 -1.
+ <_>
+ 28 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 27 0 4 1 -1.
+ <_>
+ 29 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 27 0 18 2 -1.
+ <_>
+ 27 0 9 1 2.
+ <_>
+ 36 1 9 1 2.
+ 0
+ <_>
+
+ <_>
+ 27 1 3 3 -1.
+ <_>
+ 28 2 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 27 1 6 11 -1.
+ <_>
+ 29 1 2 11 3.
+ 0
+ <_>
+
+ <_>
+ 27 1 14 10 -1.
+ <_>
+ 34 1 7 10 2.
+ 0
+ <_>
+
+ <_>
+ 27 2 3 2 -1.
+ <_>
+ 28 3 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 27 2 3 9 -1.
+ <_>
+ 28 2 1 9 3.
+ 0
+ <_>
+
+ <_>
+ 27 2 5 4 -1.
+ <_>
+ 26 3 5 2 2.
+ 1
+ <_>
+
+ <_>
+ 27 3 3 6 -1.
+ <_>
+ 28 3 1 6 3.
+ 0
+ <_>
+
+ <_>
+ 27 3 3 9 -1.
+ <_>
+ 28 3 1 9 3.
+ 0
+ <_>
+
+ <_>
+ 27 3 13 4 -1.
+ <_>
+ 27 5 13 2 2.
+ 0
+ <_>
+
+ <_>
+ 27 6 3 2 -1.
+ <_>
+ 28 7 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 27 7 3 2 -1.
+ <_>
+ 28 7 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 27 7 3 2 -1.
+ <_>
+ 28 8 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 28 0 3 1 -1.
+ <_>
+ 29 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 28 0 4 12 -1.
+ <_>
+ 29 0 2 12 2.
+ 0
+ <_>
+
+ <_>
+ 28 0 10 3 -1.
+ <_>
+ 28 0 5 3 2.
+ 1
+ <_>
+
+ <_>
+ 28 0 15 13 -1.
+ <_>
+ 33 0 5 13 3.
+ 0
+ <_>
+
+ <_>
+ 28 1 2 10 -1.
+ <_>
+ 29 1 1 10 2.
+ 0
+ <_>
+
+ <_>
+ 28 1 4 11 -1.
+ <_>
+ 29 1 2 11 2.
+ 0
+ <_>
+
+ <_>
+ 28 2 4 10 -1.
+ <_>
+ 29 2 2 10 2.
+ 0
+ <_>
+
+ <_>
+ 28 2 7 3 -1.
+ <_>
+ 27 3 7 1 3.
+ 1
+ <_>
+
+ <_>
+ 28 3 4 9 -1.
+ <_>
+ 29 3 2 9 2.
+ 0
+ <_>
+
+ <_>
+ 28 3 23 8 -1.
+ <_>
+ 28 5 23 4 2.
+ 0
+ <_>
+
+ <_>
+ 28 4 1 6 -1.
+ <_>
+ 28 7 1 3 2.
+ 0
+ <_>
+
+ <_>
+ 28 4 3 6 -1.
+ <_>
+ 28 6 3 2 3.
+ 0
+ <_>
+
+ <_>
+ 28 5 4 2 -1.
+ <_>
+ 30 5 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 28 5 20 6 -1.
+ <_>
+ 28 8 20 3 2.
+ 0
+ <_>
+
+ <_>
+ 28 6 1 4 -1.
+ <_>
+ 27 7 1 2 2.
+ 1
+ <_>
+
+ <_>
+ 28 6 3 3 -1.
+ <_>
+ 29 7 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 28 7 3 1 -1.
+ <_>
+ 29 8 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 28 7 4 3 -1.
+ <_>
+ 28 8 4 1 3.
+ 0
+ <_>
+
+ <_>
+ 28 7 12 2 -1.
+ <_>
+ 28 8 12 1 2.
+ 0
+ <_>
+
+ <_>
+ 28 8 2 1 -1.
+ <_>
+ 28 8 1 1 2.
+ 1
+ <_>
+
+ <_>
+ 28 8 3 1 -1.
+ <_>
+ 29 9 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 28 11 14 2 -1.
+ <_>
+ 28 11 7 1 2.
+ <_>
+ 35 12 7 1 2.
+ 0
+ <_>
+
+ <_>
+ 29 0 3 1 -1.
+ <_>
+ 30 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 29 0 4 1 -1.
+ <_>
+ 30 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 29 2 3 8 -1.
+ <_>
+ 30 2 1 8 3.
+ 0
+ <_>
+
+ <_>
+ 29 3 3 9 -1.
+ <_>
+ 30 3 1 9 3.
+ 0
+ <_>
+
+ <_>
+ 29 5 2 3 -1.
+ <_>
+ 29 6 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 29 5 3 4 -1.
+ <_>
+ 29 6 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 29 7 3 2 -1.
+ <_>
+ 30 8 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 29 7 3 3 -1.
+ <_>
+ 30 8 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 29 8 4 2 -1.
+ <_>
+ 30 8 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 29 8 2 2 -1.
+ <_>
+ 29 8 1 2 2.
+ 1
+ <_>
+
+ <_>
+ 29 8 3 2 -1.
+ <_>
+ 30 9 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 29 9 15 4 -1.
+ <_>
+ 34 9 5 4 3.
+ 0
+ <_>
+
+ <_>
+ 29 11 22 2 -1.
+ <_>
+ 40 11 11 2 2.
+ 0
+ <_>
+
+ <_>
+ 29 12 2 1 -1.
+ <_>
+ 30 12 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 29 12 3 1 -1.
+ <_>
+ 30 12 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 30 0 3 1 -1.
+ <_>
+ 31 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 30 0 4 1 -1.
+ <_>
+ 31 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 30 0 9 2 -1.
+ <_>
+ 33 3 3 2 3.
+ 1
+ <_>
+
+ <_>
+ 30 0 20 3 -1.
+ <_>
+ 35 0 10 3 2.
+ 0
+ <_>
+
+ <_>
+ 30 0 16 2 -1.
+ <_>
+ 30 1 16 1 2.
+ 0
+ <_>
+
+ <_>
+ 30 1 4 2 -1.
+ <_>
+ 30 1 2 1 2.
+ <_>
+ 32 2 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 30 1 8 12 -1.
+ <_>
+ 32 1 4 12 2.
+ 0
+ <_>
+
+ <_>
+ 30 2 8 1 -1.
+ <_>
+ 32 2 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 30 2 6 2 -1.
+ <_>
+ 32 2 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 30 2 7 3 -1.
+ <_>
+ 29 3 7 1 3.
+ 1
+ <_>
+
+ <_>
+ 30 4 4 4 -1.
+ <_>
+ 31 4 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 30 6 3 4 -1.
+ <_>
+ 30 6 3 2 2.
+ 1
+ <_>
+
+ <_>
+ 30 7 12 6 -1.
+ <_>
+ 33 7 6 6 2.
+ 0
+ <_>
+
+ <_>
+ 30 8 18 3 -1.
+ <_>
+ 36 9 6 1 9.
+ 0
+ <_>
+
+ <_>
+ 30 9 4 2 -1.
+ <_>
+ 31 9 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 30 9 12 4 -1.
+ <_>
+ 33 9 6 4 2.
+ 0
+ <_>
+
+ <_>
+ 30 12 3 1 -1.
+ <_>
+ 31 12 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 31 0 3 1 -1.
+ <_>
+ 32 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 31 0 4 1 -1.
+ <_>
+ 32 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 31 0 5 2 -1.
+ <_>
+ 31 1 5 1 2.
+ 0
+ <_>
+
+ <_>
+ 31 0 12 2 -1.
+ <_>
+ 31 0 6 1 2.
+ <_>
+ 37 1 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 31 0 12 3 -1.
+ <_>
+ 31 1 12 1 3.
+ 0
+ <_>
+
+ <_>
+ 31 2 4 4 -1.
+ <_>
+ 31 2 2 2 2.
+ <_>
+ 33 4 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 31 3 3 9 -1.
+ <_>
+ 31 6 3 3 3.
+ 0
+ <_>
+
+ <_>
+ 31 3 8 2 -1.
+ <_>
+ 31 3 4 2 2.
+ 1
+ <_>
+
+ <_>
+ 31 5 3 6 -1.
+ <_>
+ 32 7 1 2 9.
+ 0
+ <_>
+
+ <_>
+ 31 7 3 3 -1.
+ <_>
+ 32 7 1 3 3.
+ 0
+ <_>
+
+ <_>
+ 31 9 2 4 -1.
+ <_>
+ 31 9 1 2 2.
+ <_>
+ 32 11 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 32 0 3 1 -1.
+ <_>
+ 33 0 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 32 0 3 2 -1.
+ <_>
+ 33 0 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 32 0 3 3 -1.
+ <_>
+ 33 1 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 32 0 3 4 -1.
+ <_>
+ 32 1 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 32 0 8 1 -1.
+ <_>
+ 36 0 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 32 0 17 3 -1.
+ <_>
+ 32 1 17 1 3.
+ 0
+ <_>
+
+ <_>
+ 32 0 17 4 -1.
+ <_>
+ 32 1 17 2 2.
+ 0
+ <_>
+
+ <_>
+ 32 0 18 3 -1.
+ <_>
+ 32 1 18 1 3.
+ 0
+ <_>
+
+ <_>
+ 32 0 19 3 -1.
+ <_>
+ 32 1 19 1 3.
+ 0
+ <_>
+
+ <_>
+ 32 1 3 6 -1.
+ <_>
+ 33 3 1 2 9.
+ 0
+ <_>
+
+ <_>
+ 32 1 3 2 -1.
+ <_>
+ 33 2 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 32 1 12 1 -1.
+ <_>
+ 36 1 4 1 3.
+ 0
+ <_>
+
+ <_>
+ 32 1 8 2 -1.
+ <_>
+ 32 1 4 1 2.
+ <_>
+ 36 2 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 32 1 19 9 -1.
+ <_>
+ 32 4 19 3 3.
+ 0
+ <_>
+
+ <_>
+ 32 2 2 2 -1.
+ <_>
+ 32 3 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 32 3 4 3 -1.
+ <_>
+ 33 3 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 32 7 4 2 -1.
+ <_>
+ 33 7 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 32 9 3 1 -1.
+ <_>
+ 33 9 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 32 9 3 3 -1.
+ <_>
+ 33 10 1 1 9.
+ 0
+ <_>
+
+ <_>
+ 32 11 3 2 -1.
+ <_>
+ 32 12 3 1 2.
+ 0
+ <_>
+
+ <_>
+ 33 0 3 3 -1.
+ <_>
+ 34 1 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 33 0 3 4 -1.
+ <_>
+ 34 1 1 4 3.
+ 1
+ <_>
+
+ <_>
+ 33 0 12 1 -1.
+ <_>
+ 37 0 4 1 3.
+ 0
+ <_>
+
+ <_>
+ 33 0 16 1 -1.
+ <_>
+ 37 0 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 33 0 10 1 -1.
+ <_>
+ 38 0 5 1 2.
+ 0
+ <_>
+
+ <_>
+ 33 0 9 2 -1.
+ <_>
+ 33 1 9 1 2.
+ 0
+ <_>
+
+ <_>
+ 33 0 17 4 -1.
+ <_>
+ 33 1 17 2 2.
+ 0
+ <_>
+
+ <_>
+ 33 1 1 2 -1.
+ <_>
+ 33 2 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 33 1 3 2 -1.
+ <_>
+ 34 2 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 33 1 4 2 -1.
+ <_>
+ 34 2 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 33 1 17 2 -1.
+ <_>
+ 33 2 17 1 2.
+ 0
+ <_>
+
+ <_>
+ 33 2 1 3 -1.
+ <_>
+ 33 3 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 33 2 3 2 -1.
+ <_>
+ 34 3 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 33 2 13 9 -1.
+ <_>
+ 33 5 13 3 3.
+ 0
+ <_>
+
+ <_>
+ 33 5 3 3 -1.
+ <_>
+ 34 6 1 1 9.
+ 0
+ <_>
+
+ <_>
+ 33 5 1 8 -1.
+ <_>
+ 33 7 1 4 2.
+ 0
+ <_>
+
+ <_>
+ 33 6 3 1 -1.
+ <_>
+ 34 7 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 33 7 3 1 -1.
+ <_>
+ 34 8 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 33 7 4 4 -1.
+ <_>
+ 33 7 2 2 2.
+ <_>
+ 35 9 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 33 8 2 3 -1.
+ <_>
+ 32 9 2 1 3.
+ 1
+ <_>
+
+ <_>
+ 33 8 6 3 -1.
+ <_>
+ 35 8 2 3 3.
+ 0
+ <_>
+
+ <_>
+ 33 8 16 4 -1.
+ <_>
+ 33 10 16 2 2.
+ 0
+ <_>
+
+ <_>
+ 33 9 2 4 -1.
+ <_>
+ 33 11 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 33 9 4 4 -1.
+ <_>
+ 33 9 2 2 2.
+ <_>
+ 35 11 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 33 10 1 2 -1.
+ <_>
+ 33 11 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 34 0 1 3 -1.
+ <_>
+ 33 1 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 34 0 3 11 -1.
+ <_>
+ 35 0 1 11 3.
+ 0
+ <_>
+
+ <_>
+ 34 0 4 4 -1.
+ <_>
+ 34 0 2 4 2.
+ 1
+ <_>
+
+ <_>
+ 34 0 16 1 -1.
+ <_>
+ 38 0 8 1 2.
+ 0
+ <_>
+
+ <_>
+ 34 0 14 1 -1.
+ <_>
+ 41 0 7 1 2.
+ 0
+ <_>
+
+ <_>
+ 34 1 15 6 -1.
+ <_>
+ 39 1 5 6 3.
+ 0
+ <_>
+
+ <_>
+ 34 2 3 2 -1.
+ <_>
+ 35 3 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 34 2 3 8 -1.
+ <_>
+ 35 2 1 8 3.
+ 0
+ <_>
+
+ <_>
+ 34 3 4 4 -1.
+ <_>
+ 35 3 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 34 3 4 7 -1.
+ <_>
+ 35 3 2 7 2.
+ 0
+ <_>
+
+ <_>
+ 34 5 3 2 -1.
+ <_>
+ 35 6 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 34 5 4 2 -1.
+ <_>
+ 35 6 2 2 2.
+ 1
+ <_>
+
+ <_>
+ 34 5 3 4 -1.
+ <_>
+ 35 5 1 4 3.
+ 0
+ <_>
+
+ <_>
+ 34 5 6 8 -1.
+ <_>
+ 36 5 2 8 3.
+ 0
+ <_>
+
+ <_>
+ 34 6 3 1 -1.
+ <_>
+ 35 7 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 34 6 3 2 -1.
+ <_>
+ 35 7 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 34 6 6 5 -1.
+ <_>
+ 36 6 2 5 3.
+ 0
+ <_>
+
+ <_>
+ 34 7 4 2 -1.
+ <_>
+ 35 7 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 34 7 3 2 -1.
+ <_>
+ 35 8 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 34 7 4 3 -1.
+ <_>
+ 35 7 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 35 0 3 12 -1.
+ <_>
+ 36 0 1 12 3.
+ 0
+ <_>
+
+ <_>
+ 35 0 4 1 -1.
+ <_>
+ 37 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 35 0 12 1 -1.
+ <_>
+ 41 0 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 35 0 14 4 -1.
+ <_>
+ 35 0 7 2 2.
+ <_>
+ 42 2 7 2 2.
+ 0
+ <_>
+
+ <_>
+ 35 1 4 12 -1.
+ <_>
+ 36 1 2 12 2.
+ 0
+ <_>
+
+ <_>
+ 35 2 3 4 -1.
+ <_>
+ 36 3 1 4 3.
+ 1
+ <_>
+
+ <_>
+ 35 2 4 6 -1.
+ <_>
+ 36 2 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 35 4 3 3 -1.
+ <_>
+ 35 5 3 1 3.
+ 0
+ <_>
+
+ <_>
+ 35 5 2 4 -1.
+ <_>
+ 36 5 1 4 2.
+ 0
+ <_>
+
+ <_>
+ 35 5 4 7 -1.
+ <_>
+ 36 5 2 7 2.
+ 0
+ <_>
+
+ <_>
+ 35 5 15 5 -1.
+ <_>
+ 40 5 5 5 3.
+ 0
+ <_>
+
+ <_>
+ 35 7 3 1 -1.
+ <_>
+ 36 8 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 35 7 3 2 -1.
+ <_>
+ 36 8 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 35 8 2 2 -1.
+ <_>
+ 35 8 1 2 2.
+ 1
+ <_>
+
+ <_>
+ 35 10 15 3 -1.
+ <_>
+ 35 11 15 1 3.
+ 0
+ <_>
+
+ <_>
+ 35 11 5 2 -1.
+ <_>
+ 35 12 5 1 2.
+ 0
+ <_>
+
+ <_>
+ 35 11 6 2 -1.
+ <_>
+ 35 12 6 1 2.
+ 0
+ <_>
+
+ <_>
+ 36 0 14 1 -1.
+ <_>
+ 43 0 7 1 2.
+ 0
+ <_>
+
+ <_>
+ 36 1 4 2 -1.
+ <_>
+ 36 1 2 1 2.
+ <_>
+ 38 2 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 36 2 4 10 -1.
+ <_>
+ 37 2 2 10 2.
+ 0
+ <_>
+
+ <_>
+ 36 4 4 6 -1.
+ <_>
+ 37 4 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 36 4 3 6 -1.
+ <_>
+ 36 4 3 3 2.
+ 1
+ <_>
+
+ <_>
+ 36 4 6 3 -1.
+ <_>
+ 35 5 6 1 3.
+ 1
+ <_>
+
+ <_>
+ 36 6 3 3 -1.
+ <_>
+ 37 7 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 36 9 4 2 -1.
+ <_>
+ 38 9 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 36 10 4 1 -1.
+ <_>
+ 37 10 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 36 10 6 3 -1.
+ <_>
+ 39 10 3 3 2.
+ 0
+ <_>
+
+ <_>
+ 37 0 2 3 -1.
+ <_>
+ 36 1 2 1 3.
+ 1
+ <_>
+
+ <_>
+ 37 0 4 4 -1.
+ <_>
+ 37 0 2 2 2.
+ <_>
+ 39 2 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 37 1 4 5 -1.
+ <_>
+ 38 2 2 5 2.
+ 1
+ <_>
+
+ <_>
+ 37 1 9 9 -1.
+ <_>
+ 37 4 9 3 3.
+ 0
+ <_>
+
+ <_>
+ 37 3 8 4 -1.
+ <_>
+ 37 5 8 2 2.
+ 0
+ <_>
+
+ <_>
+ 37 4 4 1 -1.
+ <_>
+ 38 4 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 37 4 4 4 -1.
+ <_>
+ 38 4 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 37 5 8 8 -1.
+ <_>
+ 39 5 4 8 2.
+ 0
+ <_>
+
+ <_>
+ 37 9 6 4 -1.
+ <_>
+ 37 9 3 2 2.
+ <_>
+ 40 11 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 37 10 4 2 -1.
+ <_>
+ 37 10 2 1 2.
+ <_>
+ 39 11 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 37 10 8 3 -1.
+ <_>
+ 39 10 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 37 10 5 3 -1.
+ <_>
+ 37 11 5 1 3.
+ 0
+ <_>
+
+ <_>
+ 38 0 4 1 -1.
+ <_>
+ 40 0 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 38 1 12 2 -1.
+ <_>
+ 38 2 12 1 2.
+ 0
+ <_>
+
+ <_>
+ 38 4 6 1 -1.
+ <_>
+ 40 4 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 38 6 6 6 -1.
+ <_>
+ 40 8 2 2 9.
+ 0
+ <_>
+
+ <_>
+ 38 9 6 1 -1.
+ <_>
+ 40 9 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 38 11 1 2 -1.
+ <_>
+ 38 12 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 39 0 2 4 -1.
+ <_>
+ 39 1 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 39 0 10 3 -1.
+ <_>
+ 39 1 10 1 3.
+ 0
+ <_>
+
+ <_>
+ 39 1 11 2 -1.
+ <_>
+ 39 2 11 1 2.
+ 0
+ <_>
+
+ <_>
+ 39 4 4 4 -1.
+ <_>
+ 40 4 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 39 6 3 6 -1.
+ <_>
+ 40 8 1 2 9.
+ 0
+ <_>
+
+ <_>
+ 39 7 4 3 -1.
+ <_>
+ 40 7 2 3 2.
+ 0
+ <_>
+
+ <_>
+ 39 8 4 2 -1.
+ <_>
+ 40 8 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 39 11 12 2 -1.
+ <_>
+ 45 11 6 2 2.
+ 0
+ <_>
+
+ <_>
+ 40 0 1 3 -1.
+ <_>
+ 40 1 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 40 0 3 3 -1.
+ <_>
+ 40 1 3 1 3.
+ 0
+ <_>
+
+ <_>
+ 40 0 5 2 -1.
+ <_>
+ 40 1 5 1 2.
+ 0
+ <_>
+
+ <_>
+ 40 0 8 3 -1.
+ <_>
+ 40 1 8 1 3.
+ 0
+ <_>
+
+ <_>
+ 40 5 4 2 -1.
+ <_>
+ 42 5 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 40 6 4 1 -1.
+ <_>
+ 41 7 2 1 2.
+ 1
+ <_>
+
+ <_>
+ 40 8 4 2 -1.
+ <_>
+ 41 8 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 40 10 9 2 -1.
+ <_>
+ 40 11 9 1 2.
+ 0
+ <_>
+
+ <_>
+ 41 0 6 12 -1.
+ <_>
+ 43 0 2 12 3.
+ 0
+ <_>
+
+ <_>
+ 41 0 4 2 -1.
+ <_>
+ 41 1 4 1 2.
+ 0
+ <_>
+
+ <_>
+ 41 1 3 4 -1.
+ <_>
+ 42 2 1 4 3.
+ 1
+ <_>
+
+ <_>
+ 41 1 6 9 -1.
+ <_>
+ 41 4 6 3 3.
+ 0
+ <_>
+
+ <_>
+ 41 5 4 5 -1.
+ <_>
+ 42 5 2 5 2.
+ 0
+ <_>
+
+ <_>
+ 41 5 4 6 -1.
+ <_>
+ 42 5 2 6 2.
+ 0
+ <_>
+
+ <_>
+ 41 6 3 2 -1.
+ <_>
+ 42 7 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 41 6 4 5 -1.
+ <_>
+ 42 6 2 5 2.
+ 0
+ <_>
+
+ <_>
+ 41 7 3 1 -1.
+ <_>
+ 42 8 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 41 7 2 3 -1.
+ <_>
+ 41 8 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 41 8 3 1 -1.
+ <_>
+ 42 8 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 41 8 3 2 -1.
+ <_>
+ 42 9 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 41 8 4 4 -1.
+ <_>
+ 41 8 2 2 2.
+ <_>
+ 43 10 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 41 10 1 2 -1.
+ <_>
+ 41 11 1 1 2.
+ 0
+ <_>
+
+ <_>
+ 42 7 3 2 -1.
+ <_>
+ 43 8 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 42 7 3 3 -1.
+ <_>
+ 43 8 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 42 8 2 2 -1.
+ <_>
+ 42 8 1 2 2.
+ 1
+ <_>
+
+ <_>
+ 42 9 2 4 -1.
+ <_>
+ 42 9 1 2 2.
+ <_>
+ 43 11 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 42 9 2 2 -1.
+ <_>
+ 42 9 1 2 2.
+ 1
+ <_>
+
+ <_>
+ 43 4 8 9 -1.
+ <_>
+ 47 4 4 9 2.
+ 0
+ <_>
+
+ <_>
+ 43 5 2 3 -1.
+ <_>
+ 43 6 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 43 5 4 4 -1.
+ <_>
+ 43 5 4 2 2.
+ 1
+ <_>
+
+ <_>
+ 43 5 8 8 -1.
+ <_>
+ 47 5 4 8 2.
+ 0
+ <_>
+
+ <_>
+ 43 7 3 3 -1.
+ <_>
+ 44 8 1 3 3.
+ 1
+ <_>
+
+ <_>
+ 43 9 8 2 -1.
+ <_>
+ 45 9 4 2 2.
+ 0
+ <_>
+
+ <_>
+ 43 10 8 3 -1.
+ <_>
+ 45 10 4 3 2.
+ 0
+ <_>
+
+ <_>
+ 43 12 3 1 -1.
+ <_>
+ 44 12 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 44 2 1 10 -1.
+ <_>
+ 44 7 1 5 2.
+ 0
+ <_>
+
+ <_>
+ 44 2 4 4 -1.
+ <_>
+ 44 2 2 2 2.
+ <_>
+ 46 4 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 44 2 5 6 -1.
+ <_>
+ 44 5 5 3 2.
+ 0
+ <_>
+
+ <_>
+ 44 4 6 2 -1.
+ <_>
+ 46 4 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 44 7 4 2 -1.
+ <_>
+ 45 7 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 44 7 4 4 -1.
+ <_>
+ 45 7 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 45 5 4 4 -1.
+ <_>
+ 46 5 2 4 2.
+ 0
+ <_>
+
+ <_>
+ 45 5 4 4 -1.
+ <_>
+ 45 5 2 2 2.
+ <_>
+ 47 7 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 45 6 6 3 -1.
+ <_>
+ 47 7 2 1 9.
+ 0
+ <_>
+
+ <_>
+ 45 8 6 1 -1.
+ <_>
+ 47 8 2 1 3.
+ 0
+ <_>
+
+ <_>
+ 46 0 1 3 -1.
+ <_>
+ 46 1 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 46 0 2 2 -1.
+ <_>
+ 46 1 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 46 0 2 4 -1.
+ <_>
+ 46 2 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 46 1 3 4 -1.
+ <_>
+ 46 2 3 2 2.
+ 0
+ <_>
+
+ <_>
+ 46 3 3 3 -1.
+ <_>
+ 47 4 1 1 9.
+ 0
+ <_>
+
+ <_>
+ 46 5 3 3 -1.
+ <_>
+ 47 6 1 1 9.
+ 0
+ <_>
+
+ <_>
+ 46 5 2 6 -1.
+ <_>
+ 46 7 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 46 6 3 6 -1.
+ <_>
+ 47 8 1 2 9.
+ 0
+ <_>
+
+ <_>
+ 47 0 2 2 -1.
+ <_>
+ 47 1 2 1 2.
+ 0
+ <_>
+
+ <_>
+ 47 1 1 4 -1.
+ <_>
+ 47 2 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 47 2 1 6 -1.
+ <_>
+ 47 4 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 47 4 1 6 -1.
+ <_>
+ 47 6 1 2 3.
+ 0
+ <_>
+
+ <_>
+ 47 4 4 2 -1.
+ <_>
+ 49 4 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 47 4 2 6 -1.
+ <_>
+ 47 6 2 2 3.
+ 0
+ <_>
+
+ <_>
+ 47 8 3 1 -1.
+ <_>
+ 48 9 1 1 3.
+ 1
+ <_>
+
+ <_>
+ 47 9 1 4 -1.
+ <_>
+ 47 11 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 47 9 2 4 -1.
+ <_>
+ 47 11 2 2 2.
+ 0
+ <_>
+
+ <_>
+ 48 0 3 6 -1.
+ <_>
+ 48 3 3 3 2.
+ 0
+ <_>
+
+ <_>
+ 48 1 3 2 -1.
+ <_>
+ 49 2 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 48 1 3 12 -1.
+ <_>
+ 49 1 1 12 3.
+ 0
+ <_>
+
+ <_>
+ 48 5 3 7 -1.
+ <_>
+ 49 5 1 7 3.
+ 0
+ <_>
+
+ <_>
+ 48 5 3 8 -1.
+ <_>
+ 49 5 1 8 3.
+ 0
+ <_>
+
+ <_>
+ 48 6 3 2 -1.
+ <_>
+ 49 7 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 48 8 3 2 -1.
+ <_>
+ 49 9 1 2 3.
+ 1
+ <_>
+
+ <_>
+ 49 0 2 2 -1.
+ <_>
+ 50 0 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 49 0 2 8 -1.
+ <_>
+ 50 0 1 8 2.
+ 0
+ <_>
+
+ <_>
+ 49 11 2 2 -1.
+ <_>
+ 50 11 1 2 2.
+ 0
+ <_>
+
+ <_>
+ 50 1 1 3 -1.
+ <_>
+ 50 2 1 1 3.
+ 0
+ <_>
+
+ <_>
+ 50 4 1 3 -1.
+ <_>
+ 50 5 1 1 3.
+ 0
+
diff --git a/Prj-iOS/lpr/lpr.xcodeproj/project.pbxproj b/Prj-iOS/lpr/lpr.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000000000000000000000000000000000..4af42aa03c3075b262d604c0eec692484e195bb6
--- /dev/null
+++ b/Prj-iOS/lpr/lpr.xcodeproj/project.pbxproj
@@ -0,0 +1,550 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 50;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 343B620D21997FC800D03830 /* SegmentationFreeRecognizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 343B620C21997FC700D03830 /* SegmentationFreeRecognizer.cpp */; };
+ 343B6210219980FE00D03830 /* SegmenationFree-Inception.caffemodel in Resources */ = {isa = PBXBuildFile; fileRef = 343B620E219980FD00D03830 /* SegmenationFree-Inception.caffemodel */; };
+ 343B6211219980FE00D03830 /* SegmenationFree-Inception.prototxt in Resources */ = {isa = PBXBuildFile; fileRef = 343B620F219980FE00D03830 /* SegmenationFree-Inception.prototxt */; };
+ 343B621521998AB200D03830 /* CameraViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 343B621421998AB200D03830 /* CameraViewController.mm */; };
+ 34ECFDD12182DD9300B162D4 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFDD02182DD9300B162D4 /* AppDelegate.m */; };
+ 34ECFDD92182DD9400B162D4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFDD82182DD9400B162D4 /* Assets.xcassets */; };
+ 34ECFDDC2182DD9400B162D4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFDDA2182DD9400B162D4 /* LaunchScreen.storyboard */; };
+ 34ECFDDF2182DD9400B162D4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFDDE2182DD9400B162D4 /* main.m */; };
+ 34ECFE152182DEF500B162D4 /* PlateSegmentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE0D2182DEF500B162D4 /* PlateSegmentation.cpp */; };
+ 34ECFE162182DEF500B162D4 /* PlateDetection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE0E2182DEF500B162D4 /* PlateDetection.cpp */; };
+ 34ECFE172182DEF500B162D4 /* Pipeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE0F2182DEF500B162D4 /* Pipeline.cpp */; };
+ 34ECFE182182DEF500B162D4 /* FastDeskew.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE102182DEF500B162D4 /* FastDeskew.cpp */; };
+ 34ECFE192182DEF500B162D4 /* Recognizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE112182DEF500B162D4 /* Recognizer.cpp */; };
+ 34ECFE1A2182DEF500B162D4 /* FineMapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE122182DEF500B162D4 /* FineMapping.cpp */; };
+ 34ECFE1B2182DEF500B162D4 /* CNNRecognizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE142182DEF500B162D4 /* CNNRecognizer.cpp */; };
+ 34ECFE242182DF2F00B162D4 /* HorizonalFinemapping.caffemodel in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFE1D2182DF2E00B162D4 /* HorizonalFinemapping.caffemodel */; };
+ 34ECFE252182DF2F00B162D4 /* CharacterRecognization.caffemodel in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFE1E2182DF2E00B162D4 /* CharacterRecognization.caffemodel */; };
+ 34ECFE262182DF2F00B162D4 /* cascade.xml in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFE1F2182DF2E00B162D4 /* cascade.xml */; };
+ 34ECFE272182DF2F00B162D4 /* Segmentation.prototxt in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFE202182DF2E00B162D4 /* Segmentation.prototxt */; };
+ 34ECFE282182DF2F00B162D4 /* HorizonalFinemapping.prototxt in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFE212182DF2E00B162D4 /* HorizonalFinemapping.prototxt */; };
+ 34ECFE292182DF2F00B162D4 /* Segmentation.caffemodel in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFE222182DF2E00B162D4 /* Segmentation.caffemodel */; };
+ 34ECFE2A2182DF2F00B162D4 /* CharacterRecognization.prototxt in Resources */ = {isa = PBXBuildFile; fileRef = 34ECFE232182DF2E00B162D4 /* CharacterRecognization.prototxt */; };
+ 34ECFE2D2182E10700B162D4 /* RootViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE2C2182E10700B162D4 /* RootViewController.mm */; };
+ 34ECFE352182E56900B162D4 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34ECFE342182E56900B162D4 /* AVFoundation.framework */; };
+ 34ECFE382182E5F100B162D4 /* Utility.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ECFE372182E5F100B162D4 /* Utility.mm */; };
+ 34ECFE3A2182FAB700B162D4 /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34ECFE392182FAB700B162D4 /* CoreImage.framework */; };
+ A396A338993421DC89845E63 /* libPods-lpr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A33861A99BC945120023AC25 /* libPods-lpr.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 343B620B21997FC100D03830 /* SegmentationFreeRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SegmentationFreeRecognizer.h; sourceTree = ""; };
+ 343B620C21997FC700D03830 /* SegmentationFreeRecognizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentationFreeRecognizer.cpp; sourceTree = ""; };
+ 343B620E219980FD00D03830 /* SegmenationFree-Inception.caffemodel */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SegmenationFree-Inception.caffemodel"; sourceTree = ""; };
+ 343B620F219980FE00D03830 /* SegmenationFree-Inception.prototxt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "SegmenationFree-Inception.prototxt"; sourceTree = ""; };
+ 343B621321998AB200D03830 /* CameraViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CameraViewController.h; path = lpr/CameraViewController.h; sourceTree = SOURCE_ROOT; };
+ 343B621421998AB200D03830 /* CameraViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CameraViewController.mm; path = lpr/CameraViewController.mm; sourceTree = SOURCE_ROOT; };
+ 34ECFDCC2182DD9300B162D4 /* lpr.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = lpr.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 34ECFDCF2182DD9300B162D4 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
+ 34ECFDD02182DD9300B162D4 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
+ 34ECFDD82182DD9400B162D4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 34ECFDDB2182DD9400B162D4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 34ECFDDD2182DD9400B162D4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 34ECFDDE2182DD9400B162D4 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
+ 34ECFE032182DEF500B162D4 /* PlateSegmentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlateSegmentation.h; sourceTree = ""; };
+ 34ECFE042182DEF500B162D4 /* Recognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Recognizer.h; sourceTree = ""; };
+ 34ECFE052182DEF500B162D4 /* PlateDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlateDetection.h; sourceTree = ""; };
+ 34ECFE062182DEF500B162D4 /* PlateInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlateInfo.h; sourceTree = ""; };
+ 34ECFE072182DEF500B162D4 /* FineMapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FineMapping.h; sourceTree = ""; };
+ 34ECFE082182DEF500B162D4 /* niBlackThreshold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = niBlackThreshold.h; sourceTree = ""; };
+ 34ECFE092182DEF500B162D4 /* FastDeskew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastDeskew.h; sourceTree = ""; };
+ 34ECFE0A2182DEF500B162D4 /* Pipeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pipeline.h; sourceTree = ""; };
+ 34ECFE0B2182DEF500B162D4 /* CNNRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNNRecognizer.h; sourceTree = ""; };
+ 34ECFE0D2182DEF500B162D4 /* PlateSegmentation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlateSegmentation.cpp; sourceTree = ""; };
+ 34ECFE0E2182DEF500B162D4 /* PlateDetection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlateDetection.cpp; sourceTree = ""; };
+ 34ECFE0F2182DEF500B162D4 /* Pipeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pipeline.cpp; sourceTree = ""; };
+ 34ECFE102182DEF500B162D4 /* FastDeskew.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FastDeskew.cpp; sourceTree = ""; };
+ 34ECFE112182DEF500B162D4 /* Recognizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Recognizer.cpp; sourceTree = ""; };
+ 34ECFE122182DEF500B162D4 /* FineMapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FineMapping.cpp; sourceTree = ""; };
+ 34ECFE132182DEF500B162D4 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; };
+ 34ECFE142182DEF500B162D4 /* CNNRecognizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNNRecognizer.cpp; sourceTree = ""; };
+ 34ECFE1D2182DF2E00B162D4 /* HorizonalFinemapping.caffemodel */ = {isa = PBXFileReference; lastKnownFileType = file; path = HorizonalFinemapping.caffemodel; sourceTree = ""; };
+ 34ECFE1E2182DF2E00B162D4 /* CharacterRecognization.caffemodel */ = {isa = PBXFileReference; lastKnownFileType = file; path = CharacterRecognization.caffemodel; sourceTree = ""; };
+ 34ECFE1F2182DF2E00B162D4 /* cascade.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cascade.xml; sourceTree = ""; };
+ 34ECFE202182DF2E00B162D4 /* Segmentation.prototxt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Segmentation.prototxt; sourceTree = ""; };
+ 34ECFE212182DF2E00B162D4 /* HorizonalFinemapping.prototxt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HorizonalFinemapping.prototxt; sourceTree = ""; };
+ 34ECFE222182DF2E00B162D4 /* Segmentation.caffemodel */ = {isa = PBXFileReference; lastKnownFileType = file; path = Segmentation.caffemodel; sourceTree = ""; };
+ 34ECFE232182DF2E00B162D4 /* CharacterRecognization.prototxt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CharacterRecognization.prototxt; sourceTree = ""; };
+ 34ECFE2B2182E10700B162D4 /* RootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = ""; };
+ 34ECFE2C2182E10700B162D4 /* RootViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RootViewController.mm; sourceTree = ""; };
+ 34ECFE342182E56900B162D4 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+ 34ECFE362182E5F100B162D4 /* Utility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Utility.h; sourceTree = ""; };
+ 34ECFE372182E5F100B162D4 /* Utility.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Utility.mm; sourceTree = ""; };
+ 34ECFE392182FAB700B162D4 /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; };
+ 66BAD4CEFABD6705C5100968 /* Pods-lpr.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-lpr.release.xcconfig"; path = "Pods/Target Support Files/Pods-lpr/Pods-lpr.release.xcconfig"; sourceTree = ""; };
+ A33861A99BC945120023AC25 /* libPods-lpr.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-lpr.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ E169020B9373AF28E9C472DD /* Pods-lpr.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-lpr.debug.xcconfig"; path = "Pods/Target Support Files/Pods-lpr/Pods-lpr.debug.xcconfig"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 34ECFDC92182DD9300B162D4 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 34ECFE3A2182FAB700B162D4 /* CoreImage.framework in Frameworks */,
+ 34ECFE352182E56900B162D4 /* AVFoundation.framework in Frameworks */,
+ A396A338993421DC89845E63 /* libPods-lpr.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 34ECFDC32182DD9300B162D4 = {
+ isa = PBXGroup;
+ children = (
+ 34ECFDCE2182DD9300B162D4 /* lpr */,
+ 34ECFE1C2182DF2E00B162D4 /* Resource */,
+ 34ECFDCD2182DD9300B162D4 /* Products */,
+ DE72138A4B42368326688C6A /* Pods */,
+ 97C4CF37B3E356C8641CE105 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 34ECFDCD2182DD9300B162D4 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 34ECFDCC2182DD9300B162D4 /* lpr.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 34ECFDCE2182DD9300B162D4 /* lpr */ = {
+ isa = PBXGroup;
+ children = (
+ 34ECFE012182DEF500B162D4 /* Source */,
+ 34ECFDCF2182DD9300B162D4 /* AppDelegate.h */,
+ 34ECFDD02182DD9300B162D4 /* AppDelegate.m */,
+ 34ECFDD82182DD9400B162D4 /* Assets.xcassets */,
+ 34ECFDDA2182DD9400B162D4 /* LaunchScreen.storyboard */,
+ 34ECFDDD2182DD9400B162D4 /* Info.plist */,
+ 34ECFDDE2182DD9400B162D4 /* main.m */,
+ 34ECFE2B2182E10700B162D4 /* RootViewController.h */,
+ 34ECFE2C2182E10700B162D4 /* RootViewController.mm */,
+ 343B621321998AB200D03830 /* CameraViewController.h */,
+ 343B621421998AB200D03830 /* CameraViewController.mm */,
+ 34ECFE362182E5F100B162D4 /* Utility.h */,
+ 34ECFE372182E5F100B162D4 /* Utility.mm */,
+ );
+ path = lpr;
+ sourceTree = "";
+ };
+ 34ECFE012182DEF500B162D4 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 34ECFE022182DEF500B162D4 /* include */,
+ 34ECFE0C2182DEF500B162D4 /* src */,
+ );
+ path = Source;
+ sourceTree = "";
+ };
+ 34ECFE022182DEF500B162D4 /* include */ = {
+ isa = PBXGroup;
+ children = (
+ 343B620B21997FC100D03830 /* SegmentationFreeRecognizer.h */,
+ 34ECFE032182DEF500B162D4 /* PlateSegmentation.h */,
+ 34ECFE042182DEF500B162D4 /* Recognizer.h */,
+ 34ECFE052182DEF500B162D4 /* PlateDetection.h */,
+ 34ECFE062182DEF500B162D4 /* PlateInfo.h */,
+ 34ECFE072182DEF500B162D4 /* FineMapping.h */,
+ 34ECFE082182DEF500B162D4 /* niBlackThreshold.h */,
+ 34ECFE092182DEF500B162D4 /* FastDeskew.h */,
+ 34ECFE0A2182DEF500B162D4 /* Pipeline.h */,
+ 34ECFE0B2182DEF500B162D4 /* CNNRecognizer.h */,
+ );
+ path = include;
+ sourceTree = "";
+ };
+ 34ECFE0C2182DEF500B162D4 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ 343B620C21997FC700D03830 /* SegmentationFreeRecognizer.cpp */,
+ 34ECFE0D2182DEF500B162D4 /* PlateSegmentation.cpp */,
+ 34ECFE0E2182DEF500B162D4 /* PlateDetection.cpp */,
+ 34ECFE0F2182DEF500B162D4 /* Pipeline.cpp */,
+ 34ECFE102182DEF500B162D4 /* FastDeskew.cpp */,
+ 34ECFE112182DEF500B162D4 /* Recognizer.cpp */,
+ 34ECFE122182DEF500B162D4 /* FineMapping.cpp */,
+ 34ECFE132182DEF500B162D4 /* util.h */,
+ 34ECFE142182DEF500B162D4 /* CNNRecognizer.cpp */,
+ );
+ path = src;
+ sourceTree = "";
+ };
+ 34ECFE1C2182DF2E00B162D4 /* Resource */ = {
+ isa = PBXGroup;
+ children = (
+ 343B620E219980FD00D03830 /* SegmenationFree-Inception.caffemodel */,
+ 343B620F219980FE00D03830 /* SegmenationFree-Inception.prototxt */,
+ 34ECFE1D2182DF2E00B162D4 /* HorizonalFinemapping.caffemodel */,
+ 34ECFE1E2182DF2E00B162D4 /* CharacterRecognization.caffemodel */,
+ 34ECFE1F2182DF2E00B162D4 /* cascade.xml */,
+ 34ECFE202182DF2E00B162D4 /* Segmentation.prototxt */,
+ 34ECFE212182DF2E00B162D4 /* HorizonalFinemapping.prototxt */,
+ 34ECFE222182DF2E00B162D4 /* Segmentation.caffemodel */,
+ 34ECFE232182DF2E00B162D4 /* CharacterRecognization.prototxt */,
+ );
+ path = Resource;
+ sourceTree = "";
+ };
+ 97C4CF37B3E356C8641CE105 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 34ECFE392182FAB700B162D4 /* CoreImage.framework */,
+ 34ECFE342182E56900B162D4 /* AVFoundation.framework */,
+ A33861A99BC945120023AC25 /* libPods-lpr.a */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ DE72138A4B42368326688C6A /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ E169020B9373AF28E9C472DD /* Pods-lpr.debug.xcconfig */,
+ 66BAD4CEFABD6705C5100968 /* Pods-lpr.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 34ECFDCB2182DD9300B162D4 /* lpr */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 34ECFDE22182DD9400B162D4 /* Build configuration list for PBXNativeTarget "lpr" */;
+ buildPhases = (
+ 12CCA15FA936D51F737FDEDF /* [CP] Check Pods Manifest.lock */,
+ 34ECFDC82182DD9300B162D4 /* Sources */,
+ 34ECFDC92182DD9300B162D4 /* Frameworks */,
+ 34ECFDCA2182DD9300B162D4 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = lpr;
+ productName = lpr;
+ productReference = 34ECFDCC2182DD9300B162D4 /* lpr.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 34ECFDC42182DD9300B162D4 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1000;
+ ORGANIZATIONNAME = lprSample;
+ TargetAttributes = {
+ 34ECFDCB2182DD9300B162D4 = {
+ CreatedOnToolsVersion = 10.0;
+ };
+ };
+ };
+ buildConfigurationList = 34ECFDC72182DD9300B162D4 /* Build configuration list for PBXProject "lpr" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 34ECFDC32182DD9300B162D4;
+ productRefGroup = 34ECFDCD2182DD9300B162D4 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 34ECFDCB2182DD9300B162D4 /* lpr */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 34ECFDCA2182DD9300B162D4 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 343B6210219980FE00D03830 /* SegmenationFree-Inception.caffemodel in Resources */,
+ 34ECFE2A2182DF2F00B162D4 /* CharacterRecognization.prototxt in Resources */,
+ 34ECFDDC2182DD9400B162D4 /* LaunchScreen.storyboard in Resources */,
+ 34ECFDD92182DD9400B162D4 /* Assets.xcassets in Resources */,
+ 34ECFE282182DF2F00B162D4 /* HorizonalFinemapping.prototxt in Resources */,
+ 34ECFE242182DF2F00B162D4 /* HorizonalFinemapping.caffemodel in Resources */,
+ 34ECFE272182DF2F00B162D4 /* Segmentation.prototxt in Resources */,
+ 34ECFE262182DF2F00B162D4 /* cascade.xml in Resources */,
+ 34ECFE292182DF2F00B162D4 /* Segmentation.caffemodel in Resources */,
+ 343B6211219980FE00D03830 /* SegmenationFree-Inception.prototxt in Resources */,
+ 34ECFE252182DF2F00B162D4 /* CharacterRecognization.caffemodel in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 12CCA15FA936D51F737FDEDF /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-lpr-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 34ECFDC82182DD9300B162D4 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 343B620D21997FC800D03830 /* SegmentationFreeRecognizer.cpp in Sources */,
+ 34ECFE1A2182DEF500B162D4 /* FineMapping.cpp in Sources */,
+ 34ECFE182182DEF500B162D4 /* FastDeskew.cpp in Sources */,
+ 34ECFE162182DEF500B162D4 /* PlateDetection.cpp in Sources */,
+ 34ECFDDF2182DD9400B162D4 /* main.m in Sources */,
+ 34ECFE382182E5F100B162D4 /* Utility.mm in Sources */,
+ 34ECFE2D2182E10700B162D4 /* RootViewController.mm in Sources */,
+ 34ECFE172182DEF500B162D4 /* Pipeline.cpp in Sources */,
+ 34ECFE152182DEF500B162D4 /* PlateSegmentation.cpp in Sources */,
+ 34ECFE1B2182DEF500B162D4 /* CNNRecognizer.cpp in Sources */,
+ 34ECFDD12182DD9300B162D4 /* AppDelegate.m in Sources */,
+ 343B621521998AB200D03830 /* CameraViewController.mm in Sources */,
+ 34ECFE192182DEF500B162D4 /* Recognizer.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 34ECFDDA2182DD9400B162D4 /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 34ECFDDB2182DD9400B162D4 /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 34ECFDE02182DD9400B162D4 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ "\"$(SRCROOT)/lpr/Source/incllude\"",
+ "\"$(SRCROOT)\"",
+ );
+ IPHONEOS_DEPLOYMENT_TARGET = 10.1;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 34ECFDE12182DD9400B162D4 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ "\"$(SRCROOT)/lpr/Source/incllude\"",
+ "\"$(SRCROOT)\"",
+ );
+ IPHONEOS_DEPLOYMENT_TARGET = 10.1;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 34ECFDE32182DD9400B162D4 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E169020B9373AF28E9C472DD /* Pods-lpr.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
+ CLANG_CXX_LIBRARY = "compiler-default";
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = YZGMTHK294;
+ ENABLE_BITCODE = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"${PODS_ROOT}/Headers/Public\"",
+ "\"${PODS_ROOT}/Headers/Public/OpenCV\"",
+ );
+ INFOPLIST_FILE = lpr/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.TongxingPay.IDCardRecognizeDemo;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 34ECFDE42182DD9400B162D4 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 66BAD4CEFABD6705C5100968 /* Pods-lpr.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
+ CLANG_CXX_LIBRARY = "compiler-default";
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = YZGMTHK294;
+ ENABLE_BITCODE = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"${PODS_ROOT}/Headers/Public\"",
+ "\"${PODS_ROOT}/Headers/Public/OpenCV\"",
+ );
+ INFOPLIST_FILE = lpr/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.TongxingPay.IDCardRecognizeDemo;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 34ECFDC72182DD9300B162D4 /* Build configuration list for PBXProject "lpr" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 34ECFDE02182DD9400B162D4 /* Debug */,
+ 34ECFDE12182DD9400B162D4 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 34ECFDE22182DD9400B162D4 /* Build configuration list for PBXNativeTarget "lpr" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 34ECFDE32182DD9400B162D4 /* Debug */,
+ 34ECFDE42182DD9400B162D4 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 34ECFDC42182DD9300B162D4 /* Project object */;
+}
diff --git a/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000000000000000000000000000000000..39e1b8bf09557ef182c6e56794077d36c4383861
--- /dev/null
+++ b/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000000000000000000000000000000000000..18d981003d68d0546c4804ac2ff47dd97c6e7921
--- /dev/null
+++ b/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/xcuserdata/tbao.xcuserdatad/UserInterfaceState.xcuserstate b/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/xcuserdata/tbao.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000000000000000000000000000000000000..7314580c111b806cd30b96f3a04592b0e00043db
Binary files /dev/null and b/Prj-iOS/lpr/lpr.xcodeproj/project.xcworkspace/xcuserdata/tbao.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/Prj-iOS/lpr/lpr.xcodeproj/xcuserdata/tbao.xcuserdatad/xcschemes/xcschememanagement.plist b/Prj-iOS/lpr/lpr.xcodeproj/xcuserdata/tbao.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000000000000000000000000000000000000..008c546f4f78c6fb7231807ddab7555211219fae
--- /dev/null
+++ b/Prj-iOS/lpr/lpr.xcodeproj/xcuserdata/tbao.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,19 @@
+
+
+
+
+ SchemeUserState
+
+ lpr.xcscheme
+
+ orderHint
+ 2
+
+ lpr.xcscheme_^#shared#^_
+
+ orderHint
+ 2
+
+
+
+
diff --git a/Prj-iOS/lpr/lpr.xcworkspace/contents.xcworkspacedata b/Prj-iOS/lpr/lpr.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000000000000000000000000000000000..d677399fb2daffdc02987ab6744243fd4c84c883
--- /dev/null
+++ b/Prj-iOS/lpr/lpr.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/Prj-iOS/lpr/lpr.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Prj-iOS/lpr/lpr.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000000000000000000000000000000000000..18d981003d68d0546c4804ac2ff47dd97c6e7921
--- /dev/null
+++ b/Prj-iOS/lpr/lpr.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/Prj-iOS/lpr/lpr.xcworkspace/xcuserdata/tbao.xcuserdatad/UserInterfaceState.xcuserstate b/Prj-iOS/lpr/lpr.xcworkspace/xcuserdata/tbao.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000000000000000000000000000000000000..a999c2ce98f1c5a3f5037e074d9a3c3e82c4be70
Binary files /dev/null and b/Prj-iOS/lpr/lpr.xcworkspace/xcuserdata/tbao.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/Prj-iOS/lpr/lpr.xcworkspace/xcuserdata/tbao.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Prj-iOS/lpr/lpr.xcworkspace/xcuserdata/tbao.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
new file mode 100644
index 0000000000000000000000000000000000000000..37996a66351df15691dc08d1b9d22f29b4b264d5
--- /dev/null
+++ b/Prj-iOS/lpr/lpr.xcworkspace/xcuserdata/tbao.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Prj-iOS/lpr/lpr/AppDelegate.h b/Prj-iOS/lpr/lpr/AppDelegate.h
new file mode 100644
index 0000000000000000000000000000000000000000..8ef26f530bca32793481d6afee4bf0fb36f5dbce
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/AppDelegate.h
@@ -0,0 +1,17 @@
+//
+// AppDelegate.h
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+
+#import
+
+@interface AppDelegate : UIResponder
+
+@property (strong, nonatomic) UIWindow *window;
+
+
+@end
+
diff --git a/Prj-iOS/lpr/lpr/AppDelegate.m b/Prj-iOS/lpr/lpr/AppDelegate.m
new file mode 100644
index 0000000000000000000000000000000000000000..e022066de214a7dab1dc4dc259fd0db859c7d256
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/AppDelegate.m
@@ -0,0 +1,55 @@
+//
+// AppDelegate.m
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+
+#import "AppDelegate.h"
+#import "RootViewController.h"
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ // Override point for customization after application launch.
+ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[RootViewController new]];
+ [self.window makeKeyAndVisible];
+ return YES;
+}
+
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+ // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+ // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
+}
+
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+ // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+ // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+ // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
+}
+
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+ // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+ // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+
+@end
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/AppIcon.appiconset/Contents.json b/Prj-iOS/lpr/lpr/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..d8db8d65fd79fd541b2b7eba75c7378af3448f9c
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,98 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "83.5x83.5",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "size" : "1024x1024",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/Contents.json b/Prj-iOS/lpr/lpr/Assets.xcassets/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..da4a164c918651cdd1e11dca5cc62c333f097601
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/Contents.json b/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca20de8dee8eb2fcda9f0510c6fb8d52b8a03f8
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "back_camera_btn@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "back_camera_btn@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/back_camera_btn@2x.png b/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/back_camera_btn@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..41e73877e61a53fc468674afe926af186bdd1e90
Binary files /dev/null and b/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/back_camera_btn@2x.png differ
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/back_camera_btn@3x.png b/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/back_camera_btn@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..be4379d4eb8a5251e9f44272faf6607c56357046
Binary files /dev/null and b/Prj-iOS/lpr/lpr/Assets.xcassets/back_camera_btn.imageset/back_camera_btn@3x.png differ
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/Contents.json b/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..fc0efcfe3bd03fdfb982050d16e7be31621c56fd
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "flash_camera_btn@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "flash_camera_btn@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/flash_camera_btn@2x.png b/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/flash_camera_btn@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..91027cd9116bd6356b4341458ee9bee515c07e91
Binary files /dev/null and b/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/flash_camera_btn@2x.png differ
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/flash_camera_btn@3x.png b/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/flash_camera_btn@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..e751b601235983f77e3c19bb43dc687a14f25a38
Binary files /dev/null and b/Prj-iOS/lpr/lpr/Assets.xcassets/flash_camera_btn.imageset/flash_camera_btn@3x.png differ
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/Contents.json b/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..7f06e8f99d9d3559c37c7751e73e593f2a61a1d5
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "locker_btn_def@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "locker_btn_def@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/locker_btn_def@2x.png b/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/locker_btn_def@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..daeadf01a46097c690421bd32a34d64d4fd18169
Binary files /dev/null and b/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/locker_btn_def@2x.png differ
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/locker_btn_def@3x.png b/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/locker_btn_def@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e05dae12c950feffb381d57e3212233b592a518
Binary files /dev/null and b/Prj-iOS/lpr/lpr/Assets.xcassets/locker_btn_def.imageset/locker_btn_def@3x.png differ
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/Contents.json b/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..5fccab200036e237ce91afd6f22ed604f17d9d73
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "take_pic_btn@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "take_pic_btn@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/take_pic_btn@2x.png b/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/take_pic_btn@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb47d207bb8b5e7d47e78d268bfd9b7987a8cc21
Binary files /dev/null and b/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/take_pic_btn@2x.png differ
diff --git a/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/take_pic_btn@3x.png b/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/take_pic_btn@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..db0393bbbf99604d999509c03d2b806b1e574024
Binary files /dev/null and b/Prj-iOS/lpr/lpr/Assets.xcassets/take_pic_btn.imageset/take_pic_btn@3x.png differ
diff --git a/Prj-iOS/lpr/lpr/Base.lproj/LaunchScreen.storyboard b/Prj-iOS/lpr/lpr/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000000000000000000000000000000000000..bfa36129419f8bd7ad73581cb9f07b8c6eec3fcf
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Prj-iOS/lpr/lpr/CameraViewController.h b/Prj-iOS/lpr/lpr/CameraViewController.h
new file mode 100644
index 0000000000000000000000000000000000000000..8331b68c7ac623b41b9a879eaf0ab998db48cb47
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/CameraViewController.h
@@ -0,0 +1,32 @@
+//
+// CameraViewController.h
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+
+#ifdef __cplusplus
+#import
+#import
+#endif
+
+#ifdef __OBJC__
+#import
+#import
+#import
+#import
+#import
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^ResultCallBack)(NSString *reuslt, UIImage *image);
+
+@interface CameraViewController : UIViewController
+
+@property(nonatomic, copy) ResultCallBack resultCB;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Prj-iOS/lpr/lpr/CameraViewController.mm b/Prj-iOS/lpr/lpr/CameraViewController.mm
new file mode 100644
index 0000000000000000000000000000000000000000..ec285bfdfc60b0bd0c02e023b9dc2fc7ed8fad61
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/CameraViewController.mm
@@ -0,0 +1,517 @@
+//
+// CameraViewController.m
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+
+#import "CameraViewController.h"
+#import "Utility.h"
+#import "Pipeline.h"
+
+//屏幕的宽、高
+#define kScreenWidth [UIScreen mainScreen].bounds.size.width
+#define kScreenHeight [UIScreen mainScreen].bounds.size.height
+
+@interface CameraViewController ()
+{
+ AVCaptureSession *_session;
+ AVCaptureDeviceInput *_captureInput;
+ AVCaptureStillImageOutput *_captureOutput;
+ AVCaptureVideoPreviewLayer *_preview;
+ AVCaptureDevice *_device;
+
+ NSTimer *_timer; //定时器
+ BOOL _on; //闪光灯状态
+ BOOL _capture;//导航栏动画是否完成
+ BOOL _isFoucePixel;//是否相位对焦
+ CGRect _imgRect;//拍照裁剪
+ int _count;//每几帧识别
+ CGFloat _isLensChanged;//镜头位置
+
+ /*相位聚焦下镜头位置 镜头晃动 值不停的改变 */
+ CGFloat _isIOS8AndFoucePixelLensPosition;
+
+ /*
+ 控制识别速度,最小值为1!数值越大识别越慢。
+ 相机初始化时,设置默认值为1(不要改动),判断设备若为相位对焦时,设置此值为2(可以修改,最小为1,越大越慢)
+ 此值的功能是为了减小相位对焦下,因识别速度过快
+ 此值在相机初始化中设置,在相机代理中使用,用户若无特殊需求不用修改。
+ */
+ int _MaxFR;
+
+ cv::Mat source_image;
+}
+
+@property (assign, nonatomic) BOOL adjustingFocus;
+@property (nonatomic, retain) CALayer *customLayer;
+@property (nonatomic,assign) BOOL isProcessingImage;
+
+@property (nonatomic, strong) UIImage* image;
+
+@end
+
+@implementation CameraViewController
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ // Do any additional setup after loading the view.
+ self.view.backgroundColor = [UIColor clearColor];
+
+ //初始化相机
+ [self initialize];
+
+ //创建相机界面控件
+ [self createCameraView];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+ [super viewWillAppear:animated];
+
+ _capture = NO;
+ [self performSelector:@selector(changeCapture) withObject:nil afterDelay:0.4];
+ //不支持相位对焦情况下(iPhone6以后的手机支持相位对焦) 设置定时器 开启连续对焦
+ if (!_isFoucePixel) {
+ _timer = [NSTimer scheduledTimerWithTimeInterval:1.3 target:self selector:@selector(fouceMode) userInfo:nil repeats:YES];
+ }
+
+ AVCaptureDevice*camDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+ int flags = NSKeyValueObservingOptionNew;
+ //注册通知
+ [camDevice addObserver:self forKeyPath:@"adjustingFocus" options:flags context:nil];
+ if (_isFoucePixel) {
+ [camDevice addObserver:self forKeyPath:@"lensPosition" options:flags context:nil];
+ }
+ [_session startRunning];
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+ [super viewWillDisappear:animated];
+ self.navigationController.navigationBarHidden = NO;
+}
+
+- (void)viewDidDisappear:(BOOL)animated {
+ [super viewDidDisappear:animated];
+
+ if (!_isFoucePixel) {
+ [_timer invalidate];
+ _timer = nil;
+ }
+ AVCaptureDevice*camDevice =[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+ [camDevice removeObserver:self forKeyPath:@"adjustingFocus"];
+ if (_isFoucePixel) {
+ [camDevice removeObserver:self forKeyPath:@"lensPosition"];
+ }
+ [_session stopRunning];
+
+ _capture = NO;
+}
+
+- (void)changeCapture {
+ _capture = YES;
+}
+
+#pragma mark - Private Methods
+//初始化相机
+- (void)initialize {
+ //判断摄像头授权
+ AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
+ if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
+ self.view.backgroundColor = [UIColor blackColor];
+// UIAlertView * alt = [[UIAlertView alloc] initWithTitle:@"未获得授权使用摄像头" message:@"请在'设置-隐私-相机'打开" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
+// [alt show];
+ UIAlertController * alert = [UIAlertController
+ alertControllerWithTitle:@"未获得授权使用摄像头"
+ message:@"请在'设置-隐私-相机'打开"
+ preferredStyle:UIAlertControllerStyleAlert];
+
+
+ __weak typeof(self) weakSelf = self;
+ UIAlertAction* yesButton = [UIAlertAction
+ actionWithTitle:@"OK"
+ style:UIAlertActionStyleDefault
+ handler:^(UIAlertAction * action) {
+ //Handle your yes please button action here
+ [weakSelf.navigationController popViewControllerAnimated:YES];
+ }];
+
+
+ [alert addAction:yesButton];
+ [self presentViewController:alert animated:YES completion:nil];
+ return;
+ }
+
+ _MaxFR = 1;
+ //1.创建会话层
+ _session = [[AVCaptureSession alloc] init];
+ [_session setSessionPreset:AVCaptureSessionPreset1920x1080];
+
+ //2.创建、配置输入设备
+ NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
+ for (AVCaptureDevice *device in devices){
+ if (device.position == AVCaptureDevicePositionBack){
+ _device = device;
+ _captureInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
+ }
+ }
+ [_session addInput:_captureInput];
+
+ //2.创建视频流输出
+ AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init];
+ captureOutput.alwaysDiscardsLateVideoFrames = YES;
+ dispatch_queue_t queue;
+ queue = dispatch_queue_create("cameraQueue", NULL);
+ [captureOutput setSampleBufferDelegate:self queue:queue];
+ NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
+ NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];
+ NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];
+ [captureOutput setVideoSettings:videoSettings];
+ [_session addOutput:captureOutput];
+
+ //3.创建、配置静态拍照输出
+ _captureOutput = [[AVCaptureStillImageOutput alloc] init];
+ NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey,nil];
+ [_captureOutput setOutputSettings:outputSettings];
+ [_session addOutput:_captureOutput];
+
+ //4.预览图层
+ _preview = [AVCaptureVideoPreviewLayer layerWithSession: _session];
+ _preview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
+ _preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
+ [self.view.layer addSublayer:_preview];
+
+ //判断是否相位对焦
+ if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
+ AVCaptureDeviceFormat *deviceFormat = _device.activeFormat;
+ if (deviceFormat.autoFocusSystem == AVCaptureAutoFocusSystemPhaseDetection){
+ _isFoucePixel = YES;
+ _MaxFR = 2;
+ }
+ }
+}
+
+- (void)createCameraView
+{
+ //设置覆盖层
+ CAShapeLayer *maskWithHole = [CAShapeLayer layer];
+ // Both frames are defined in the same coordinate system
+ CGRect biggerRect = self.view.bounds;
+ CGFloat offset = 1.0f;
+ if ([[UIScreen mainScreen] scale] >= 2) {
+ offset = 0.5;
+ }
+ CGRect smallFrame = CGRectMake(45, 100, 300, 500);
+ CGRect smallerRect = CGRectInset(smallFrame, -offset, -offset) ;
+ UIBezierPath *maskPath = [UIBezierPath bezierPath];
+ [maskPath moveToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMinY(biggerRect))];
+ [maskPath addLineToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMaxY(biggerRect))];
+ [maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(biggerRect), CGRectGetMaxY(biggerRect))];
+ [maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(biggerRect), CGRectGetMinY(biggerRect))];
+ [maskPath addLineToPoint:CGPointMake(CGRectGetMinX(biggerRect), CGRectGetMinY(biggerRect))];
+ [maskPath moveToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMinY(smallerRect))];
+ [maskPath addLineToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMaxY(smallerRect))];
+ [maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(smallerRect), CGRectGetMaxY(smallerRect))];
+ [maskPath addLineToPoint:CGPointMake(CGRectGetMaxX(smallerRect), CGRectGetMinY(smallerRect))];
+ [maskPath addLineToPoint:CGPointMake(CGRectGetMinX(smallerRect), CGRectGetMinY(smallerRect))];
+ [maskWithHole setPath:[maskPath CGPath]];
+ [maskWithHole setFillRule:kCAFillRuleEvenOdd];
+ [maskWithHole setFillColor:[[UIColor colorWithWhite:0 alpha:0.35] CGColor]];
+ [self.view.layer addSublayer:maskWithHole];
+ [self.view.layer setMasksToBounds:YES];
+
+ /* 相机按钮 适配了iPhone和ipad 不同需求自行修改界面*/
+ //返回、闪光灯按钮
+ CGFloat backWidth = 35;
+ if (kScreenHeight>=1024) {
+ backWidth = 50;
+ }
+ CGFloat s = 80;
+ CGFloat s1 = 0;
+ if (kScreenHeight==480) {
+ s = 60;
+ s1 = 10;
+ }
+ UIButton *backBtn = [[UIButton alloc]initWithFrame:CGRectMake(kScreenWidth/16,kScreenWidth/16-s1, backWidth, backWidth)];
+ [backBtn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
+ [backBtn setImage:[UIImage imageNamed:@"back_camera_btn"] forState:UIControlStateNormal];
+ backBtn.titleLabel.textAlignment = NSTextAlignmentLeft;
+ [self.view addSubview:backBtn];
+
+ UIButton *flashBtn = [[UIButton alloc]initWithFrame:CGRectMake(kScreenWidth-kScreenWidth/16-backWidth,kScreenWidth/16-s1, backWidth, backWidth)];
+ [flashBtn setImage:[UIImage imageNamed:@"flash_camera_btn"] forState:UIControlStateNormal];
+ [flashBtn addTarget:self action:@selector(modeBtn) forControlEvents:UIControlEventTouchUpInside];
+ [self.view addSubview:flashBtn];
+
+ //拍照视图 上拉按钮 拍照按钮
+ UIButton *upBtn = [[UIButton alloc]initWithFrame:CGRectMake(kScreenWidth/2-60, kScreenHeight-20, 120, 20)];
+ upBtn.tag = 1001;
+ [upBtn addTarget:self action:@selector(upBtn:) forControlEvents:UIControlEventTouchUpInside];
+ [upBtn setImage:[UIImage imageNamed:@"locker_btn_def"] forState:UIControlStateNormal];
+ [self.view addSubview:upBtn];
+
+ UIButton *photoBtn = [[UIButton alloc]initWithFrame:CGRectMake(kScreenWidth/2-30,kScreenHeight-s,60, 60)];
+ photoBtn.tag = 1000;
+ photoBtn.hidden = YES;
+ [photoBtn setImage:[UIImage imageNamed:@"take_pic_btn"] forState:UIControlStateNormal];
+ [photoBtn addTarget:self action:@selector(photoBtn) forControlEvents:UIControlEventTouchUpInside];
+ [photoBtn setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];
+ [self.view addSubview:photoBtn];
+ [self.view bringSubviewToFront:photoBtn];
+}
+
+//隐藏状态栏
+- (UIStatusBarStyle)preferredStatusBarStyle{
+ return UIStatusBarStyleDefault;
+}
+- (BOOL)prefersStatusBarHidden{
+ return YES;
+}
+
+//对焦
+- (void)fouceMode
+{
+ NSError *error;
+ AVCaptureDevice *device = [self cameraWithPosition:AVCaptureDevicePositionBack];
+ if ([device isFocusModeSupported:AVCaptureFocusModeAutoFocus])
+ {
+ if ([device lockForConfiguration:&error]) {
+ CGPoint cameraPoint = [_preview captureDevicePointOfInterestForPoint:self.view.center];
+ [device setFocusPointOfInterest:cameraPoint];
+ [device setFocusMode:AVCaptureFocusModeAutoFocus];
+ [device unlockForConfiguration];
+ } else {
+ //NSLog(@"Error: %@", error);
+ }
+ }
+}
+
+- (AVCaptureDevice *)cameraWithPosition:(AVCaptureDevicePosition)position
+{
+ NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
+ for (AVCaptureDevice *device in devices){
+ if (device.position == position){
+ return device;
+ }
+ }
+ return nil;
+}
+
+- (NSString *)getPath:(NSString*)fileName
+{
+ NSString *bundlePath = [NSBundle mainBundle].bundlePath;
+ NSString *path = [bundlePath stringByAppendingPathComponent:fileName];
+ return path;
+}
+
+- (NSString *)simpleRecognition:(cv::Mat&)src
+{
+ NSString *path_1 = [self getPath:@"cascade.xml"];
+ NSString *path_2 = [self getPath:@"HorizonalFinemapping.prototxt"];
+ NSString *path_3 = [self getPath:@"HorizonalFinemapping.caffemodel"];
+ NSString *path_4 = [self getPath:@"Segmentation.prototxt"];
+ NSString *path_5 = [self getPath:@"Segmentation.caffemodel"];
+ NSString *path_6 = [self getPath:@"CharacterRecognization.prototxt"];
+ NSString *path_7 = [self getPath:@"CharacterRecognization.caffemodel"];
+ NSString *path_8 = [self getPath:@"SegmenationFree-Inception.prototxt"];
+ NSString *path_9 = [self getPath:@"SegmenationFree-Inception.caffemodel"];
+
+ std::string *cpath_1 = new std::string([path_1 UTF8String]);
+ std::string *cpath_2 = new std::string([path_2 UTF8String]);
+ std::string *cpath_3 = new std::string([path_3 UTF8String]);
+ std::string *cpath_4 = new std::string([path_4 UTF8String]);
+ std::string *cpath_5 = new std::string([path_5 UTF8String]);
+ std::string *cpath_6 = new std::string([path_6 UTF8String]);
+ std::string *cpath_7 = new std::string([path_7 UTF8String]);
+ std::string *cpath_8 = new std::string([path_8 UTF8String]);
+ std::string *cpath_9 = new std::string([path_9 UTF8String]);
+
+
+ pr::PipelinePR pr2 = pr::PipelinePR(*cpath_1, *cpath_2, *cpath_3, *cpath_4, *cpath_5, *cpath_6, *cpath_7, *cpath_8, *cpath_9);
+
+ std::vector list_res = pr2.RunPiplineAsImage(src, pr::SEGMENTATION_FREE_METHOD);
+ std::string concat_results = "";
+ for(auto one:list_res) {
+ if(one.confidence>0.7) {
+ concat_results += one.getPlateName()+",";
+ }
+ }
+
+ NSString *str = [NSString stringWithCString:concat_results.c_str() encoding:NSUTF8StringEncoding];
+ if (str.length > 0) {
+ str = [str substringToIndex:str.length-1];
+ str = [NSString stringWithFormat:@"%@",str];
+ } else {
+ str = [NSString stringWithFormat:@"未识别成功"];
+ }
+ NSLog(@"===> 识别结果 = %@", str);
+
+ return str;
+}
+
+#pragma mark - Actions
+//返回按钮按钮点击事件
+- (void)backAction
+{
+ [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+//闪光灯按钮点击事件
+- (void)modeBtn
+{
+ if (![_device hasTorch]) {
+ //NSLog(@"no torch");
+ } else {
+ [_device lockForConfiguration:nil];
+ if (!_on) {
+ [_device setTorchMode: AVCaptureTorchModeOn];
+ _on = YES;
+ }else{
+ [_device setTorchMode: AVCaptureTorchModeOff];
+ _on = NO;
+ }
+ [_device unlockForConfiguration];
+ }
+}
+
+//上拉按钮点击事件
+- (void)upBtn:(UIButton *)upBtn
+{
+ UIButton *photoBtn = (UIButton *)[self.view viewWithTag:1000];
+ photoBtn.hidden = NO;
+ upBtn.hidden = YES;
+}
+
+//拍照按钮点击事件
+- (void)photoBtn
+{
+ self.isProcessingImage = YES;
+ //get connection
+ AVCaptureConnection *videoConnection = nil;
+ for (AVCaptureConnection *connection in _captureOutput.connections) {
+ for (AVCaptureInputPort *port in [connection inputPorts]) {
+ if ([[port mediaType] isEqual:AVMediaTypeVideo] ) {
+ videoConnection = connection;
+ break;
+ }
+ }
+ if (videoConnection) { break; }
+ }
+
+ //get UIImage
+ __weak typeof(self) weakSelf = self;
+ [_captureOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:
+ ^(CMSampleBufferRef imageSampleBuffer, NSError *error) {
+ if (imageSampleBuffer != NULL) {
+ //停止取景
+ [_session stopRunning];
+
+ NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
+ UIImage *tempImage = [[UIImage alloc] initWithData:imageData];
+
+ UIImage *temp_image = [Utility scaleAndRotateImageBackCamera:tempImage];
+ source_image = [Utility cvMatFromUIImage:temp_image];
+ NSString* text = [weakSelf simpleRecognition:source_image];
+
+ NSMutableDictionary* resultDict = [NSMutableDictionary new];
+ resultDict[@"image"] = temp_image;
+ resultDict[@"text"] = text;
+ [self performSelectorOnMainThread:@selector(readyToGetImage:) withObject:resultDict waitUntilDone:NO];
+ weakSelf.isProcessingImage = NO;
+ }
+ }];
+}
+
+//从摄像头缓冲区获取图像
+#pragma mark - AVCaptureSession delegate
+- (void)captureOutput:(AVCaptureOutput *)captureOutput
+didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
+ fromConnection:(AVCaptureConnection *)connection
+{
+ CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
+ CVPixelBufferLockBaseAddress(imageBuffer,0);
+ uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
+ size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
+ size_t width = CVPixelBufferGetWidth(imageBuffer);
+ size_t height = CVPixelBufferGetHeight(imageBuffer);
+
+ /*We unlock the image buffer*/
+ CVPixelBufferUnlockBaseAddress(imageBuffer,0);
+
+ /*Create a CGImageRef from the CVImageBufferRef*/
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+ CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
+ CGImageRef newImage = CGBitmapContextCreateImage(newContext);
+
+ /*We release some components*/
+ CGContextRelease(newContext);
+ CGColorSpaceRelease(colorSpace);
+
+ /*We display the result on the image view (We need to change the orientation of the image so that the video is displayed correctly)*/
+ self.image = [UIImage imageWithCGImage:newImage scale:1.0 orientation:UIImageOrientationUp];
+ /*We relase the CGImageRef*/
+ CGImageRelease(newImage);
+
+ //检边识别
+ if (_capture == YES) { //导航栏动画完成
+ if (self.isProcessingImage==NO) { //点击拍照后 不去识别
+ if (!self.adjustingFocus) { //反差对焦下 非正在对焦状态(相位对焦下self.adjustingFocus此值不会改变)
+ if (_isLensChanged == _isIOS8AndFoucePixelLensPosition) {
+ _count++;
+ if (_count >= _MaxFR) {
+
+ //识别
+ UIImage *temp_image = [Utility scaleAndRotateImageBackCamera:self.image];
+ source_image = [Utility cvMatFromUIImage:temp_image];
+ NSString* text = [self simpleRecognition:source_image];
+
+ if (text.length == 7) { //识别成功
+ _count = 0;
+ // 停止取景
+ [_session stopRunning];
+ //设置震动
+ AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
+
+ NSMutableDictionary* resultDict = [NSMutableDictionary new];
+ resultDict[@"image"] = temp_image;
+ resultDict[@"text"] = text;
+
+ [self performSelectorOnMainThread:@selector(readyToGetImage:) withObject:resultDict waitUntilDone:NO];
+ }
+ }
+ } else {
+ _isLensChanged = _isIOS8AndFoucePixelLensPosition;
+ _count = 0;
+ }
+ }
+ }
+ }
+ CVPixelBufferUnlockBaseAddress(imageBuffer,0);
+}
+
+//找边成功开始拍照
+- (void)readyToGetImage:(NSDictionary *)resultDict
+{
+ [self dismissViewControllerAnimated:NO completion:^{
+ }];
+
+ if (self.resultCB) {
+ self.resultCB(resultDict[@"text"], resultDict[@"image"]);
+ }
+}
+
+- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context {
+
+ /*反差对焦 监听反差对焦此*/
+ if([keyPath isEqualToString:@"adjustingFocus"]){
+ self.adjustingFocus =[[change objectForKey:NSKeyValueChangeNewKey] isEqualToNumber:[NSNumber numberWithInt:1]];
+ }
+ /*监听相位对焦此*/
+ if([keyPath isEqualToString:@"lensPosition"]){
+ _isIOS8AndFoucePixelLensPosition =[[change objectForKey:NSKeyValueChangeNewKey] floatValue];
+ //NSLog(@"监听_isIOS8AndFoucePixelLensPosition == %f",_isIOS8AndFoucePixelLensPosition);
+ }
+}
+
+
+@end
diff --git a/Prj-iOS/lpr/lpr/Info.plist b/Prj-iOS/lpr/lpr/Info.plist
new file mode 100644
index 0000000000000000000000000000000000000000..19d69a91d845955197286bccb9472919cf7ecc1f
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Info.plist
@@ -0,0 +1,45 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ NSCameraUsageDescription
+ 欢迎使用相机
+ NSPhotoLibraryUsageDescription
+ 欢迎使用相册
+ UILaunchStoryboardName
+ LaunchScreen
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/Prj-iOS/lpr/lpr/RootViewController.h b/Prj-iOS/lpr/lpr/RootViewController.h
new file mode 100644
index 0000000000000000000000000000000000000000..14da8d29d8ae3967f2d4f1a240f8f016f3d475ce
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/RootViewController.h
@@ -0,0 +1,26 @@
+//
+// RootViewController.h
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+
+#ifdef __cplusplus
+#import
+#import
+#endif
+
+#ifdef __OBJC__
+#import
+#import
+#import
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RootViewController : UIViewController
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Prj-iOS/lpr/lpr/RootViewController.mm b/Prj-iOS/lpr/lpr/RootViewController.mm
new file mode 100644
index 0000000000000000000000000000000000000000..df135843a3b881eb642d847847943f0432efbd86
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/RootViewController.mm
@@ -0,0 +1,201 @@
+//
+// RootViewController.m
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+
+#import "RootViewController.h"
+#import
+#import "CameraViewController.h"
+#import "Utility.h"
+#import "Pipeline.h"
+
+@interface RootViewController ()
+
+@property (nonatomic, strong) UIButton* albumButton;
+@property (nonatomic, strong) UIButton* cameraButton;
+@property (nonatomic, strong) UIImageView* imageView;
+@property (nonatomic, strong) UILabel* resultLabel;
+
+@end
+
+@implementation RootViewController
+{
+ cv::Mat source_image;
+}
+
+#pragma mark - Lazy Initialize
+- (UIButton *)albumButton
+{
+ if (!_albumButton) {
+ _albumButton = [UIButton buttonWithType:UIButtonTypeCustom];
+ [_albumButton setTitle:@"打开相册" forState:UIControlStateNormal];
+ [_albumButton setBackgroundColor:[UIColor redColor]];
+ [_albumButton addTarget:self action:@selector(openAlbum) forControlEvents:UIControlEventTouchUpInside];
+ }
+ return _albumButton;
+}
+
+- (UIButton *)cameraButton
+{
+ if (!_cameraButton) {
+ _cameraButton = [UIButton buttonWithType:UIButtonTypeCustom];
+ [_cameraButton setBackgroundColor:[UIColor redColor]];
+ [_cameraButton setTitle:@"实时拍照" forState:UIControlStateNormal];
+ [_cameraButton addTarget:self action:@selector(openCamera) forControlEvents:UIControlEventTouchUpInside];
+ }
+ return _cameraButton;
+}
+
+- (UIImageView *)imageView
+{
+ if (!_imageView) {
+ _imageView = [[UIImageView alloc] init];
+ _imageView.contentMode = UIViewContentModeScaleAspectFit;
+ }
+ return _imageView;
+}
+
+- (UILabel *)resultLabel
+{
+ if (!_resultLabel) {
+ _resultLabel = [UILabel new];
+ _resultLabel.textColor = [UIColor redColor];
+ _resultLabel.textAlignment = NSTextAlignmentLeft;
+ _resultLabel.font = [UIFont systemFontOfSize:15];
+ }
+ return _resultLabel;
+}
+
+#pragma mark - Life Cycle
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ // Do any additional setup after loading the view.
+ self.view.backgroundColor = [UIColor whiteColor];
+ self.navigationItem.title = @"车牌识别Demo";
+
+ [self.view addSubview:self.albumButton];
+ [self.albumButton mas_makeConstraints:^(MASConstraintMaker* make) {
+ make.centerX.equalTo(self.view).offset(-80);
+ make.bottom.equalTo(self.mas_bottomLayoutGuideTop).offset(-20);
+ make.width.mas_equalTo(100);
+ make.height.mas_equalTo(50);
+ }];
+
+ [self.view addSubview:self.cameraButton];
+ [self.cameraButton mas_makeConstraints:^(MASConstraintMaker* make) {
+ make.centerX.equalTo(self.view).offset(80);
+ make.bottom.equalTo(self.albumButton);
+ make.width.mas_equalTo(100);
+ make.height.mas_equalTo(50);
+ }];
+
+ [self.view addSubview:self.resultLabel];
+ [self.resultLabel mas_makeConstraints:^(MASConstraintMaker* make) {
+ make.left.right.equalTo(self.view);
+ make.bottom.lessThanOrEqualTo(self.albumButton.mas_top);
+ }];
+
+ [self.view addSubview:self.imageView];
+ [self.imageView mas_makeConstraints:^(MASConstraintMaker* make) {
+ make.top.left.right.equalTo(self.view);
+ make.bottom.lessThanOrEqualTo(self.resultLabel.mas_top);
+ }];
+}
+
+#pragma mark - Actions
+- (void)openAlbum
+{
+ UIImagePickerController* picker = [[UIImagePickerController alloc] init];
+ picker.delegate = self;
+
+ if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
+ return;
+
+ picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
+
+ [self presentViewController:picker animated:YES completion:nil];
+}
+
+- (void)openCamera
+{
+ CameraViewController* video = [CameraViewController new];
+ video.resultCB = ^(NSString* text, UIImage* image) {
+ self.imageView.image = image;
+ self.resultLabel.text = text;
+ };
+ [self presentViewController:video animated:YES completion:nil];
+}
+
+#pragma mark - Private Methods
+- (NSString *)getPathFromBundle:(NSString*)fileName
+{
+ NSString *bundlePath = [NSBundle mainBundle].bundlePath;
+ NSString *path = [bundlePath stringByAppendingPathComponent:fileName];
+ return path;
+}
+
+- (void)freeRecognition:(cv::Mat&)src
+{
+ NSString *path_1 = [self getPathFromBundle:@"cascade.xml"];
+ NSString *path_2 = [self getPathFromBundle:@"HorizonalFinemapping.prototxt"];
+ NSString *path_3 = [self getPathFromBundle:@"HorizonalFinemapping.caffemodel"];
+ NSString *path_4 = [self getPathFromBundle:@"Segmentation.prototxt"];
+ NSString *path_5 = [self getPathFromBundle:@"Segmentation.caffemodel"];
+ NSString *path_6 = [self getPathFromBundle:@"CharacterRecognization.prototxt"];
+ NSString *path_7 = [self getPathFromBundle:@"CharacterRecognization.caffemodel"];
+ NSString *path_8 = [self getPathFromBundle:@"SegmenationFree-Inception.prototxt"];
+ NSString *path_9 = [self getPathFromBundle:@"SegmenationFree-Inception.caffemodel"];
+
+ std::string *cpath_1 = new std::string([path_1 UTF8String]);
+ std::string *cpath_2 = new std::string([path_2 UTF8String]);
+ std::string *cpath_3 = new std::string([path_3 UTF8String]);
+ std::string *cpath_4 = new std::string([path_4 UTF8String]);
+ std::string *cpath_5 = new std::string([path_5 UTF8String]);
+ std::string *cpath_6 = new std::string([path_6 UTF8String]);
+ std::string *cpath_7 = new std::string([path_7 UTF8String]);
+ std::string *cpath_8 = new std::string([path_8 UTF8String]);
+ std::string *cpath_9 = new std::string([path_9 UTF8String]);
+
+
+ pr::PipelinePR pr2 = pr::PipelinePR(*cpath_1, *cpath_2, *cpath_3, *cpath_4, *cpath_5, *cpath_6, *cpath_7, *cpath_8, *cpath_9);
+
+ std::vector list_res = pr2.RunPiplineAsImage(src, pr::SEGMENTATION_FREE_METHOD);
+ std::string concat_results = "";
+ for(auto one:list_res) {
+ if(one.confidence>0.7) {
+ concat_results += one.getPlateName()+",";
+ }
+ }
+
+ NSString *str = [NSString stringWithCString:concat_results.c_str() encoding:NSUTF8StringEncoding];
+ if (str.length > 0) {
+ str = [str substringToIndex:str.length-1];
+ str = [NSString stringWithFormat:@"识别结果: %@",str];
+ } else {
+ str = [NSString stringWithFormat:@"识别结果: 未识别成功"];
+ }
+
+ [self.resultLabel setText:str];
+}
+
+#pragma mark - UIImagePickerControllerDelegate
+- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
+{
+ [picker dismissViewControllerAnimated:YES completion:nil];
+
+ UIImage* temp = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
+ UIImage *temp_image = [Utility scaleAndRotateImageBackCamera:temp];
+ source_image = [Utility cvMatFromUIImage:temp_image];
+ [self freeRecognition:source_image];
+ self.imageView.image = temp;
+}
+
+- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
+{
+ [picker dismissViewControllerAnimated:YES completion:nil];
+}
+
+@end
diff --git a/Prj-iOS/lpr/lpr/Source/include/CNNRecognizer.h b/Prj-iOS/lpr/lpr/Source/include/CNNRecognizer.h
new file mode 100644
index 0000000000000000000000000000000000000000..a57773378f58ee6f58a7c343bfef0cbc27189b53
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/CNNRecognizer.h
@@ -0,0 +1,24 @@
+//
+// Created by Jack Yu on 21/10/2017.
+//
+
+#ifndef SWIFTPR_CNNRECOGNIZER_H
+#define SWIFTPR_CNNRECOGNIZER_H
+
+#include "Recognizer.h"
+namespace pr{
+ class CNNRecognizer: public GeneralRecognizer{
+ public:
+ const int CHAR_INPUT_W = 14;
+ const int CHAR_INPUT_H = 30;
+
+ CNNRecognizer(std::string prototxt,std::string caffemodel);
+ label recognizeCharacter(cv::Mat character);
+ private:
+ cv::dnn::Net net;
+
+ };
+
+}
+
+#endif //SWIFTPR_CNNRECOGNIZER_H
diff --git a/Prj-iOS/lpr/lpr/Source/include/FastDeskew.h b/Prj-iOS/lpr/lpr/Source/include/FastDeskew.h
new file mode 100644
index 0000000000000000000000000000000000000000..456f08d8049cbc5537a74a221c017e744c95c3ed
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/FastDeskew.h
@@ -0,0 +1,18 @@
+//
+// Created by 庾金科 on 22/09/2017.
+//
+
+#ifndef SWIFTPR_FASTDESKEW_H
+#define SWIFTPR_FASTDESKEW_H
+
+#include
+#include
+namespace pr{
+
+ cv::Mat fastdeskew(cv::Mat skewImage,int blockSize);
+// cv::Mat spatialTransformer(cv::Mat skewImage);
+
+}//namepace pr
+
+
+#endif //SWIFTPR_FASTDESKEW_H
diff --git a/Prj-iOS/lpr/lpr/Source/include/FineMapping.h b/Prj-iOS/lpr/lpr/Source/include/FineMapping.h
new file mode 100644
index 0000000000000000000000000000000000000000..352202e029242a5d729a427cf07b38a9ef4bb84b
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/FineMapping.h
@@ -0,0 +1,32 @@
+//
+// Created by 庾金科 on 22/09/2017.
+//
+
+#ifndef SWIFTPR_FINEMAPPING_H
+#define SWIFTPR_FINEMAPPING_H
+
+#include
+#include
+
+#include
+namespace pr{
+ class FineMapping{
+ public:
+ FineMapping();
+
+
+ FineMapping(std::string prototxt,std::string caffemodel);
+ static cv::Mat FineMappingVertical(cv::Mat InputProposal,int sliceNum=15,int upper=0,int lower=-50,int windows_size=17);
+ cv::Mat FineMappingHorizon(cv::Mat FinedVertical,int leftPadding,int rightPadding);
+
+
+ private:
+ cv::dnn::Net net;
+
+ };
+
+
+
+
+}
+#endif //SWIFTPR_FINEMAPPING_H
diff --git a/Prj-iOS/lpr/lpr/Source/include/Pipeline.h b/Prj-iOS/lpr/lpr/Source/include/Pipeline.h
new file mode 100644
index 0000000000000000000000000000000000000000..144cc80fc7e9a5ad6ead4af46e6b39789e4cf846
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/Pipeline.h
@@ -0,0 +1,45 @@
+//
+// Created by 庾金科 on 22/10/2017.
+//
+
+#ifndef SWIFTPR_PIPLINE_H
+#define SWIFTPR_PIPLINE_H
+
+#include "PlateDetection.h"
+#include "PlateSegmentation.h"
+#include "CNNRecognizer.h"
+#include "PlateInfo.h"
+#include "FastDeskew.h"
+#include "FineMapping.h"
+#include "Recognizer.h"
+#include "SegmentationFreeRecognizer.h"
+
+namespace pr{
+
+// std::string str_code[]={"京", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "皖", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z","港","学","使","警","澳","挂","军","北","南","广","沈","兰","成","济","海","民","航","空"};
+// const std::vector CH_PLATE_CODE(str_code, str_code+83);
+
+ const int SEGMENTATION_FREE_METHOD = 0;
+ const int SEGMENTATION_BASED_METHOD = 1;
+
+ class PipelinePR {
+ public:
+ GeneralRecognizer *generalRecognizer;
+ PlateDetection *plateDetection;
+ PlateSegmentation *plateSegmentation;
+ FineMapping *fineMapping;
+ SegmentationFreeRecognizer *segmentationFreeRecognizer;
+
+ PipelinePR(std::string detector_filename,
+ std::string finemapping_prototxt,std::string finemapping_caffemodel,
+ std::string segmentation_prototxt,std::string segmentation_caffemodel,
+ std::string charRecognization_proto,std::string charRecognization_caffemodel,
+ std::string segmentationfree_proto,std::string segmentationfree_caffemodel
+ );
+ ~PipelinePR();
+
+ std::vector plateRes;
+ std::vector RunPiplineAsImage(cv::Mat plateImage,int method);
+ };
+}
+#endif //SWIFTPR_PIPLINE_H
diff --git a/Prj-iOS/lpr/lpr/Source/include/PlateDetection.h b/Prj-iOS/lpr/lpr/Source/include/PlateDetection.h
new file mode 100644
index 0000000000000000000000000000000000000000..f4cf567d031c899f1b71c3a350b0f539bb3ff7d6
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/PlateDetection.h
@@ -0,0 +1,33 @@
+//
+// Created by 庾金科 on 20/09/2017.
+//
+
+#ifndef SWIFTPR_PLATEDETECTION_H
+#define SWIFTPR_PLATEDETECTION_H
+
+#include
+#include "PlateInfo.h"
+#include
+namespace pr{
+ class PlateDetection{
+ public:
+ PlateDetection(std::string filename_cascade);
+ PlateDetection();
+ void LoadModel(std::string filename_cascade);
+ void plateDetectionRough(cv::Mat InputImage,std::vector &plateInfos,int min_w=36,int max_w=800);
+// std::vector plateDetectionRough(cv::Mat InputImage,int min_w= 60,int max_h = 400);
+
+
+// std::vector plateDetectionRoughByMultiScaleEdge(cv::Mat InputImage);
+
+
+
+ private:
+ cv::CascadeClassifier cascade;
+
+
+ };
+
+}// namespace pr
+
+#endif //SWIFTPR_PLATEDETECTION_H
diff --git a/Prj-iOS/lpr/lpr/Source/include/PlateInfo.h b/Prj-iOS/lpr/lpr/Source/include/PlateInfo.h
new file mode 100644
index 0000000000000000000000000000000000000000..f1ea716bd9f38d39de3e7beab82b590a0ac5ea05
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/PlateInfo.h
@@ -0,0 +1,126 @@
+//
+// Created by 庾金科 on 20/09/2017.
+//
+
+#ifndef SWIFTPR_PLATEINFO_H
+#define SWIFTPR_PLATEINFO_H
+#include
+namespace pr {
+
+ typedef std::vector Character;
+
+ enum PlateColor { BLUE, YELLOW, WHITE, GREEN, BLACK,UNKNOWN};
+ enum CharType {CHINESE,LETTER,LETTER_NUMS,INVALID};
+
+
+ class PlateInfo {
+ public:
+ std::vector > plateChars;
+ std::vector > plateCoding;
+ float confidence = 0;
+ PlateInfo(const cv::Mat &plateData, std::string plateName, cv::Rect plateRect, PlateColor plateType) {
+ licensePlate = plateData;
+ name = plateName;
+ ROI = plateRect;
+ Type = plateType;
+ }
+ PlateInfo(const cv::Mat &plateData, cv::Rect plateRect, PlateColor plateType) {
+ licensePlate = plateData;
+ ROI = plateRect;
+ Type = plateType;
+ }
+ PlateInfo(const cv::Mat &plateData, cv::Rect plateRect) {
+ licensePlate = plateData;
+ ROI = plateRect;
+ }
+ PlateInfo() {
+
+ }
+
+ cv::Mat getPlateImage() {
+ return licensePlate;
+ }
+
+ void setPlateImage(cv::Mat plateImage){
+ licensePlate = plateImage;
+ }
+
+ cv::Rect getPlateRect() {
+ return ROI;
+ }
+
+ void setPlateRect(cv::Rect plateRect) {
+ ROI = plateRect;
+ }
+ cv::String getPlateName() {
+ return name;
+
+ }
+ void setPlateName(cv::String plateName) {
+ name = plateName;
+ }
+ int getPlateType() {
+ return Type;
+ }
+
+ void appendPlateChar(const std::pair &plateChar)
+ {
+ plateChars.push_back(plateChar);
+ }
+
+ void appendPlateCoding(const std::pair &charProb){
+ plateCoding.push_back(charProb);
+ }
+
+ // cv::Mat getPlateChars(int id) {
+ // if(id mappingTable) {
+ std::string decode;
+ for(auto plate:plateCoding) {
+ float *prob = (float *)plate.second.data;
+ if(plate.first == CHINESE) {
+
+ decode += mappingTable[std::max_element(prob,prob+31) - prob];
+ confidence+=*std::max_element(prob,prob+31);
+
+
+// std::cout<<*std::max_element(prob,prob+31)<
+#include "PlateInfo.h"
+
+namespace pr{
+
+
+ class PlateSegmentation{
+ public:
+ const int PLATE_NORMAL = 6;
+ const int PLATE_NORMAL_GREEN = 7;
+ const int DEFAULT_WIDTH = 20;
+ PlateSegmentation(std::string phototxt,std::string caffemodel);
+ PlateSegmentation(){}
+ void segmentPlatePipline(PlateInfo &plateInfo,int stride,std::vector &Char_rects);
+
+ void segmentPlateBySlidingWindows(cv::Mat &plateImage,int windowsWidth,int stride,cv::Mat &respones);
+ void templateMatchFinding(const cv::Mat &respones,int windowsWidth,std::pair > &candidatePts);
+ void refineRegion(cv::Mat &plateImage,const std::vector &candidatePts,const int padding,std::vector &rects);
+ void ExtractRegions(PlateInfo &plateInfo,std::vector &rects);
+ cv::Mat classifyResponse(const cv::Mat &cropped);
+ private:
+ cv::dnn::Net net;
+
+
+// RefineRegion()
+
+ };
+
+}//namespace pr
+
+#endif //SWIFTPR_PLATESEGMENTATION_H
diff --git a/Prj-iOS/lpr/lpr/Source/include/Recognizer.h b/Prj-iOS/lpr/lpr/Source/include/Recognizer.h
new file mode 100644
index 0000000000000000000000000000000000000000..04a565f6bf8397ae5bde483237c04d24469bb692
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/Recognizer.h
@@ -0,0 +1,23 @@
+//
+// Created by 庾金科 on 20/10/2017.
+//
+
+
+#ifndef SWIFTPR_RECOGNIZER_H
+#define SWIFTPR_RECOGNIZER_H
+
+#include
+#include "PlateInfo.h"
+namespace pr{
+ typedef cv::Mat label;
+ class GeneralRecognizer{
+ public:
+ virtual label recognizeCharacter(cv::Mat character) = 0;
+// virtual cv::Mat SegmentationFreeForSinglePlate(cv::Mat plate) = 0;
+ void SegmentBasedSequenceRecognition(PlateInfo &plateinfo);
+ void SegmentationFreeSequenceRecognition(PlateInfo &plateInfo);
+
+ };
+
+}
+#endif //SWIFTPR_RECOGNIZER_H
diff --git a/Prj-iOS/lpr/lpr/Source/include/SegmentationFreeRecognizer.h b/Prj-iOS/lpr/lpr/Source/include/SegmentationFreeRecognizer.h
new file mode 100644
index 0000000000000000000000000000000000000000..583899e5b35e6858e00f57bd0e8a646e2ed2a9ca
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/SegmentationFreeRecognizer.h
@@ -0,0 +1,28 @@
+//
+// Created by 庾金科 on 28/11/2017.
+//
+
+#ifndef SWIFTPR_SEGMENTATIONFREERECOGNIZER_H
+#define SWIFTPR_SEGMENTATIONFREERECOGNIZER_H
+
+#include "Recognizer.h"
+namespace pr{
+
+
+ class SegmentationFreeRecognizer{
+ public:
+ const int CHAR_INPUT_W = 14;
+ const int CHAR_INPUT_H = 30;
+ const int CHAR_LEN = 84;
+
+ SegmentationFreeRecognizer(std::string prototxt,std::string caffemodel);
+ std::pair SegmentationFreeForSinglePlate(cv::Mat plate,std::vector mapping_table);
+
+
+ private:
+ cv::dnn::Net net;
+
+ };
+
+}
+#endif //SWIFTPR_SEGMENTATIONFREERECOGNIZER_H
diff --git a/Prj-iOS/lpr/lpr/Source/include/niBlackThreshold.h b/Prj-iOS/lpr/lpr/Source/include/niBlackThreshold.h
new file mode 100644
index 0000000000000000000000000000000000000000..5ad7e142295ee78a5c375c949a63742d8f37c4cd
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/include/niBlackThreshold.h
@@ -0,0 +1,107 @@
+//
+// Created by 庾金科 on 26/10/2017.
+//
+
+#ifndef SWIFTPR_NIBLACKTHRESHOLD_H
+#define SWIFTPR_NIBLACKTHRESHOLD_H
+
+
+#include
+using namespace cv;
+
+enum LocalBinarizationMethods{
+ BINARIZATION_NIBLACK = 0, //!< Classic Niblack binarization. See @cite Niblack1985 .
+ BINARIZATION_SAUVOLA = 1, //!< Sauvola's technique. See @cite Sauvola1997 .
+ BINARIZATION_WOLF = 2, //!< Wolf's technique. See @cite Wolf2004 .
+ BINARIZATION_NICK = 3 //!< NICK technique. See @cite Khurshid2009 .
+};
+
+
+void niBlackThreshold( InputArray _src, OutputArray _dst, double maxValue,
+ int type, int blockSize, double k, int binarizationMethod )
+{
+ // Input grayscale image
+ Mat src = _src.getMat();
+ CV_Assert(src.channels() == 1);
+ CV_Assert(blockSize % 2 == 1 && blockSize > 1);
+ if (binarizationMethod == BINARIZATION_SAUVOLA) {
+ CV_Assert(src.depth() == CV_8U);
+ }
+ type &= THRESH_MASK;
+ // Compute local threshold (T = mean + k * stddev)
+ // using mean and standard deviation in the neighborhood of each pixel
+ // (intermediate calculations are done with floating-point precision)
+ Mat test;
+ Mat thresh;
+ {
+ // note that: Var[X] = E[X^2] - E[X]^2
+ Mat mean, sqmean, variance, stddev, sqrtVarianceMeanSum;
+ double srcMin, stddevMax;
+ boxFilter(src, mean, CV_32F, Size(blockSize, blockSize),
+ Point(-1,-1), true, BORDER_REPLICATE);
+ sqrBoxFilter(src, sqmean, CV_32F, Size(blockSize, blockSize),
+ Point(-1,-1), true, BORDER_REPLICATE);
+ variance = sqmean - mean.mul(mean);
+ sqrt(variance, stddev);
+ switch (binarizationMethod)
+ {
+ case BINARIZATION_NIBLACK:
+ thresh = mean + stddev * static_cast(k);
+
+ break;
+ case BINARIZATION_SAUVOLA:
+ thresh = mean.mul(1. + static_cast(k) * (stddev / 128.0 - 1.));
+ break;
+ case BINARIZATION_WOLF:
+ minMaxIdx(src, &srcMin,NULL);
+ minMaxIdx(stddev, NULL, &stddevMax);
+ thresh = mean - static_cast(k) * (mean - srcMin - stddev.mul(mean - srcMin) / stddevMax);
+ break;
+ case BINARIZATION_NICK:
+ sqrt(variance + sqmean, sqrtVarianceMeanSum);
+ thresh = mean + static_cast(k) * sqrtVarianceMeanSum;
+ break;
+ default:
+ CV_Error( CV_StsBadArg, "Unknown binarization method" );
+ break;
+ }
+ thresh.convertTo(thresh, src.depth());
+
+ thresh.convertTo(test, src.depth());
+//
+// cv::imshow("imagex",test);
+// cv::waitKey(0);
+
+ }
+ // Prepare output image
+ _dst.create(src.size(), src.type());
+ Mat dst = _dst.getMat();
+ CV_Assert(src.data != dst.data); // no inplace processing
+ // Apply thresholding: ( pixel > threshold ) ? foreground : background
+ Mat mask;
+ switch (type)
+ {
+ case THRESH_BINARY: // dst = (src > thresh) ? maxval : 0
+ case THRESH_BINARY_INV: // dst = (src > thresh) ? 0 : maxval
+ compare(src, thresh, mask, (type == THRESH_BINARY ? CMP_GT : CMP_LE));
+ dst.setTo(0);
+ dst.setTo(maxValue, mask);
+ break;
+ case THRESH_TRUNC: // dst = (src > thresh) ? thresh : src
+ compare(src, thresh, mask, CMP_GT);
+ src.copyTo(dst);
+ thresh.copyTo(dst, mask);
+ break;
+ case THRESH_TOZERO: // dst = (src > thresh) ? src : 0
+ case THRESH_TOZERO_INV: // dst = (src > thresh) ? 0 : src
+ compare(src, thresh, mask, (type == THRESH_TOZERO ? CMP_GT : CMP_LE));
+ dst.setTo(0);
+ src.copyTo(dst, mask);
+ break;
+ default:
+ CV_Error( CV_StsBadArg, "Unknown threshold type" );
+ break;
+ }
+}
+
+#endif //SWIFTPR_NIBLACKTHRESHOLD_H
diff --git a/Prj-iOS/lpr/lpr/Source/src/CNNRecognizer.cpp b/Prj-iOS/lpr/lpr/Source/src/CNNRecognizer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1003e671d2e2e3563b2a89aa4acf7d67419bf08d
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/CNNRecognizer.cpp
@@ -0,0 +1,19 @@
+//
+// Created by Jack Yu on 21/10/2017.
+//
+
+#include "CNNRecognizer.h"
+
+namespace pr{
+ CNNRecognizer::CNNRecognizer(std::string prototxt,std::string caffemodel){
+ net = cv::dnn::readNetFromCaffe(prototxt, caffemodel);
+ }
+
+ label CNNRecognizer::recognizeCharacter(cv::Mat charImage){
+ if(charImage.channels()== 3)
+ cv::cvtColor(charImage,charImage,cv::COLOR_BGR2GRAY);
+ cv::Mat inputBlob = cv::dnn::blobFromImage(charImage, 1/255.0, cv::Size(CHAR_INPUT_W,CHAR_INPUT_H), cv::Scalar(0,0,0),false);
+ net.setInput(inputBlob,"data");
+ return net.forward();
+ }
+}
diff --git a/Prj-iOS/lpr/lpr/Source/src/FastDeskew.cpp b/Prj-iOS/lpr/lpr/Source/src/FastDeskew.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5da3644c015883c08064a078ca48f58bdc2448ca
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/FastDeskew.cpp
@@ -0,0 +1,108 @@
+//
+// Created by Jack Yu on 02/10/2017.
+//
+
+
+
+#include "FastDeskew.h"
+
+namespace pr{
+ const int ANGLE_MIN = 30 ;
+ const int ANGLE_MAX = 150 ;
+ const int PLATE_H = 36;
+ const int PLATE_W = 136;
+
+ int angle(float x,float y)
+ {
+ return atan2(x,y)*180/3.1415;
+ }
+
+ std::vector avgfilter(std::vector angle_list,int windowsSize) {
+ std::vector angle_list_filtered(angle_list.size() - windowsSize + 1);
+ for (int i = 0; i < angle_list.size() - windowsSize + 1; i++) {
+ float avg = 0.00f;
+ for (int j = 0; j < windowsSize; j++) {
+ avg += angle_list[i + j];
+ }
+ avg = avg / windowsSize;
+ angle_list_filtered[i] = avg;
+ }
+
+ return angle_list_filtered;
+ }
+
+
+ void drawHist(std::vector seq){
+ cv::Mat image(300,seq.size(),CV_8U);
+ image.setTo(0);
+
+ for(int i = 0;i(skewPlate.rows*tan(cv::abs(angle)/180* 3.14) );
+ cv::Size size(skewPlate.cols + extend_padding ,skewPlate.rows);
+ float interval = abs(sin((angle /180) * 3.14)* skewPlate.rows);
+ cv::Point2f pts1[4] = {cv::Point2f(0,0),cv::Point2f(0,size_o.height),cv::Point2f(size_o.width,0),cv::Point2f(size_o.width,size_o.height)};
+ if(angle>0) {
+ cv::Point2f pts2[4] = {cv::Point2f(interval, 0), cv::Point2f(0, size_o.height),
+ cv::Point2f(size_o.width, 0), cv::Point2f(size_o.width - interval, size_o.height)};
+ cv::Mat M = cv::getPerspectiveTransform(pts1,pts2);
+ cv::warpPerspective(skewPlate,dst,M,size);
+ }
+ else {
+ cv::Point2f pts2[4] = {cv::Point2f(0, 0), cv::Point2f(interval, size_o.height), cv::Point2f(size_o.width-interval, 0),
+ cv::Point2f(size_o.width, size_o.height)};
+ cv::Mat M = cv::getPerspectiveTransform(pts1,pts2);
+ cv::warpPerspective(skewPlate,dst,M,size,cv::INTER_CUBIC);
+ }
+ return dst;
+ }
+ cv::Mat fastdeskew(cv::Mat skewImage,int blockSize){
+ const int FILTER_WINDOWS_SIZE = 5;
+ std::vector angle_list(180);
+ memset(angle_list.data(),0,angle_list.size()*sizeof(int));
+ cv::Mat bak;
+ skewImage.copyTo(bak);
+ if(skewImage.channels() == 3)
+ cv::cvtColor(skewImage,skewImage,cv::COLOR_RGB2GRAY);
+ if(skewImage.channels() == 1)
+ {
+ cv::Mat eigen;
+ cv::cornerEigenValsAndVecs(skewImage,eigen,blockSize,5);
+ for( int j = 0; j < skewImage.rows; j+=blockSize )
+ { for( int i = 0; i < skewImage.cols; i+=blockSize )
+ {
+ float x2 = eigen.at(j, i)[4];
+ float y2 = eigen.at(j, i)[5];
+ int angle_cell = angle(x2,y2);
+ angle_list[(angle_cell + 180)%180]+=1.0;
+ }
+ }
+ }
+ std::vector filtered = avgfilter(angle_list,5);
+ int maxPos = std::max_element(filtered.begin(),filtered.end()) - filtered.begin() + FILTER_WINDOWS_SIZE/2;
+ if(maxPos>ANGLE_MAX)
+ maxPos = (-maxPos+90+180)%180;
+ if(maxPos(maxPos),60.0f);
+ return deskewed;
+ }
+
+
+
+}//namespace pr
diff --git a/Prj-iOS/lpr/lpr/Source/src/FineMapping.cpp b/Prj-iOS/lpr/lpr/Source/src/FineMapping.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2032b15a42a0583165ea391fe453c9f7773bf4aa
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/FineMapping.cpp
@@ -0,0 +1,170 @@
+#include "FineMapping.h"
+namespace pr{
+
+ const int FINEMAPPING_H = 60 ;
+ const int FINEMAPPING_W = 140;
+ const int PADDING_UP_DOWN = 30;
+ void drawRect(cv::Mat image,cv::Rect rect)
+ {
+ cv::Point p1(rect.x,rect.y);
+ cv::Point p2(rect.x+rect.width,rect.y+rect.height);
+ cv::rectangle(image,p1,p2,cv::Scalar(0,255,0),1);
+ }
+
+
+ FineMapping::FineMapping(std::string prototxt,std::string caffemodel) {
+ net = cv::dnn::readNetFromCaffe(prototxt, caffemodel);
+
+ }
+
+ cv::Mat FineMapping::FineMappingHorizon(cv::Mat FinedVertical,int leftPadding,int rightPadding)
+ {
+
+// if(FinedVertical.channels()==1)
+// cv::cvtColor(FinedVertical,FinedVertical,cv::COLOR_GRAY2BGR);
+ cv::Mat inputBlob = cv::dnn::blobFromImage(FinedVertical, 1/255.0, cv::Size(66,16),
+ cv::Scalar(0,0,0),false);
+
+ net.setInput(inputBlob,"data");
+ cv::Mat prob = net.forward();
+ int front = static_cast(prob.at(0,0)*FinedVertical.cols);
+ int back = static_cast(prob.at(0,1)*FinedVertical.cols);
+ front -= leftPadding ;
+ if(front<0) front = 0;
+ back +=rightPadding;
+ if(back>FinedVertical.cols-1) back=FinedVertical.cols - 1;
+ cv::Mat cropped = FinedVertical.colRange(front,back).clone();
+ return cropped;
+
+
+ }
+ std::pair FitLineRansac(std::vector pts,int zeroadd = 0 )
+ {
+ std::pair res;
+ if(pts.size()>2)
+ {
+ cv::Vec4f line;
+ cv::fitLine(pts,line,cv::DIST_HUBER,0,0.01,0.01);
+ float vx = line[0];
+ float vy = line[1];
+ float x = line[2];
+ float y = line[3];
+ int lefty = static_cast((-x * vy / vx) + y);
+ int righty = static_cast(((136- x) * vy / vx) + y);
+ res.first = lefty+PADDING_UP_DOWN+zeroadd;
+ res.second = righty+PADDING_UP_DOWN+zeroadd;
+ return res;
+ }
+ res.first = zeroadd;
+ res.second = zeroadd;
+ return res;
+ }
+
+ cv::Mat FineMapping::FineMappingVertical(cv::Mat InputProposal,int sliceNum,int upper,int lower,int windows_size){
+ cv::Mat PreInputProposal;
+ cv::Mat proposal;
+ cv::resize(InputProposal,PreInputProposal,cv::Size(FINEMAPPING_W,FINEMAPPING_H));
+ if(InputProposal.channels() == 3)
+ cv::cvtColor(PreInputProposal,proposal,cv::COLOR_BGR2GRAY);
+ else
+ PreInputProposal.copyTo(proposal);
+ // this will improve some sen
+ cv::Mat kernal = cv::getStructuringElement(cv::MORPH_ELLIPSE,cv::Size(1,3));
+ float diff = static_cast(upper-lower);
+ diff/=static_cast(sliceNum-1);
+ cv::Mat binary_adaptive;
+ std::vector line_upper;
+ std::vector line_lower;
+ int contours_nums=0;
+ for(int i = 0 ; i < sliceNum ; i++)
+ {
+ std::vector > contours;
+ float k =lower + i*diff;
+ cv::adaptiveThreshold(proposal,binary_adaptive,255,cv::ADAPTIVE_THRESH_MEAN_C,cv::THRESH_BINARY,windows_size,k);
+ cv::Mat draw;
+ binary_adaptive.copyTo(draw);
+ cv::findContours(binary_adaptive,contours,cv::RETR_EXTERNAL,cv::CHAIN_APPROX_SIMPLE);
+ for(auto contour: contours)
+ {
+ cv::Rect bdbox =cv::boundingRect(contour);
+ float lwRatio = bdbox.height/static_cast(bdbox.width);
+ int bdboxAera = bdbox.width*bdbox.height;
+ if (( lwRatio>0.7&&bdbox.width*bdbox.height>100 && bdboxAera<300)
+ || (lwRatio>3.0 && bdboxAera<100 && bdboxAera>10))
+ {
+ cv::Point p1(bdbox.x, bdbox.y);
+ cv::Point p2(bdbox.x + bdbox.width, bdbox.y + bdbox.height);
+ line_upper.push_back(p1);
+ line_lower.push_back(p2);
+ contours_nums+=1;
+ }
+ }
+ }
+ if(contours_nums<41)
+ {
+ cv::bitwise_not(InputProposal,InputProposal);
+ cv::Mat kernal = cv::getStructuringElement(cv::MORPH_ELLIPSE,cv::Size(1,5));
+ cv::Mat bak;
+ cv::resize(InputProposal,bak,cv::Size(FINEMAPPING_W,FINEMAPPING_H));
+ cv::erode(bak,bak,kernal);
+ if(InputProposal.channels() == 3)
+ cv::cvtColor(bak,proposal,cv::COLOR_BGR2GRAY);
+ else
+ proposal = bak;
+ int contours_nums=0;
+ for(int i = 0 ; i < sliceNum ; i++)
+ {
+ std::vector > contours;
+ float k =lower + i*diff;
+ cv::adaptiveThreshold(proposal,binary_adaptive,255,cv::ADAPTIVE_THRESH_MEAN_C,cv::THRESH_BINARY,windows_size,k);
+ cv::Mat draw;
+ binary_adaptive.copyTo(draw);
+ cv::findContours(binary_adaptive,contours,cv::RETR_EXTERNAL,cv::CHAIN_APPROX_SIMPLE);
+ for(auto contour: contours)
+ {
+ cv::Rect bdbox =cv::boundingRect(contour);
+ float lwRatio = bdbox.height/static_cast(bdbox.width);
+ int bdboxAera = bdbox.width*bdbox.height;
+ if (( lwRatio>0.7&&bdbox.width*bdbox.height>120 && bdboxAera<300)
+ || (lwRatio>3.0 && bdboxAera<100 && bdboxAera>10))
+ {
+
+ cv::Point p1(bdbox.x, bdbox.y);
+ cv::Point p2(bdbox.x + bdbox.width, bdbox.y + bdbox.height);
+ line_upper.push_back(p1);
+ line_lower.push_back(p2);
+ contours_nums+=1;
+ }
+ }
+ }
+ }
+ cv::Mat rgb;
+ cv::copyMakeBorder(PreInputProposal, rgb, PADDING_UP_DOWN, PADDING_UP_DOWN, 0, 0, cv::BORDER_REPLICATE);
+ std::pair A;
+ std::pair B;
+ A = FitLineRansac(line_upper, -1);
+ B = FitLineRansac(line_lower, 1);
+ int leftyB = A.first;
+ int rightyB = A.second;
+ int leftyA = B.first;
+ int rightyA = B.second;
+ int cols = rgb.cols;
+ int rows = rgb.rows;
+ std::vector corners(4);
+ corners[0] = cv::Point2f(cols - 1, rightyA);
+ corners[1] = cv::Point2f(0, leftyA);
+ corners[2] = cv::Point2f(cols - 1, rightyB);
+ corners[3] = cv::Point2f(0, leftyB);
+ std::vector corners_trans(4);
+ corners_trans[0] = cv::Point2f(136, 36);
+ corners_trans[1] = cv::Point2f(0, 36);
+ corners_trans[2] = cv::Point2f(136, 0);
+ corners_trans[3] = cv::Point2f(0, 0);
+ cv::Mat transform = cv::getPerspectiveTransform(corners, corners_trans);
+ cv::Mat quad = cv::Mat::zeros(36, 136, CV_8UC3);
+ cv::warpPerspective(rgb, quad, transform, quad.size());
+ return quad;
+ }
+}
+
+
diff --git a/Prj-iOS/lpr/lpr/Source/src/Pipeline.cpp b/Prj-iOS/lpr/lpr/Source/src/Pipeline.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..561bb680d0fa74ddba30d9976b6842a07489ab5c
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/Pipeline.cpp
@@ -0,0 +1,103 @@
+//
+// Created by 庾金科 on 23/10/2017.
+//
+
+#include "Pipeline.h"
+
+
+namespace pr {
+
+ std::string str_code[]={"京", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "皖", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z","港","学","使","警","澳","挂","军","北","南","广","沈","兰","成","济","海","民","航","空"};
+ const std::vector CH_PLATE_CODE(str_code, str_code+83);
+
+
+ const int HorizontalPadding = 4;
+ PipelinePR::PipelinePR(std::string detector_filename,
+ std::string finemapping_prototxt, std::string finemapping_caffemodel,
+ std::string segmentation_prototxt, std::string segmentation_caffemodel,
+ std::string charRecognization_proto, std::string charRecognization_caffemodel,
+ std::string segmentationfree_proto,std::string segmentationfree_caffemodel) {
+ plateDetection = new PlateDetection(detector_filename);
+ fineMapping = new FineMapping(finemapping_prototxt, finemapping_caffemodel);
+ plateSegmentation = new PlateSegmentation(segmentation_prototxt, segmentation_caffemodel);
+ generalRecognizer = new CNNRecognizer(charRecognization_proto, charRecognization_caffemodel);
+ segmentationFreeRecognizer = new SegmentationFreeRecognizer(segmentationfree_proto,segmentationfree_caffemodel);
+
+ }
+
+ PipelinePR::~PipelinePR() {
+
+ delete plateDetection;
+ delete fineMapping;
+ delete plateSegmentation;
+ delete (CNNRecognizer *)generalRecognizer;
+ delete segmentationFreeRecognizer;
+
+
+ }
+
+ std::vector PipelinePR:: RunPiplineAsImage(cv::Mat plateImage,int method) {
+ std::vector results;
+ std::vector plates;
+ plateDetection->plateDetectionRough(plateImage,plates,36,700);
+
+ for (pr::PlateInfo plateinfo:plates) {
+
+ cv::Mat image_finemapping = plateinfo.getPlateImage();
+ image_finemapping = fineMapping->FineMappingVertical(image_finemapping);
+ image_finemapping = pr::fastdeskew(image_finemapping, 5);
+
+
+
+ //Segmentation-based
+
+ if(method==SEGMENTATION_BASED_METHOD)
+ {
+ image_finemapping = fineMapping->FineMappingHorizon(image_finemapping, 2, HorizontalPadding);
+ cv::resize(image_finemapping, image_finemapping, cv::Size(136+HorizontalPadding, 36));
+// cv::imshow("image_finemapping",image_finemapping);
+// cv::waitKey(0);
+ plateinfo.setPlateImage(image_finemapping);
+ std::vector rects;
+
+ plateSegmentation->segmentPlatePipline(plateinfo, 1, rects);
+ plateSegmentation->ExtractRegions(plateinfo, rects);
+ cv::copyMakeBorder(image_finemapping, image_finemapping, 0, 0, 0, 20, cv::BORDER_REPLICATE);
+ plateinfo.setPlateImage(image_finemapping);
+ generalRecognizer->SegmentBasedSequenceRecognition(plateinfo);
+ plateinfo.decodePlateNormal(pr::CH_PLATE_CODE);
+
+ }
+ //Segmentation-free
+ else if(method==SEGMENTATION_FREE_METHOD)
+ {
+
+ image_finemapping = fineMapping->FineMappingHorizon(image_finemapping, 4, HorizontalPadding+3);
+
+ cv::resize(image_finemapping, image_finemapping, cv::Size(136+HorizontalPadding, 36));
+// cv::imwrite("./test.png",image_finemapping);
+// cv::imshow("image_finemapping",image_finemapping);
+// cv::waitKey(0);
+ plateinfo.setPlateImage(image_finemapping);
+// std::vector rects;
+
+ std::pair res = segmentationFreeRecognizer->SegmentationFreeForSinglePlate(plateinfo.getPlateImage(),pr::CH_PLATE_CODE);
+ plateinfo.confidence = res.second;
+ plateinfo.setPlateName(res.first);
+ }
+
+
+
+ results.push_back(plateinfo);
+ }
+
+// for (auto str:results) {
+// std::cout << str << std::endl;
+// }
+ return results;
+
+ }//namespace pr
+
+
+
+}
diff --git a/Prj-iOS/lpr/lpr/Source/src/PlateDetection.cpp b/Prj-iOS/lpr/lpr/Source/src/PlateDetection.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cb3eeef13860bfd216834ce87559f9c1c050c381
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/PlateDetection.cpp
@@ -0,0 +1,32 @@
+#include "PlateDetection.h"
+#include "util.h"
+namespace pr{
+ PlateDetection::PlateDetection(std::string filename_cascade){
+ cascade.load(filename_cascade);
+
+ };
+ void PlateDetection::plateDetectionRough(cv::Mat InputImage,std::vector &plateInfos,int min_w,int max_w){
+ cv::Mat processImage;
+ cv::cvtColor(InputImage,processImage,cv::COLOR_BGR2GRAY);
+ std::vector platesRegions;
+ cv::Size minSize(min_w,min_w/4);
+ cv::Size maxSize(max_w,max_w/4);
+ cascade.detectMultiScale( processImage, platesRegions,
+ 1.1, 3, cv::CASCADE_SCALE_IMAGE,minSize,maxSize);
+ for(auto plate:platesRegions)
+ {
+ int zeroadd_w = static_cast(plate.width*0.30);
+ int zeroadd_h = static_cast(plate.height*2);
+ int zeroadd_x = static_cast(plate.width*0.15);
+ int zeroadd_y = static_cast(plate.height*1);
+ plate.x-=zeroadd_x;
+ plate.y-=zeroadd_y;
+ plate.height += zeroadd_h;
+ plate.width += zeroadd_w;
+ cv::Mat plateImage = util::cropFromImage(InputImage,plate);
+ PlateInfo plateInfo(plateImage,plate);
+ plateInfos.push_back(plateInfo);
+
+ }
+ }
+}//namespace pr
diff --git a/Prj-iOS/lpr/lpr/Source/src/PlateSegmentation.cpp b/Prj-iOS/lpr/lpr/Source/src/PlateSegmentation.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d35c0de77c2dd3dfc1f6a654bcadf3f7b48e541d
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/PlateSegmentation.cpp
@@ -0,0 +1,404 @@
+//
+// Created by Jack Yu on 16/10/2017.
+//
+
+#include "PlateSegmentation.h"
+#include "niBlackThreshold.h"
+
+
+//#define DEBUG
+namespace pr{
+
+ PlateSegmentation::PlateSegmentation(std::string prototxt,std::string caffemodel) {
+ net = cv::dnn::readNetFromCaffe(prototxt, caffemodel);
+ }
+ cv::Mat PlateSegmentation::classifyResponse(const cv::Mat &cropped){
+ cv::Mat inputBlob = cv::dnn::blobFromImage(cropped, 1/255.0, cv::Size(22,22), cv::Scalar(0,0,0),false);
+ net.setInput(inputBlob,"data");
+ return net.forward();
+ }
+
+ void drawHist(float* seq,int size,const char* name){
+ cv::Mat image(300,size,CV_8U);
+ image.setTo(0);
+ float* start =seq;
+ float* end = seq+size;
+ float l = *std::max_element(start,end);
+ for(int i = 0;i>1),rect.y + (rect.height>>1));
+ int rebuildLeft = (rect.width>>1 )+ left;
+ int rebuildRight = (rect.width>>1 )+ right;
+ int rebuildTop = (rect.height>>1 )+ top;
+ int rebuildBottom = (rect.height>>1 )+ bottom;
+ return boxFromCenter(center,rebuildLeft,rebuildRight,rebuildTop,rebuildBottom,bdSize);
+
+ }
+
+
+
+ void PlateSegmentation:: refineRegion(cv::Mat &plateImage,const std::vector &candidatePts,const int padding,std::vector &rects){
+ int w = candidatePts[5] - candidatePts[4];
+ int cols = plateImage.cols;
+ int rows = plateImage.rows;
+ for(int i = 0 ; i < candidatePts.size() ; i++)
+ {
+ int left = 0;
+ int right = 0 ;
+
+ if(i == 0 ){
+ left= candidatePts[i];
+ right = left+w+padding;
+ }
+ else {
+ left = candidatePts[i] - padding;
+ right = left + w + padding * 2;
+ }
+
+ computeSafeMargin(right,cols);
+ computeSafeMargin(left,cols);
+ cv::Rect roi(left,0,right - left,rows-1);
+ cv::Mat roiImage;
+ plateImage(roi).copyTo(roiImage);
+
+ if (i>=1)
+ {
+
+ cv::Mat roi_thres;
+// cv::threshold(roiImage,roi_thres,0,255,cv::THRESH_OTSU|cv::THRESH_BINARY);
+
+ niBlackThreshold(roiImage,roi_thres,255,cv::THRESH_BINARY,15,0.27,BINARIZATION_NIBLACK);
+
+ std::vector > contours;
+ cv::findContours(roi_thres,contours,cv::RETR_LIST,cv::CHAIN_APPROX_SIMPLE);
+ cv::Point boxCenter(roiImage.cols>>1,roiImage.rows>>1);
+
+ cv::Rect final_bdbox;
+ cv::Point final_center;
+ int final_dist = INT_MAX;
+
+
+ for(auto contour:contours)
+ {
+ cv::Rect bdbox = cv::boundingRect(contour);
+ cv::Point center(bdbox.x+(bdbox.width>>1),bdbox.y + (bdbox.height>>1));
+ int dist = (center.x - boxCenter.x)*(center.x - boxCenter.x);
+ if(dist rows>>1)
+ { final_dist =dist;
+ final_center = center;
+ final_bdbox = bdbox;
+ }
+ }
+
+ //rebuild box
+ if(final_bdbox.height/ static_cast(final_bdbox.width) > 3.5 && final_bdbox.width*final_bdbox.height<10)
+ final_bdbox = boxFromCenter(final_center,8,8,(rows>>1)-3 , (rows>>1) - 2,roiImage.size());
+ else {
+ if(i == candidatePts.size()-1)
+ final_bdbox = boxPadding(final_bdbox, padding/2, padding, padding/2, padding/2, roiImage.size());
+ else
+ final_bdbox = boxPadding(final_bdbox, padding, padding, padding, padding, roiImage.size());
+
+
+// std::cout<0&&i+j+r > &candidatePts){
+ int rows = respones.rows;
+ int cols = respones.cols;
+
+
+
+ float *data = (float*)respones.data;
+ float *engNum_prob = data;
+ float *false_prob = data+cols;
+ float *ch_prob = data+cols*2;
+
+ avgfilter(engNum_prob,cols,5);
+ avgfilter(false_prob,cols,5);
+// avgfilter(ch_prob,cols,5);
+ std::vector candidate_pts(7);
+//#ifdef DEBUG
+// drawHist(engNum_prob,cols,"engNum_prob");
+// drawHist(false_prob,cols,"false_prob");
+// drawHist(ch_prob,cols,"ch_prob");
+// cv::waitKey(0);
+//#endif
+
+
+
+
+ int cp_list[7];
+ float loss_selected = -10;
+
+ for(int start = 0 ; start < 20 ; start+=2)
+ for(int width = windowsWidth-5; width < windowsWidth+5 ; width++ ){
+ for(int interval = windowsWidth/2; interval < windowsWidth; interval++)
+ {
+ int cp1_ch = start;
+ int cp2_p0 = cp1_ch+ width;
+ int cp3_p1 = cp2_p0+ width + interval;
+ int cp4_p2 = cp3_p1 + width;
+ int cp5_p3 = cp4_p2 + width+1;
+ int cp6_p4 = cp5_p3 + width+2;
+ int cp7_p5= cp6_p4+ width+2;
+
+ int md1 = (cp1_ch+cp2_p0)>>1;
+ int md2 = (cp2_p0+cp3_p1)>>1;
+ int md3 = (cp3_p1+cp4_p2)>>1;
+ int md4 = (cp4_p2+cp5_p3)>>1;
+ int md5 = (cp5_p3+cp6_p4)>>1;
+ int md6 = (cp6_p4+cp7_p5)>>1;
+
+
+
+
+ if(cp7_p5>=cols)
+ continue;
+// float loss = ch_prob[cp1_ch]+
+// engNum_prob[cp2_p0] +engNum_prob[cp3_p1]+engNum_prob[cp4_p2]+engNum_prob[cp5_p3]+engNum_prob[cp6_p4] +engNum_prob[cp7_p5]
+// + (false_prob[md2]+false_prob[md3]+false_prob[md4]+false_prob[md5]+false_prob[md5] + false_prob[md6]);
+ float loss = ch_prob[cp1_ch]*3 -(false_prob[cp3_p1]+false_prob[cp4_p2]+false_prob[cp5_p3]+false_prob[cp6_p4]+false_prob[cp7_p5]);
+
+ if(loss>loss_selected)
+ {
+ loss_selected = loss;
+ cp_list[0]= cp1_ch;
+ cp_list[1]= cp2_p0;
+ cp_list[2]= cp3_p1;
+ cp_list[3]= cp4_p2;
+ cp_list[4]= cp5_p3;
+ cp_list[5]= cp6_p4;
+ cp_list[6]= cp7_p5;
+ }
+ }
+ }
+ candidate_pts[0] = cp_list[0];
+ candidate_pts[1] = cp_list[1];
+ candidate_pts[2] = cp_list[2];
+ candidate_pts[3] = cp_list[3];
+ candidate_pts[4] = cp_list[4];
+ candidate_pts[5] = cp_list[5];
+ candidate_pts[6] = cp_list[6];
+
+ candidatePts.first = loss_selected;
+ candidatePts.second = candidate_pts;
+
+ };
+
+
+ void PlateSegmentation::segmentPlateBySlidingWindows(cv::Mat &plateImage,int windowsWidth,int stride,cv::Mat &respones){
+
+
+// cv::resize(plateImage,plateImage,cv::Size(136,36));
+
+ cv::Mat plateImageGray;
+ cv::cvtColor(plateImage,plateImageGray,cv::COLOR_BGR2GRAY);
+ int padding = plateImage.cols-136 ;
+// int padding = 0 ;
+ int height = plateImage.rows - 1;
+ int width = plateImage.cols - 1 - padding;
+ for(int i = 0 ; i < width - windowsWidth +1 ; i +=stride)
+ {
+ cv::Rect roi(i,0,windowsWidth,height);
+ cv::Mat roiImage = plateImageGray(roi);
+ cv::Mat response = classifyResponse(roiImage);
+ respones.push_back(response);
+ }
+
+
+
+
+ respones = respones.t();
+// std::pair> images ;
+//
+//
+// std::cout< &Char_rects){
+ cv::Mat plateImage = plateInfo.getPlateImage(); // get src image .
+ cv::Mat plateImageGray;
+ cv::cvtColor(plateImage,plateImageGray,cv::COLOR_BGR2GRAY);
+ //do binarzation
+ //
+ std::pair > sections ; // segment points variables .
+
+ cv::Mat respones; //three response of every sub region from origin image .
+ segmentPlateBySlidingWindows(plateImage,DEFAULT_WIDTH,1,respones);
+ templateMatchFinding(respones,DEFAULT_WIDTH/stride,sections);
+ for(int i = 0; i < sections.second.size() ; i++)
+ {
+ sections.second[i]*=stride;
+
+ }
+
+// std::cout< &rects){
+ cv::Mat plateImage = plateInfo.getPlateImage();
+ for(int i = 0 ; i < rects.size() ; i++){
+ cv::Mat charImage;
+ plateImage(rects[i]).copyTo(charImage);
+ if(charImage.channels())
+ cv::cvtColor(charImage,charImage,cv::COLOR_BGR2GRAY);
+// cv::imshow("image",charImage);
+// cv::waitKey(0);
+ cv::equalizeHist(charImage,charImage);
+//
+
+//
+
+
+ std::pair char_instance;
+ if(i == 0 ){
+
+ char_instance.first = CHINESE;
+
+
+ } else if(i == 1){
+ char_instance.first = LETTER;
+ }
+ else{
+ char_instance.first = LETTER_NUMS;
+ }
+ char_instance.second = charImage;
+ plateInfo.appendPlateChar(char_instance);
+
+ }
+
+ }
+
+}//namespace pr
diff --git a/Prj-iOS/lpr/lpr/Source/src/Recognizer.cpp b/Prj-iOS/lpr/lpr/Source/src/Recognizer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3bfafef9d917d0f83eb67606f92f6e28839b99b1
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/Recognizer.cpp
@@ -0,0 +1,23 @@
+//
+// Created by Jack Yu on 22/10/2017.
+//
+
+#include "Recognizer.h"
+
+namespace pr{
+ void GeneralRecognizer::SegmentBasedSequenceRecognition(PlateInfo &plateinfo){
+ for(auto char_instance:plateinfo.plateChars)
+ {
+ std::pair res;
+ if(char_instance.second.rows*char_instance.second.cols>40) {
+ label code_table = recognizeCharacter(char_instance.second);
+ res.first = char_instance.first;
+ code_table.copyTo(res.second);
+ plateinfo.appendPlateCoding(res);
+ } else{
+ res.first = INVALID;
+ plateinfo.appendPlateCoding(res);
+ }
+ }
+ }
+}
diff --git a/Prj-iOS/lpr/lpr/Source/src/SegmentationFreeRecognizer.cpp b/Prj-iOS/lpr/lpr/Source/src/SegmentationFreeRecognizer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2e6706d3f86cc213b2d2a885809325ea23cec049
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/SegmentationFreeRecognizer.cpp
@@ -0,0 +1,89 @@
+//
+// Created by Jack Yu on 28/11/2017.
+//
+#include "SegmentationFreeRecognizer.h"
+
+namespace pr {
+ SegmentationFreeRecognizer::SegmentationFreeRecognizer(std::string prototxt, std::string caffemodel) {
+ net = cv::dnn::readNetFromCaffe(prototxt, caffemodel);
+ }
+ inline int judgeCharRange(int id)
+ {return id<31 || id>63;
+ }
+ std::pair decodeResults(cv::Mat code_table,std::vector mapping_table,float thres)
+ {
+ cv::MatSize mtsize = code_table.size;
+ int sequencelength = mtsize[2];
+ int labellength = mtsize[1];
+ cv::transpose(code_table.reshape(1,1).reshape(1,labellength),code_table);
+ std::string name = "";
+ std::vector seq(sequencelength);
+ std::vector > seq_decode_res;
+ for(int i = 0 ; i < sequencelength; i++) {
+ float *fstart = ((float *) (code_table.data) + i * labellength );
+ int id = std::max_element(fstart,fstart+labellength) - fstart;
+ seq[i] =id;
+ }
+
+ float sum_confidence = 0;
+ int plate_lenghth = 0 ;
+ for(int i = 0 ; i< sequencelength ; i++)
+ {
+ if(seq[i]!=labellength-1 && (i==0 || seq[i]!=seq[i-1]))
+ {
+ float *fstart = ((float *) (code_table.data) + i * labellength );
+ float confidence = *(fstart+seq[i]);
+ std::pair pair_(seq[i],confidence);
+ seq_decode_res.push_back(pair_);
+ }
+ }
+ int i = 0;
+ if (seq_decode_res.size()>1 && judgeCharRange(seq_decode_res[0].first) && judgeCharRange(seq_decode_res[1].first))
+ {
+ i=2;
+ int c = seq_decode_res[0].second res;
+ res.second = sum_confidence/plate_lenghth;
+ res.first = name;
+ return res;
+
+ }
+ std::string decodeResults(cv::Mat code_table,std::vector mapping_table)
+ {
+ cv::MatSize mtsize = code_table.size;
+ int sequencelength = mtsize[2];
+ int labellength = mtsize[1];
+ cv::transpose(code_table.reshape(1,1).reshape(1,labellength),code_table);
+ std::string name = "";
+ std::vector seq(sequencelength);
+ for(int i = 0 ; i < sequencelength; i++) {
+ float *fstart = ((float *) (code_table.data) + i * labellength );
+ int id = std::max_element(fstart,fstart+labellength) - fstart;
+ seq[i] =id;
+ }
+ for(int i = 0 ; i< sequencelength ; i++)
+ {
+ if(seq[i]!=labellength-1 && (i==0 || seq[i]!=seq[i-1]))
+ name+=mapping_table[seq[i]];
+ }
+ return name;
+ }
+ std::pair SegmentationFreeRecognizer::SegmentationFreeForSinglePlate(cv::Mat Image,std::vector mapping_table) {
+ cv::transpose(Image,Image);
+ cv::Mat inputBlob = cv::dnn::blobFromImage(Image, 1 / 255.0, cv::Size(40,160));
+ net.setInput(inputBlob, "data");
+ cv::Mat char_prob_mat = net.forward();
+ return decodeResults(char_prob_mat,mapping_table,0.00);
+ }
+}
diff --git a/Prj-iOS/lpr/lpr/Source/src/util.h b/Prj-iOS/lpr/lpr/Source/src/util.h
new file mode 100644
index 0000000000000000000000000000000000000000..3f9f52c95cdeda58dc9b4bae81228c919c287ef2
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Source/src/util.h
@@ -0,0 +1,67 @@
+//
+// Created by Jack Yu on 04/04/2017.
+//
+
+#include
+namespace util{
+ template void swap ( T& a, T& b )
+ {
+ T c(a); a=b; b=c;
+ }
+ template T min(T& a,T& b )
+ {
+ return a>b?b:a;
+ }
+
+ cv::Mat cropFromImage(const cv::Mat &image,cv::Rect rect){
+ int w = image.cols-1;
+ int h = image.rows-1;
+ rect.x = std::max(rect.x,0);
+ rect.y = std::max(rect.y,0);
+ rect.height = std::min(rect.height,h-rect.y);
+ rect.width = std::min(rect.width,w-rect.x);
+ cv::Mat temp(rect.size(), image.type());
+ cv::Mat cropped;
+ temp = image(rect);
+ temp.copyTo(cropped);
+ return cropped;
+
+ }
+
+ cv::Mat cropBox2dFromImage(const cv::Mat &image,cv::RotatedRect rect)
+ {
+ cv::Mat M, rotated, cropped;
+ float angle = rect.angle;
+ cv::Size rect_size(rect.size.width,rect.size.height);
+ if (rect.angle < -45.) {
+ angle += 90.0;
+ swap(rect_size.width, rect_size.height);
+ }
+ M = cv::getRotationMatrix2D(rect.center, angle, 1.0);
+ cv::warpAffine(image, rotated, M, image.size(), cv::INTER_CUBIC);
+ cv::getRectSubPix(rotated, rect_size, rect.center, cropped);
+ return cropped;
+ }
+
+ cv::Mat calcHist(const cv::Mat &image)
+ {
+ cv::Mat hsv;
+ std::vector hsv_planes;
+ cv::cvtColor(image,hsv,cv::COLOR_BGR2HSV);
+ cv::split(hsv,hsv_planes);
+ cv::Mat hist;
+ int histSize = 256;
+ float range[] = {0,255};
+ const float* histRange = {range};
+ cv::calcHist( &hsv_planes[0], 1, 0, cv::Mat(), hist, 1, &histSize, &histRange,true, true);
+ return hist;
+ }
+
+ float computeSimilir(const cv::Mat &A,const cv::Mat &B)
+ {
+ cv::Mat histA,histB;
+ histA = calcHist(A);
+ histB = calcHist(B);
+ return cv::compareHist(histA,histB,CV_COMP_CORREL);
+ }
+}//namespace util
diff --git a/Prj-iOS/lpr/lpr/Utility.h b/Prj-iOS/lpr/lpr/Utility.h
new file mode 100644
index 0000000000000000000000000000000000000000..f2a870dca6dbb855b572fe4342ac5d6d095b93f2
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Utility.h
@@ -0,0 +1,30 @@
+//
+// Utility.h
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+#ifdef __cplusplus
+#import
+#endif
+#ifdef __OBJC__
+#import
+#import
+#endif
+using namespace cv;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface Utility : NSObject
+
++ (cv::Mat)cvMatFromUIImage:(UIImage *)image;
++ (UIImage *)UIImageFromCVMat:(cv::Mat)image;
++ (UIImage *)scaleAndRotateImageFrontCamera:(UIImage *)image;
++ (UIImage *)scaleAndRotateImageBackCamera:(UIImage *)image;
++ (UIImage *)imageWithMat:(const cv::Mat&) image andImageOrientation: (UIImageOrientation) orientation;
++ (UIImage *)imageWithMat:(const cv::Mat&) image andDeviceOrientation: (UIDeviceOrientation) orientation;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Prj-iOS/lpr/lpr/Utility.mm b/Prj-iOS/lpr/lpr/Utility.mm
new file mode 100644
index 0000000000000000000000000000000000000000..d78785c0c9d04eb562fceecc2c068fc3b2a98be0
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/Utility.mm
@@ -0,0 +1,320 @@
+//
+// Utility.m
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+
+#import "Utility.h"
+
+@implementation Utility
+
++ (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat
+{
+ NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize()*cvMat.total()];
+ CGColorSpaceRef colorSpace;
+
+ if (cvMat.elemSize() == 1) {
+ colorSpace = CGColorSpaceCreateDeviceGray();
+ } else {
+ colorSpace = CGColorSpaceCreateDeviceRGB();
+ }
+
+ CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
+
+ // Creating CGImage from cv::Mat
+ CGImageRef imageRef = CGImageCreate(cvMat.cols, //width
+ cvMat.rows, //height
+ 8, //bits per component
+ 8 * cvMat.elemSize(), //bits per pixel
+ cvMat.step[0], //bytesPerRow
+ colorSpace, //colorspace
+ kCGImageAlphaNone|kCGBitmapByteOrderDefault,// bitmap info
+ provider, //CGDataProviderRef
+ NULL, //decode
+ false, //should interpolate
+ kCGRenderingIntentDefault //intent
+ );
+
+ // Getting UIImage from CGImage
+ UIImage *finalImage = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationUp];
+ CGImageRelease(imageRef);
+ CGDataProviderRelease(provider);
+ CGColorSpaceRelease(colorSpace);
+
+ return finalImage;
+}
+
+//缩放调整图片
++ (UIImage *)scaleAndRotateImageBackCamera:(UIImage *)image
+{
+ static int kMaxResolution = 480;
+ CGImageRef imgRef = image.CGImage;
+ CGFloat width = CGImageGetWidth(imgRef);
+ CGFloat height = CGImageGetHeight(imgRef);
+
+ CGAffineTransform transform = CGAffineTransformIdentity;
+ CGRect bounds = CGRectMake(0, 0, width, height);
+ if (width > kMaxResolution || height > kMaxResolution) {
+ CGFloat ratio = width/height;
+ if (ratio > 1) {
+ bounds.size.width = kMaxResolution;
+ bounds.size.height = bounds.size.width / ratio;
+ } else {
+ bounds.size.height = kMaxResolution;
+ bounds.size.width = bounds.size.height * ratio;
+ }
+ }
+ CGFloat scaleRatio = bounds.size.width / width;
+ CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
+ CGFloat boundHeight;
+ UIImageOrientation orient = image.imageOrientation;
+ switch(orient) {
+ case UIImageOrientationUp:
+ transform = CGAffineTransformIdentity;
+ break;
+ case UIImageOrientationUpMirrored:
+ transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
+ transform = CGAffineTransformScale(transform, -1.0, 1.0);
+ break;
+ case UIImageOrientationDown:
+ transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
+ transform = CGAffineTransformRotate(transform, M_PI);
+ break;
+ case UIImageOrientationDownMirrored:
+ transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
+ transform = CGAffineTransformScale(transform, 1.0, -1.0);
+ break;
+ case UIImageOrientationLeftMirrored:
+ boundHeight = bounds.size.height;
+ bounds.size.height = bounds.size.width;
+ bounds.size.width = boundHeight;
+ transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
+ transform = CGAffineTransformScale(transform, -1.0, 1.0);
+ transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
+ break;
+ case UIImageOrientationLeft:
+ boundHeight = bounds.size.height;
+ bounds.size.height = bounds.size.width;
+ bounds.size.width = boundHeight;
+ transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
+ transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
+ break;
+ case UIImageOrientationRightMirrored:
+ boundHeight = bounds.size.height;
+ bounds.size.height = bounds.size.width;
+ bounds.size.width = boundHeight;
+ transform = CGAffineTransformMakeScale(-1.0, 1.0);
+ transform = CGAffineTransformRotate(transform, M_PI / 2.0);
+ break;
+ case UIImageOrientationRight:
+ boundHeight = bounds.size.height;
+ bounds.size.height = bounds.size.width;
+ bounds.size.width = boundHeight;
+ transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
+ transform = CGAffineTransformRotate(transform, M_PI / 2.0);
+ break;
+ default:
+ [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];
+ }
+
+ UIGraphicsBeginImageContext(bounds.size);
+ CGContextRef context = UIGraphicsGetCurrentContext();
+ if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {
+ CGContextScaleCTM(context, -scaleRatio, scaleRatio);
+ CGContextTranslateCTM(context, -height, 0);
+ } else {
+ CGContextScaleCTM(context, scaleRatio, -scaleRatio);
+ CGContextTranslateCTM(context, 0, -height);
+ }
+ CGContextConcatCTM(context, transform);
+ CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
+ UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+ NSLog(@"resize w%f,H%f",returnImage.size.width,returnImage.size.height);
+ return returnImage;
+}
+
++ (UIImage*)imageWithMat:(const cv::Mat&) image andDeviceOrientation: (UIDeviceOrientation)orientation
+{
+ UIImageOrientation imgOrientation = UIImageOrientationUp;
+
+ switch (orientation)
+ {
+ case UIDeviceOrientationLandscapeLeft:
+ imgOrientation =UIImageOrientationLeftMirrored; break;
+
+ case UIDeviceOrientationLandscapeRight:
+ imgOrientation = UIImageOrientationDown; break;
+
+ case UIDeviceOrientationPortraitUpsideDown:
+ imgOrientation = UIImageOrientationRightMirrored; break;
+ case UIDeviceOrientationFaceUp:
+ imgOrientation = UIImageOrientationRightMirrored; break;
+
+ default:
+ case UIDeviceOrientationPortrait:
+ imgOrientation = UIImageOrientationRight; break;
+ };
+
+ return [Utility imageWithMat:image andImageOrientation:imgOrientation];
+}
+
++ (UIImage*)imageWithMat:(const cv::Mat&)image andImageOrientation:(UIImageOrientation)orientation;
+{
+ cv::Mat rgbaView;
+
+ if (image.channels() == 3)
+ {
+ cv::cvtColor(image, rgbaView, COLOR_BGR2BGRA);
+ }
+ else if (image.channels() == 4)
+ {
+ cv::cvtColor(image, rgbaView, COLOR_BGR2BGRA);
+ }
+ else if (image.channels() == 1)
+ {
+ cv::cvtColor(image, rgbaView, COLOR_GRAY2RGBA);
+ }
+
+ NSData *data = [NSData dataWithBytes:rgbaView.data length:rgbaView.elemSize() * rgbaView.total()];
+
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+
+ CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
+
+ CGBitmapInfo bmInfo = kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big;
+
+ // Creating CGImage from cv::Mat
+ CGImageRef imageRef = CGImageCreate(rgbaView.cols, //width
+ rgbaView.rows, //height
+ 8, //bits per component
+ 8 * rgbaView.elemSize(), //bits per pixel
+ rgbaView.step.p[0], //bytesPerRow
+ colorSpace, //colorspace
+ bmInfo,// bitmap info
+ provider, //CGDataProviderRef
+ NULL, //decode
+ false, //should interpolate
+ kCGRenderingIntentDefault //intent
+ );
+
+ // Getting UIImage from CGImage
+ UIImage *finalImage = [UIImage imageWithCGImage:imageRef scale:1 orientation:orientation];
+ CGImageRelease(imageRef);
+ CGDataProviderRelease(provider);
+ CGColorSpaceRelease(colorSpace);
+
+ return finalImage;
+}
+
++ (cv::Mat)cvMatFromUIImage:(UIImage *)image
+{
+ CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
+ CGFloat cols = image.size.width;
+ CGFloat rows = image.size.height;
+
+ cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
+
+ CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to data
+ cols, // Width of bitmap
+ rows, // Height of bitmap
+ 8, // Bits per component
+ cvMat.step[0], // Bytes per row
+ colorSpace, // Colorspace
+ kCGImageAlphaNoneSkipLast |
+ kCGBitmapByteOrderDefault); // Bitmap info flags
+
+ CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
+ CGContextRelease(contextRef);
+ CGColorSpaceRelease(colorSpace);
+ cv::Mat cvMat3(rows, cols, CV_8UC3); // 8 bits per component, 4 channels
+ cv::cvtColor(cvMat, cvMat3,COLOR_RGBA2RGB);
+
+ return cvMat3;
+}
+
++ (UIImage *)scaleAndRotateImageFrontCamera:(UIImage *)image
+{
+ static int kMaxResolution = 640;
+ CGImageRef imgRef = image.CGImage;
+ CGFloat width = CGImageGetWidth(imgRef);
+ CGFloat height = CGImageGetHeight(imgRef);
+ CGAffineTransform transform = CGAffineTransformIdentity;
+ CGRect bounds = CGRectMake( 0, 0, width, height);
+ if (width > kMaxResolution || height > kMaxResolution) {
+ CGFloat ratio = width/height;
+ if (ratio > 1) {
+ bounds.size.width = kMaxResolution;
+ bounds.size.height = bounds.size.width / ratio;
+ } else {
+ bounds.size.height = kMaxResolution;
+ bounds.size.width = bounds.size.height * ratio;
+ }
+ }
+
+ CGFloat scaleRatio = bounds.size.width / width;
+ CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
+ CGFloat boundHeight;
+ UIImageOrientation orient = image.imageOrientation;
+ switch(orient) {
+ case UIImageOrientationUp:
+ transform = CGAffineTransformIdentity;
+ break;
+ case UIImageOrientationUpMirrored:
+ transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
+ transform = CGAffineTransformScale(transform, -1.0, 1.0);
+ break;
+ case UIImageOrientationDown:
+ transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
+ transform = CGAffineTransformRotate(transform, M_PI);
+ break;
+ case UIImageOrientationDownMirrored:
+ transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
+ transform = CGAffineTransformScale(transform, 1.0, -1.0);
+ break;
+ case UIImageOrientationLeftMirrored:
+ boundHeight = bounds.size.height;
+ bounds.size.height = bounds.size.width;
+ bounds.size.width = boundHeight;
+ transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
+ transform = CGAffineTransformScale(transform, -1.0, 1.0);
+ transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
+ break;
+ case UIImageOrientationLeft:
+ boundHeight = bounds.size.height;
+ bounds.size.height = bounds.size.width;
+ bounds.size.width = boundHeight;
+ transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
+ transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
+ break;
+ case UIImageOrientationRight:
+ case UIImageOrientationRightMirrored:
+ boundHeight = bounds.size.height;
+ bounds.size.height = bounds.size.width;
+ bounds.size.width = boundHeight;
+ transform = CGAffineTransformMakeScale(-1.0, 1.0);
+ transform = CGAffineTransformRotate(transform, M_PI / 2.0);
+ break;
+ default:
+ [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];
+ }
+ UIGraphicsBeginImageContext( bounds.size );
+ CGContextRef context = UIGraphicsGetCurrentContext();
+ if ( orient == UIImageOrientationRight || orient == UIImageOrientationLeft ) {
+ CGContextScaleCTM(context, -scaleRatio, scaleRatio);
+ CGContextTranslateCTM(context, -height, 0);
+ }
+ else {
+ CGContextScaleCTM(context, scaleRatio, -scaleRatio);
+ CGContextTranslateCTM(context, 0, -height);
+ }
+ CGContextConcatCTM( context, transform );
+ CGContextDrawImage( UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef );
+ UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+ return returnImage;
+}
+
+@end
diff --git a/Prj-iOS/lpr/lpr/main.m b/Prj-iOS/lpr/lpr/main.m
new file mode 100644
index 0000000000000000000000000000000000000000..5e5e2cecc054a5ada24e02e71aedcebe63873620
--- /dev/null
+++ b/Prj-iOS/lpr/lpr/main.m
@@ -0,0 +1,16 @@
+//
+// main.m
+// lpr
+//
+// Created by baotim on 2018/10/26.
+// Copyright © 2018 lprSample. All rights reserved.
+//
+
+#import
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}