├── LICENSE ├── README.md ├── UMA-TEST ├── __init__.py ├── application_util │ ├── __init__.py │ ├── __init__.pyc │ ├── __pycache__ │ │ ├── __init__.cpython-35.pyc │ │ ├── __init__.cpython-36.pyc │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-38.pyc │ │ ├── image_viewer.cpython-35.pyc │ │ ├── image_viewer.cpython-36.pyc │ │ ├── image_viewer.cpython-37.pyc │ │ ├── image_viewer.cpython-38.pyc │ │ ├── visualization.cpython-35.pyc │ │ ├── visualization.cpython-36.pyc │ │ ├── visualization.cpython-37.pyc │ │ └── visualization.cpython-38.pyc │ ├── image_viewer.py │ ├── image_viewer.pyc │ ├── show_results.py │ ├── visualization.py │ └── visualization.pyc ├── config │ ├── __pycache__ │ │ ├── config.cpython-37.pyc │ │ └── config.cpython-38.pyc │ └── config.py ├── filtered_detections │ ├── MOT16-test │ │ ├── MOT16-01.txt │ │ ├── MOT16-03.txt │ │ ├── MOT16-06.txt │ │ ├── MOT16-07.txt │ │ ├── MOT16-08.txt │ │ ├── MOT16-12.txt │ │ └── MOT16-14.txt │ ├── MOT16-train │ │ ├── MOT16-02.txt │ │ ├── MOT16-04.txt │ │ ├── MOT16-05.txt │ │ ├── MOT16-09.txt │ │ ├── MOT16-10.txt │ │ ├── MOT16-11.txt │ │ └── MOT16-13.txt │ ├── MOT17-test-DPM │ │ ├── MOT17-01-DPM.txt │ │ ├── MOT17-03-DPM.txt │ │ ├── MOT17-06-DPM.txt │ │ ├── MOT17-07-DPM.txt │ │ ├── MOT17-08-DPM.txt │ │ ├── MOT17-12-DPM.txt │ │ └── MOT17-14-DPM.txt │ ├── MOT17-test-FRCNN │ │ ├── MOT17-01-FRCNN.txt │ │ ├── MOT17-03-FRCNN.txt │ │ ├── MOT17-06-FRCNN.txt │ │ ├── MOT17-07-FRCNN.txt │ │ ├── MOT17-08-FRCNN.txt │ │ ├── MOT17-12-FRCNN.txt │ │ └── MOT17-14-FRCNN.txt │ ├── MOT17-test-SDP │ │ ├── MOT17-01-SDP.txt │ │ ├── MOT17-03-SDP.txt │ │ ├── MOT17-06-SDP.txt │ │ ├── MOT17-07-SDP.txt │ │ ├── MOT17-08-SDP.txt │ │ ├── MOT17-12-SDP.txt │ │ └── MOT17-14-SDP.txt │ ├── MOT17-train-DPM │ │ ├── MOT17-02-DPM.txt │ │ ├── MOT17-04-DPM.txt │ │ ├── MOT17-05-DPM.txt │ │ ├── MOT17-09-DPM.txt │ │ ├── MOT17-10-DPM.txt │ │ ├── MOT17-11-DPM.txt │ │ └── MOT17-13-DPM.txt │ ├── MOT17-train-FRCNN │ │ ├── MOT17-02-FRCNN.txt │ │ ├── MOT17-04-FRCNN.txt │ │ ├── MOT17-05-FRCNN.txt │ │ ├── MOT17-09-FRCNN.txt │ │ ├── MOT17-10-FRCNN.txt │ │ ├── MOT17-11-FRCNN.txt │ │ └── MOT17-13-FRCNN.txt │ └── MOT17-train-SDP │ │ ├── MOT17-02-SDP.txt │ │ ├── MOT17-04-SDP.txt │ │ ├── MOT17-05-SDP.txt │ │ ├── MOT17-09-SDP.txt │ │ ├── MOT17-10-SDP.txt │ │ ├── MOT17-11-SDP.txt │ │ └── MOT17-13-SDP.txt ├── models │ └── npair0.1-id0.1-se_block2 │ │ ├── checkpoint │ │ ├── model.ckpt-332499.data-00000-of-00001 │ │ ├── model.ckpt-332499.index │ │ ├── model.ckpt-332499.meta │ │ ├── model_config.json │ │ ├── track_config.json │ │ └── train_config.json ├── outputs │ └── MOT16 │ │ └── MOT16_train-occ_0.8-ass_0.7-npair0.1-id0.1-se_block2-20200729_220301 │ │ ├── MOT16-02.txt │ │ ├── MOT16-04.txt │ │ ├── MOT16-05.txt │ │ ├── MOT16-09.txt │ │ ├── MOT16-10.txt │ │ ├── MOT16-11.txt │ │ └── MOT16-13.txt ├── run_public.py ├── test.py └── tracker │ ├── Siamese_inference │ ├── Siamese_tracker.py │ ├── __init__.py │ ├── __pycache__ │ │ ├── Siamese_tracker.cpython-35.pyc │ │ ├── Siamese_tracker.cpython-36.pyc │ │ ├── Siamese_tracker.cpython-37.pyc │ │ ├── __init__.cpython-35.pyc │ │ ├── __init__.cpython-36.pyc │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-38.pyc │ │ ├── convolutional_alexnet.cpython-37.pyc │ │ ├── convolutional_alexnet.cpython-38.pyc │ │ ├── inference_wrapper.cpython-37.pyc │ │ └── inference_wrapper.cpython-38.pyc │ ├── convolutional_alexnet.py │ └── inference_wrapper.py │ ├── Siamese_utils │ ├── __init__.py │ ├── __init__.pyc │ ├── __pycache__ │ │ ├── __init__.cpython-35.pyc │ │ ├── __init__.cpython-36.pyc │ │ ├── __init__.cpython-37.pyc │ │ ├── __init__.cpython-38.pyc │ │ ├── infer_utils.cpython-35.pyc │ │ ├── infer_utils.cpython-36.pyc │ │ ├── infer_utils.cpython-37.pyc │ │ ├── infer_utils.cpython-38.pyc │ │ ├── misc_utils.cpython-37.pyc │ │ └── misc_utils.cpython-38.pyc │ ├── infer_utils.py │ ├── infer_utils.pyc │ └── misc_utils.py │ ├── __init__.py │ ├── __init__.pyc │ ├── detection.py │ ├── detection.pyc │ ├── mot_tracker.py │ ├── track.py │ └── track.pyc └── requirements.txt /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 yinjunbo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UMA-MOT 2 | 3 | ## Introduction 4 | 5 | This repository provides an implementation of *(CVPR20) A Unified Object Motion and Affinity Model for Online Multi-Object Tracking* (UMA-MOT). 6 | The work integrates single object tracking and metric learning into a unified triplet network by means of multi-task learning. 7 | Please refer the [paper](https://arxiv.org/pdf/2003.11291.pdf) for the full details. 8 | 9 | ## Requirement 10 | 11 | * python3 12 | * tensorflow-gpu==1.15.0 13 | 14 | ## Testing 15 | 16 | 1. Clone this repo and install dependencies 17 | ``` 18 | pip3 install -r requirements.txt 19 | ``` 20 | 2. Modify `config/config.py` to add the data path. 21 | 22 | 3. Run the inference code on MOT16 or MOT17 benchmarks. 23 | ``` 24 | cd UMA-MOT/UMA-TEST 25 | python3 test.py 26 | ``` 27 | 4. Refer [py-motmetrics](https://github.com/cheind/py-motmetrics.git) for evaluating the tracking results in `UMA-TEST/outputs`. 28 | ``` 29 | cd UMA-MOT/motmetrics 30 | python3 -m motmetrics.apps.eval_motchallenge DataPath/MOT-Challenge/MOT16/train ~/UMA-MOT/UMA-TEST/outputs/MOT16/MOT16_train-occ_0.8-ass_0.7-npair0.1-id0.1-se_block2-20200729_220301 31 | ``` 32 | 5. Visualization. 33 | ``` 34 | cd UMA-MOT/application_util 35 | python3 show_results.py \ 36 | --sequence_dir=/home/junbo/datasets/MOT-Challenge/MOT16/train/MOT16-09 \ 37 | --result_file=output_path/MOT16-09.txt \ 38 | --detection_file=UMA-MOT/UMA-TEST/filtered_detections/MOT16-train 39 | ``` 40 | 41 | 44 | 45 | ## Results on the MOT16 train set. 46 | 47 | ``` 48 | IDF1 IDP IDR Rcll Prcn GT MT PT ML FP FN IDs FM MOTA MOTP IDt IDa IDm 49 | MOT16-04 63.8% 84.4% 51.3% 55.2% 90.8% 83 18 39 26 2653 21315 43 330 49.5% 0.214 20 14 4 50 | MOT16-11 66.2% 83.3% 55.0% 61.8% 93.6% 69 17 26 26 385 3504 35 71 57.2% 0.226 16 18 8 51 | MOT16-05 57.0% 81.0% 43.9% 48.2% 89.0% 125 21 63 41 407 3529 37 135 41.7% 0.257 30 19 20 52 | MOT16-13 48.0% 83.1% 33.7% 36.8% 90.7% 107 19 38 50 431 7235 27 176 32.8% 0.283 27 17 20 53 | MOT16-10 65.6% 88.0% 52.2% 53.9% 90.8% 54 12 28 14 673 5682 35 227 48.1% 0.262 17 13 7 54 | MOT16-09 70.5% 84.5% 60.6% 67.5% 94.2% 25 11 13 1 219 1706 27 56 62.9% 0.265 15 10 4 55 | MOT16-02 44.3% 81.3% 30.4% 33.4% 89.0% 54 7 22 25 734 11884 24 169 29.1% 0.255 18 9 7 56 | OVERALL 59.9% 84.1% 46.5% 50.3% 91.0% 517 105 229 183 5502 54855 228 1164 45.1% 0.236 143 100 70 57 | ``` 58 | 59 | 60 | 61 | 62 | ## Citation 63 | 64 | If you find this project helpful in your research, please consider citing the following paper: 65 | 66 | @inproceedings{yin2020unified, 67 | title={A Unified Object Motion and Affinity Model for Online Multi-Object Tracking}, 68 | author={Yin, Junbo and Wang, Wenguan and Meng, Qinghao and Yang, Ruigang and Shen, Jianbing}, 69 | booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, 70 | year={2020}, 71 | } 72 | 73 | 74 | 75 | 76 | ## Acknowledgement 77 | * [SiamFC](https://github.com/bilylee/SiamFC-TensorFlow) 78 | * [Deep-SORT](https://github.com/nwojke/deep_sort) 79 | -------------------------------------------------------------------------------- /UMA-TEST/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/__init__.py -------------------------------------------------------------------------------- /UMA-TEST/application_util/__init__.py: -------------------------------------------------------------------------------- 1 | # vim: expandtab:ts=4:sw=4 -------------------------------------------------------------------------------- /UMA-TEST/application_util/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__init__.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/image_viewer.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/image_viewer.cpython-35.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/image_viewer.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/image_viewer.cpython-36.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/image_viewer.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/image_viewer.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/image_viewer.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/image_viewer.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/visualization.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/visualization.cpython-35.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/visualization.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/visualization.cpython-36.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/visualization.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/visualization.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/__pycache__/visualization.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/__pycache__/visualization.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/image_viewer.py: -------------------------------------------------------------------------------- 1 | """ 2 | This module contains an image viewer and drawing routines based on OpenCV. 3 | """ 4 | import numpy as np 5 | import cv2 6 | import time 7 | 8 | 9 | def is_in_bounds(mat, roi): 10 | """Check if ROI is fully contained in the image. 11 | 12 | Parameters 13 | ---------- 14 | mat : ndarray 15 | An ndarray of ndim>=2. 16 | roi : (int, int, int, int) 17 | Region of interest (x, y, width, height) where (x, y) is the top-left 18 | corner. 19 | 20 | Returns 21 | ------- 22 | bool 23 | Returns true if the ROI is contain in mat. 24 | 25 | """ 26 | if roi[0] < 0 or roi[0] + roi[2] >= mat.shape[1]: 27 | return False 28 | if roi[1] < 0 or roi[1] + roi[3] >= mat.shape[0]: 29 | return False 30 | return True 31 | 32 | 33 | def view_roi(mat, roi): 34 | """Get sub-array. 35 | 36 | The ROI must be valid, i.e., fully contained in the image. 37 | 38 | Parameters 39 | ---------- 40 | mat : ndarray 41 | An ndarray of ndim=2 or ndim=3. 42 | roi : (int, int, int, int) 43 | Region of interest (x, y, width, height) where (x, y) is the top-left 44 | corner. 45 | 46 | Returns 47 | ------- 48 | ndarray 49 | A view of the roi. 50 | 51 | """ 52 | sx, ex = roi[0], roi[0] + roi[2] 53 | sy, ey = roi[1], roi[1] + roi[3] 54 | if mat.ndim == 2: 55 | return mat[sy:ey, sx:ex] 56 | else: 57 | return mat[sy:ey, sx:ex, :] 58 | 59 | 60 | class ImageViewer(object): 61 | """An image viewer with drawing routines and video capture capabilities. 62 | 63 | Key Bindings: 64 | 65 | * 'SPACE' : pause 66 | * 'ESC' : quit 67 | 68 | Parameters 69 | ---------- 70 | update_ms : int 71 | Number of milliseconds between frames (1000 / frames per second). 72 | window_shape : (int, int) 73 | Shape of the window (width, height). 74 | caption : Optional[str] 75 | Title of the window. 76 | 77 | Attributes 78 | ---------- 79 | image : ndarray 80 | Color image of shape (height, width, 3). You may directly manipulate 81 | this image to change the view. Otherwise, you may call any of the 82 | drawing routines of this class. Internally, the image is treated as 83 | beeing in BGR color space. 84 | 85 | Note that the image is resized to the the image viewers window_shape 86 | just prior to visualization. Therefore, you may pass differently sized 87 | images and call drawing routines with the appropriate, original point 88 | coordinates. 89 | color : (int, int, int) 90 | Current BGR color code that applies to all drawing routines. 91 | Values are in range [0-255]. 92 | text_color : (int, int, int) 93 | Current BGR text color code that applies to all text rendering 94 | routines. Values are in range [0-255]. 95 | thickness : int 96 | Stroke width in pixels that applies to all drawing routines. 97 | 98 | """ 99 | 100 | def __init__(self, update_ms, window_shape=(640, 480), caption="Figure 1"): 101 | self._window_shape = window_shape 102 | self._caption = caption 103 | self._update_ms = update_ms 104 | self._video_writer = None 105 | self._user_fun = lambda: None 106 | self._terminate = False 107 | 108 | self.image = np.zeros(self._window_shape + (3, ), dtype=np.uint8) 109 | self._color = (0, 0, 0) 110 | self.text_color = (255, 255, 255) 111 | self.thickness = 1 112 | 113 | @property 114 | def color(self): 115 | return self._color 116 | 117 | @color.setter 118 | def color(self, value): 119 | if len(value) != 3: 120 | raise ValueError("color must be tuple of 3") 121 | self._color = tuple(int(c) for c in value) 122 | 123 | def rectangle(self, x, y, w, h, label=None): 124 | """Draw a rectangle. 125 | 126 | Parameters 127 | ---------- 128 | x : float | int 129 | Top left corner of the rectangle (x-axis). 130 | y : float | int 131 | Top let corner of the rectangle (y-axis). 132 | w : float | int 133 | Width of the rectangle. 134 | h : float | int 135 | Height of the rectangle. 136 | label : Optional[str] 137 | A text label that is placed at the top left corner of the 138 | rectangle. 139 | 140 | """ 141 | pt1 = int(x), int(y) 142 | pt2 = int(x + w), int(y + h) 143 | cv2.rectangle(self.image, pt1, pt2, self._color, self.thickness) 144 | if label is not None: 145 | text_size = cv2.getTextSize( 146 | label, cv2.FONT_HERSHEY_PLAIN, 3, self.thickness) 147 | 148 | center = pt1[0] + 5, pt1[1] + 5 + text_size[0][1] 149 | pt2 = pt1[0] + 10 + text_size[0][0], pt1[1] + 10 + \ 150 | text_size[0][1] 151 | cv2.rectangle(self.image, pt1, pt2, self._color, -1) 152 | cv2.putText(self.image, label, center, cv2.FONT_HERSHEY_PLAIN, 153 | 3, (255, 255, 255), self.thickness) 154 | 155 | def circle(self, x, y, radius, label=None): 156 | """Draw a circle. 157 | 158 | Parameters 159 | ---------- 160 | x : float | int 161 | Center of the circle (x-axis). 162 | y : float | int 163 | Center of the circle (y-axis). 164 | radius : float | int 165 | Radius of the circle in pixels. 166 | label : Optional[str] 167 | A text label that is placed at the center of the circle. 168 | 169 | """ 170 | image_size = int(radius + self.thickness + 1.5) # actually half size 171 | roi = int(x - image_size), int(y - image_size), \ 172 | int(2 * image_size), int(2 * image_size) 173 | if not is_in_bounds(self.image, roi): 174 | return 175 | 176 | image = view_roi(self.image, roi) 177 | center = image.shape[1] // 2, image.shape[0] // 2 178 | cv2.circle( 179 | image, center, int(radius + .5), self._color, self.thickness) 180 | if label is not None: 181 | cv2.putText( 182 | self.image, label, center, cv2.FONT_HERSHEY_PLAIN, 183 | 2, self.text_color, 2) 184 | 185 | def gaussian(self, mean, covariance, label=None): 186 | """Draw 95% confidence ellipse of a 2-D Gaussian distribution. 187 | 188 | Parameters 189 | ---------- 190 | mean : array_like 191 | The mean vector of the Gaussian distribution (ndim=1). 192 | covariance : array_like 193 | The 2x2 covariance matrix of the Gaussian distribution. 194 | label : Optional[str] 195 | A text label that is placed at the center of the ellipse. 196 | 197 | """ 198 | # chi2inv(0.95, 2) = 5.9915 199 | vals, vecs = np.linalg.eigh(5.9915 * covariance) 200 | indices = vals.argsort()[::-1] 201 | vals, vecs = np.sqrt(vals[indices]), vecs[:, indices] 202 | 203 | center = int(mean[0] + .5), int(mean[1] + .5) 204 | axes = int(vals[0] + .5), int(vals[1] + .5) 205 | angle = int(180. * np.arctan2(vecs[1, 0], vecs[0, 0]) / np.pi) 206 | cv2.ellipse( 207 | self.image, center, axes, angle, 0, 360, self._color, 2) 208 | if label is not None: 209 | cv2.putText(self.image, label, center, cv2.FONT_HERSHEY_PLAIN, 210 | 2, self.text_color, 2) 211 | 212 | def annotate(self, x, y, text): 213 | """Draws a text string at a given location. 214 | 215 | Parameters 216 | ---------- 217 | x : int | float 218 | Bottom-left corner of the text in the image (x-axis). 219 | y : int | float 220 | Bottom-left corner of the text in the image (y-axis). 221 | text : str 222 | The text to be drawn. 223 | 224 | """ 225 | cv2.putText(self.image, text, (int(x), int(y)), cv2.FONT_HERSHEY_PLAIN, 226 | 2, self.text_color, 2) 227 | 228 | def colored_points(self, points, colors=None, skip_index_check=False): 229 | """Draw a collection of points. 230 | 231 | The point size is fixed to 1. 232 | 233 | Parameters 234 | ---------- 235 | points : ndarray 236 | The Nx2 array of image locations, where the first dimension is 237 | the x-coordinate and the second dimension is the y-coordinate. 238 | colors : Optional[ndarray] 239 | The Nx3 array of colors (dtype=np.uint8). If None, the current 240 | color attribute is used. 241 | skip_index_check : Optional[bool] 242 | If True, index range checks are skipped. This is faster, but 243 | requires all points to lie within the image dimensions. 244 | 245 | """ 246 | if not skip_index_check: 247 | cond1, cond2 = points[:, 0] >= 0, points[:, 0] < 480 248 | cond3, cond4 = points[:, 1] >= 0, points[:, 1] < 640 249 | indices = np.logical_and.reduce((cond1, cond2, cond3, cond4)) 250 | points = points[indices, :] 251 | if colors is None: 252 | colors = np.repeat( 253 | self._color, len(points)).reshape(3, len(points)).T 254 | indices = (points + .5).astype(np.int) 255 | self.image[indices[:, 1], indices[:, 0], :] = colors 256 | 257 | def enable_videowriter(self, output_filename, fourcc_string="MJPG", 258 | fps=None): 259 | """ Write images to video file. 260 | 261 | Parameters 262 | ---------- 263 | output_filename : str 264 | Output filename. 265 | fourcc_string : str 266 | The OpenCV FOURCC code that defines the video codec (check OpenCV 267 | documentation for more information). 268 | fps : Optional[float] 269 | Frames per second. If None, configured according to current 270 | parameters. 271 | 272 | """ 273 | fourcc = cv2.VideoWriter_fourcc(*fourcc_string) 274 | if fps is None: 275 | fps = int(1000. / self._update_ms) 276 | self._video_writer = cv2.VideoWriter( 277 | output_filename, fourcc, fps, self._window_shape) 278 | 279 | def disable_videowriter(self): 280 | """ Disable writing videos. 281 | """ 282 | self._video_writer = None 283 | 284 | def run(self, update_fun=None): 285 | """Start the image viewer. 286 | 287 | This method blocks until the user requests to close the window. 288 | 289 | Parameters 290 | ---------- 291 | update_fun : Optional[Callable[] -> None] 292 | An optional callable that is invoked at each frame. May be used 293 | to play an animation/a video sequence. 294 | 295 | """ 296 | if update_fun is not None: 297 | self._user_fun = update_fun 298 | 299 | self._terminate, is_paused = False, False 300 | # print("ImageViewer is paused, press space to start.") 301 | while not self._terminate: 302 | t0 = time.time() 303 | if not is_paused: 304 | self._terminate = not self._user_fun() 305 | if self._video_writer is not None: 306 | self._video_writer.write( 307 | cv2.resize(self.image, self._window_shape)) 308 | t1 = time.time() 309 | remaining_time = max(1, int(self._update_ms - 1e3*(t1-t0))) 310 | cv2.imshow( 311 | self._caption, cv2.resize(self.image, self._window_shape[:2])) 312 | key = cv2.waitKey(remaining_time) 313 | if key & 255 == 27: # ESC 314 | print("terminating") 315 | self._terminate = True 316 | elif key & 255 == 32: # ' ' 317 | print("toggeling pause: " + str(not is_paused)) 318 | is_paused = not is_paused 319 | elif key & 255 == 115: # 's' 320 | print("stepping") 321 | self._terminate = not self._user_fun() 322 | is_paused = True 323 | 324 | # Due to a bug in OpenCV we must call imshow after destroying the 325 | # window. This will make the window appear again as soon as waitKey 326 | # is called. 327 | # 328 | # see https://github.com/Itseez/opencv/issues/4535 329 | self.image[:] = 0 330 | cv2.destroyWindow(self._caption) 331 | cv2.waitKey(1) 332 | cv2.imshow(self._caption, self.image) 333 | 334 | def stop(self): 335 | """Stop the control loop. 336 | 337 | After calling this method, the viewer will stop execution before the 338 | next frame and hand over control flow to the user. 339 | 340 | Parameters 341 | ---------- 342 | 343 | """ 344 | self._terminate = True 345 | -------------------------------------------------------------------------------- /UMA-TEST/application_util/image_viewer.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/image_viewer.pyc -------------------------------------------------------------------------------- /UMA-TEST/application_util/show_results.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | import cv2 4 | import numpy as np 5 | import colorsys 6 | from image_viewer import ImageViewer 7 | 8 | 9 | class Track: 10 | def __init__(self, track_bbox, track_id): 11 | self.track_bbox = track_bbox 12 | self.track_id = track_id 13 | 14 | 15 | def gather_sequence_info(sequence_dir, det_dir, result_dir): 16 | """Gather sequence information, such as image filenames, detections, 17 | groundtruth (if available). 18 | 19 | Parameters 20 | ---------- 21 | sequence_dir : str 22 | Path to the MOTChallenge sequence directory. 23 | detection_file : str 24 | Path to the detection file. 25 | 26 | Returns 27 | ------- 28 | Dict 29 | A dictionary of the following sequence information: 30 | 31 | * sequence_name: Name of the sequence 32 | * image_filenames: A dictionary that maps frame indices to image 33 | filenames. 34 | * detections: A numpy array of detections in MOTChallenge format. 35 | * groundtruth: A numpy array of ground truth in MOTChallenge format. 36 | * image_size: Image size (height, width). 37 | * min_frame_idx: Index of the first frame. 38 | * max_frame_idx: Index of the last frame. 39 | 40 | """ 41 | image_dir = os.path.join(sequence_dir, "img1") 42 | image_filenames = { 43 | int(os.path.splitext(f)[0]): os.path.join(image_dir, f) 44 | for f in os.listdir(image_dir)} 45 | groundtruth_file = os.path.join(sequence_dir, "gt/gt.txt") 46 | 47 | # detection_dir = os.path.join(sequence_dir, "det", "det.txt") 48 | detection_dir = os.path.join(det_dir, '%s.txt' % os.path.basename(sequence_dir)) 49 | # print(detection_dir) 50 | if os.path.exists(detection_dir): 51 | detections = np.loadtxt(detection_dir, delimiter=',') 52 | if os.path.exists(result_dir): 53 | results = np.loadtxt(result_dir, delimiter=',') 54 | # results = results[results[:, 6] == 1.0, :] 55 | # index = (results[:,-1]).tolist().index(min(results[:,-1])) 56 | # print(results[index]) 57 | groundtruth = None 58 | if os.path.exists(groundtruth_file): 59 | groundtruth = np.loadtxt(groundtruth_file, delimiter=',') 60 | 61 | if len(image_filenames) > 0: 62 | image = cv2.imread(next(iter(image_filenames.values())), 63 | cv2.IMREAD_GRAYSCALE) 64 | image_size = image.shape 65 | else: 66 | image_size = None 67 | 68 | if len(image_filenames) > 0: 69 | min_frame_idx = min(image_filenames.keys()) 70 | max_frame_idx = max(image_filenames.keys()) 71 | else: 72 | min_frame_idx = int(detections[:, 0].min()) 73 | max_frame_idx = int(detections[:, 0].max()) 74 | 75 | info_filename = os.path.join(sequence_dir, "seqinfo.ini") 76 | if os.path.exists(info_filename): 77 | with open(info_filename, "r") as f: 78 | line_splits = [l.split('=') for l in f.read().splitlines()[1:]] 79 | info_dict = dict( 80 | s for s in line_splits if isinstance(s, list) and len(s) == 2) 81 | 82 | update_ms = 1000 / int(info_dict["frameRate"]) 83 | else: 84 | update_ms = None 85 | 86 | # feature_dim = detections.shape[1] - 10 if detections is not None else 0 87 | seq_info = { 88 | "sequence_name": os.path.basename(sequence_dir), 89 | "image_filenames": image_filenames, 90 | "detections": detections, 91 | "groundtruth": groundtruth, 92 | "image_size": image_size, 93 | "min_frame_idx": min_frame_idx, 94 | "max_frame_idx": max_frame_idx, 95 | "update_ms": update_ms, 96 | "results": results 97 | } 98 | return seq_info 99 | 100 | 101 | def frame_callback(vis, frame_idx, results): # 跟踪过程 102 | 103 | print("Processing frame %05d" % frame_idx) 104 | # if frame_idx>300: 105 | frame_indices = results[:, 0].astype(np.int) 106 | mask = frame_indices == frame_idx 107 | record_trks = [] 108 | for row in results[mask]: 109 | # bbox, confidence = row[2:6], row[6] 110 | bbox, id = row[2:6], int(row[1]) 111 | record_trks.append(Track(bbox, id)) 112 | image = cv2.imread( 113 | seq_info["image_filenames"][frame_idx], cv2.IMREAD_COLOR) 114 | vis.set_image(image.copy()) 115 | vis.draw_trackers(record_trks) 116 | 117 | 118 | def create_unique_color_float(tag, hue_step=0.41): 119 | """Create a unique RGB color code for a given track id (tag). 120 | 121 | The color code is generated in HSV color space by moving along the 122 | hue angle and gradually changing the saturation. 123 | 124 | Parameters 125 | ---------- 126 | tag : int 127 | The unique target identifying tag. 128 | hue_step : float 129 | Difference between two neighboring color codes in HSV space (more 130 | specifically, the distance in hue channel). 131 | 132 | Returns 133 | ------- 134 | (float, float, float) 135 | RGB color code in range [0, 1] 136 | 137 | """ 138 | h, v = (tag * hue_step) % 1, 1. - (int(tag * hue_step) % 4) / 5. 139 | r, g, b = colorsys.hsv_to_rgb(h, 1., v) 140 | return r, g, b 141 | 142 | 143 | def create_unique_color_uchar(tag, hue_step=0.41): 144 | """Create a unique RGB color code for a given track id (tag). 145 | 146 | The color code is generated in HSV color space by moving along the 147 | hue angle and gradually changing the saturation. 148 | 149 | Parameters 150 | ---------- 151 | tag : int 152 | The unique target identifying tag. 153 | hue_step : float 154 | Difference between two neighboring color codes in HSV space (more 155 | specifically, the distance in hue channel). 156 | 157 | Returns 158 | ------- 159 | (int, int, int) 160 | RGB color code in range [0, 255] 161 | 162 | """ 163 | r, g, b = create_unique_color_float(tag, hue_step) 164 | return int(255*r), int(255*g), int(255*b) 165 | 166 | 167 | class Visualization(object): 168 | """ 169 | This class shows tracking output in an OpenCV image viewer. 170 | """ 171 | 172 | def __init__(self, seq_info, update_ms): 173 | image_shape = seq_info["image_size"][::-1] 174 | aspect_ratio = float(image_shape[1]) / image_shape[0] 175 | image_shape = 1024, int(aspect_ratio * 1024) 176 | if update_ms is None: 177 | update_ms = seq_info["update_ms"] 178 | self.viewer = ImageViewer( 179 | update_ms, image_shape, "Figure %s" % seq_info["sequence_name"]) 180 | self.viewer.thickness = 2 181 | self.frame_idx = seq_info["min_frame_idx"] 182 | self.last_idx = seq_info["max_frame_idx"] 183 | self.results = seq_info["results"] 184 | # self.detections = detections 185 | # self.iou = iou 186 | 187 | def run(self, frame_callback): 188 | self.viewer.run(lambda: self._update_fun(frame_callback)) 189 | 190 | def _update_fun(self, frame_callback): 191 | if self.frame_idx > self.last_idx: 192 | return False # Terminate 193 | frame_callback(self, self.frame_idx, self.results) 194 | self.frame_idx += 1 195 | return True 196 | 197 | def set_image(self, image): 198 | self.viewer.image = image 199 | 200 | def draw_groundtruth(self, track_ids, boxes): 201 | self.viewer.thickness = 2 202 | for track_id, box in zip(track_ids, boxes): 203 | self.viewer.color = create_unique_color_uchar(track_id) 204 | self.viewer.rectangle(*box.astype(np.int), label=str(track_id)) 205 | 206 | # def draw_detections(self, detections): 207 | # self.viewer.thickness = 2 208 | # self.viewer.color = 0, 0, 255 209 | # for i, detection in enumerate(detections): 210 | # self.viewer.rectangle(*detection.tlwh) 211 | 212 | def draw_trackers(self, tracks): 213 | self.viewer.thickness = 5 214 | for track in tracks: 215 | self.viewer.color = create_unique_color_uchar(track.track_id) 216 | self.viewer.rectangle( 217 | *track.track_bbox.astype(np.int), label=str(track.track_id)) 218 | 219 | 220 | def parse_args(): 221 | 222 | parser = argparse.ArgumentParser(description="Siamese Tracking") 223 | parser.add_argument( 224 | "--sequence_dir", help="Path to the MOTChallenge sequence directory.", 225 | default=None, required=True) 226 | parser.add_argument( 227 | "--result_file", help="Tracking output in MOTChallenge file format.", 228 | default=None, required=True) 229 | parser.add_argument( 230 | "--detection_file", help="Path to custom detections (optional).", 231 | default=None) 232 | parser.add_argument( 233 | "--update_ms", help="Time between consecutive frames in milliseconds. " 234 | "Defaults to the frame_rate specified in seqinfo.ini, if available.", 235 | default=None) 236 | return parser.parse_args() 237 | 238 | 239 | if __name__ == "__main__": 240 | args = parse_args() 241 | seq_info = gather_sequence_info(args.sequence_dir, args.detection_file, args.result_file) 242 | visualizer = Visualization(seq_info, update_ms=args.update_ms) 243 | visualizer.run(frame_callback) 244 | -------------------------------------------------------------------------------- /UMA-TEST/application_util/visualization.py: -------------------------------------------------------------------------------- 1 | # vim: expandtab:ts=4:sw=4 2 | import numpy as np 3 | import colorsys 4 | from image_viewer import ImageViewer 5 | 6 | 7 | def create_unique_color_float(tag, hue_step=0.41): 8 | """Create a unique RGB color code for a given track id (tag). 9 | 10 | The color code is generated in HSV color space by moving along the 11 | hue angle and gradually changing the saturation. 12 | 13 | Parameters 14 | ---------- 15 | tag : int 16 | The unique target identifying tag. 17 | hue_step : float 18 | Difference between two neighboring color codes in HSV space (more 19 | specifically, the distance in hue channel). 20 | 21 | Returns 22 | ------- 23 | (float, float, float) 24 | RGB color code in range [0, 1] 25 | 26 | """ 27 | h, v = (tag * hue_step) % 1, 1. - (int(tag * hue_step) % 4) / 5. 28 | r, g, b = colorsys.hsv_to_rgb(h, 1., v) 29 | return r, g, b 30 | 31 | 32 | def create_unique_color_uchar(tag, hue_step=0.41): 33 | """Create a unique RGB color code for a given track id (tag). 34 | 35 | The color code is generated in HSV color space by moving along the 36 | hue angle and gradually changing the saturation. 37 | 38 | Parameters 39 | ---------- 40 | tag : int 41 | The unique target identifying tag. 42 | hue_step : float 43 | Difference between two neighboring color codes in HSV space (more 44 | specifically, the distance in hue channel). 45 | 46 | Returns 47 | ------- 48 | (int, int, int) 49 | RGB color code in range [0, 255] 50 | 51 | """ 52 | r, g, b = create_unique_color_float(tag, hue_step) 53 | return int(255*r), int(255*g), int(255*b) 54 | 55 | 56 | class NoVisualization(object): 57 | """ 58 | A dummy visualization object that loops through all frames in a given 59 | sequence to update the tracker without performing any visualization. 60 | """ 61 | 62 | def __init__(self, seq_info, detections, iou): 63 | self.frame_idx = seq_info["min_frame_idx"] 64 | self.last_idx = seq_info["max_frame_idx"] 65 | self.detections = detections 66 | self.iou = iou 67 | 68 | def set_image(self, image): 69 | pass 70 | 71 | def draw_groundtruth(self, track_ids, boxes): 72 | pass 73 | 74 | def draw_detections(self, detections): 75 | pass 76 | 77 | def draw_trackers(self, trackers): 78 | pass 79 | 80 | def run(self, frame_callback): 81 | # while self.frame_idx <= self.last_idx: 82 | # frame_callback(self, self.frame_idx, self.detections) 83 | # self.frame_idx += 1 84 | while self.frame_idx <= self.last_idx: 85 | frame_callback(self, self.detections, self.frame_idx, self.iou) 86 | self.frame_idx += 1 87 | 88 | class Visualization(object): 89 | """ 90 | This class shows tracking output in an OpenCV image viewer. 91 | """ 92 | 93 | def __init__(self, seq_info, detections, iou, update_ms): 94 | image_shape = seq_info["image_size"][::-1] 95 | aspect_ratio = float(image_shape[1]) / image_shape[0] 96 | image_shape = 1024, int(aspect_ratio * 1024) 97 | self.viewer = ImageViewer( 98 | update_ms, image_shape, "Figure %s" % seq_info["sequence_name"]) 99 | self.viewer.thickness = 2 100 | self.frame_idx = seq_info["min_frame_idx"] 101 | self.last_idx = seq_info["max_frame_idx"] 102 | self.detections = detections 103 | self.iou = iou 104 | 105 | def run(self, frame_callback): 106 | self.viewer.run(lambda: self._update_fun(frame_callback)) 107 | 108 | def _update_fun(self, frame_callback): 109 | if self.frame_idx > self.last_idx: 110 | return False # Terminate 111 | frame_callback(self, self.detections, self.frame_idx, self.iou) 112 | self.frame_idx += 1 113 | return True 114 | 115 | def set_image(self, image): 116 | self.viewer.image = image 117 | 118 | def draw_groundtruth(self, track_ids, boxes): 119 | self.viewer.thickness = 2 120 | for track_id, box in zip(track_ids, boxes): 121 | self.viewer.color = create_unique_color_uchar(track_id) 122 | self.viewer.rectangle(*box.astype(np.int), label=str(track_id)) 123 | 124 | def draw_detections(self, detections): 125 | self.viewer.thickness = 2 126 | self.viewer.color = 0, 0, 255 127 | for i, detection in enumerate(detections): 128 | self.viewer.rectangle(*detection.tlwh) 129 | 130 | 131 | def draw_trackers(self, tracks): 132 | self.viewer.thickness = 2 133 | for track in tracks: 134 | self.viewer.color = create_unique_color_uchar(track.track_id) 135 | self.viewer.rectangle( 136 | *track.track_bbox.astype(np.int), label=str(track.track_id)) -------------------------------------------------------------------------------- /UMA-TEST/application_util/visualization.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/application_util/visualization.pyc -------------------------------------------------------------------------------- /UMA-TEST/config/__pycache__/config.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/config/__pycache__/config.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/config/__pycache__/config.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/config/__pycache__/config.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/config/config.py: -------------------------------------------------------------------------------- 1 | DATA_ROOT = '/home/junbo/datasets/MOT-Challenge/' 2 | # trained model 3 | MODEL_NAME = 'npair0.1-id0.1-se_block2' 4 | MODEL_DIR = 'models/' + MODEL_NAME 5 | # inference mode 6 | TEST_DATASET = ['MOT16', 'MOT17'][0] 7 | TEST_TYPE = ['train', 'test'][0] 8 | DETECTOR = ['DPM', 'FRCNN', 'SDP'][0] 9 | ATTENTION = [None, 'se_block'][1] 10 | DISPLAY=False 11 | # hyper-parameterc 12 | PRAM = { 13 | 'occlusion_thres': 0.8, # occlusion detection 14 | 'association_thres': 0.7, # associate with detection 15 | 'iou': 0.25, 16 | 'context_amount': 0.3, 17 | 'life_span': 10, 18 | } 19 | # save name 20 | NAME = { 21 | 'model_name': MODEL_NAME, 22 | 'save_name': '{0}_{1}-occ_{2}-ass_{3}-{4}-'.format(TEST_DATASET, TEST_TYPE, PRAM['occlusion_thres'], PRAM['association_thres'], MODEL_NAME), 23 | 'backbone': 'alexnet', 24 | 'sequences': { 25 | 'train': ['MOT16-02', 'MOT16-04', 'MOT16-05', 'MOT16-09', 'MOT16-10', 'MOT16-11', 'MOT16-13'] if TEST_DATASET == 'MOT16' else 26 | [ele+'-{}'.format(DETECTOR) for ele in ['MOT17-02', 'MOT17-04', 'MOT17-05', 'MOT17-09', 'MOT17-10', 'MOT17-11', 'MOT17-13']], 27 | 'test': ['MOT16-01', 'MOT16-03', 'MOT16-06', 'MOT16-07', 'MOT16-08', 'MOT16-12', 'MOT16-14'] if TEST_DATASET == 'MOT16' else 28 | [ele+'-{}'.format(DETECTOR) for ele in ['MOT17-01', 'MOT17-03', 'MOT17-06', 'MOT17-07', 'MOT17-08', 'MOT17-12', 'MOT17-14']] 29 | } 30 | } 31 | 32 | PATH = { 33 | 'data_dir': DATA_ROOT + ('{}/{}'.format(TEST_DATASET, TEST_TYPE) if TEST_DATASET == 'MOT16' else '{}/{}/{}'.format(TEST_DATASET, TEST_TYPE, DETECTOR)), 34 | 'det_dir': 'filtered_detections/' + ('{}-{}/'.format(TEST_DATASET, TEST_TYPE) if TEST_DATASET == 'MOT16' else '{}-{}-{}'.format(TEST_DATASET, TEST_TYPE, DETECTOR)), 35 | 'output_dir': 'outputs/{}'.format(TEST_DATASET) 36 | } 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /UMA-TEST/filtered_detections/MOT17-train-FRCNN/MOT17-09-FRCNN.txt: -------------------------------------------------------------------------------- 1 | 1,1691.7,383.5,168.9,357.1,1 2 | 1,257.7,452,103.8,257.4,1 3 | 1,1292.9,461.5,70.1,197.8,1 4 | 1,1252.1,537.6,62.2,122.3,1 5 | 2,1684.4,389,170.2,354.4,1 6 | 2,260.4,454,105.2,259,1 7 | 2,1293.1,458,72.9,203.7,1 8 | 2,1254.8,521.8,59.5,139.2,0.928 9 | 3,1681.9,381.9,171.2,362,1 10 | 3,263.7,453.1,104.9,260.4,1 11 | 3,1296,457,73.7,204.9,1 12 | 3,1260.3,517.4,53.6,143.6,0.482 13 | 4,265.5,449,105.7,264,1 14 | 4,1680,380.9,172.4,362.6,1 15 | 4,1299.7,457.3,72,204.6,1 16 | 4,1263.5,516.7,46.7,145.4,0.29 17 | 5,1678.8,385.4,172,360.3,1 18 | 5,266.6,449.5,105.7,264.4,1 19 | 5,1300.5,455.9,73.8,206.1,1 20 | 6,1679.8,387,172.1,359.1,1 21 | 6,266.3,450.2,108.7,263.3,1 22 | 6,1301.5,455.8,75.7,205.7,1 23 | 6,1266.8,519.1,51.8,141.9,0.787 24 | 7,1679.7,388.5,166,359.5,1 25 | 7,272.1,450.4,103.9,260.2,1 26 | 7,1304.6,454.5,76.6,204.5,1 27 | 7,1271,531.8,51.8,128.8,0.953 28 | 8,1680.5,390.2,165.1,359.3,1 29 | 8,273.2,446.7,103.8,265.2,1 30 | 8,1304.2,454.5,79.6,205,1 31 | 8,1275.3,533.5,52.1,128.2,0.994 32 | 9,1679.5,389.5,166.6,361.9,1 33 | 9,1306.1,454.8,79,203,1 34 | 9,276,445.3,103.4,270.4,1 35 | 9,1272.2,536.6,54,127.4,1 36 | 10,1677.7,384.6,166.1,365,1 37 | 10,1307,452.6,81.8,207.5,1 38 | 10,1,261.8,169.2,639.1,0.142 39 | 11,1675.2,382.8,169.6,367.7,1 40 | 11,1276,536.7,53.8,125.4,1 41 | 11,1308.7,450.3,84.3,211.5,1 42 | 11,1,249.3,180.4,649.2,0.282 43 | 12,1671.9,383.8,169.5,368,1 44 | 12,1309.3,452.8,84.7,206.8,1 45 | 12,1,246.6,181.5,652.7,0.596 46 | 13,1670.4,381.6,172.3,364.9,1 47 | 13,1280.1,538.6,55.8,125.1,1 48 | 13,1312.9,453.2,81.5,205.9,1 49 | 13,1,243.7,193.4,674.4,0.935 50 | 14,1666.8,377.4,176,374.5,1 51 | 14,1316.1,451.9,78.8,207.9,1 52 | 14,1,238,205,695.5,0.936 53 | 15,1663.6,377.4,173.3,379.2,1 54 | 15,1317.3,453.3,78.7,206.3,1 55 | 15,1288.3,537.2,54,128.8,1 56 | 15,1,238.1,219.7,684.9,0.743 57 | 16,1659.8,376,177.6,379.4,1 58 | 16,291.2,447.3,109.2,261.9,1 59 | 16,1319.5,453.5,77,208.5,1 60 | 16,1291,535.1,52.2,131.9,1 61 | 16,1,244.9,223.7,690.3,0.932 62 | 17,1667.6,376.5,168.7,375.5,1 63 | 17,293,448.2,108.4,262,1 64 | 17,1322.1,453.9,74.8,207,1 65 | 17,1291.2,536.3,52,130.6,1 66 | 17,1,242.8,224.3,684.2,0.98 67 | 18,1658.3,381,176.8,377.3,1 68 | 18,301.2,448.9,99.9,260.4,1 69 | 18,1324.2,454.9,75,206.8,1 70 | 18,1,224.3,224.4,706.1,0.997 71 | 19,1655.2,381.3,179.9,379.4,1 72 | 19,304.8,449.5,98.4,258.4,1 73 | 19,1294,534.2,53.2,130.9,1 74 | 19,1325,454.5,75.8,208.8,1 75 | 19,1,231.3,242,678.4,0.997 76 | 20,1642.4,373.2,187.4,386.7,1 77 | 20,309,448.7,99.1,258.7,1 78 | 20,1296.5,534.9,52.3,131.5,1 79 | 20,1327.8,455.1,73.1,208.3,1 80 | 20,1,227.1,263.4,702.2,0.998 81 | 21,1642,370.8,186,395.1,1 82 | 21,1296.9,536.1,52.2,129.4,1 83 | 21,1328.7,455.3,71.7,207,1 84 | 21,312.4,450.2,97.1,257.1,1 85 | 21,1,243.4,283.4,687.3,1 86 | 22,1641.7,371.5,183.3,394.2,1 87 | 22,1298.3,536.2,52.1,129.4,1 88 | 22,1328.1,456,72.4,206.5,1 89 | 22,314.5,454.6,94.7,254.9,1 90 | 22,1,231.9,292.7,692.3,1 91 | 23,1639.4,375.9,184.3,390.8,1 92 | 23,313.5,454,99.7,251.4,1 93 | 23,1298.8,536.7,55.5,129.4,1 94 | 23,1,229.3,315,667.4,1 95 | 23,1329.9,455.9,72.1,205.8,1 96 | 24,1636,377.1,186.8,388.8,1 97 | 24,1329.7,456,74.4,205.3,1 98 | 24,1,239.9,324,686.9,1 99 | 24,312.9,450.2,99,257,1 100 | 25,1632.8,377.8,188.4,389.3,1 101 | 25,1,231.3,348.2,665.8,1 102 | 25,1302.4,536.4,53,127.9,1 103 | 25,1330.2,454.7,74.5,208.9,1 104 | 25,312.4,446.7,101.5,262.1,1 105 | 25,1831.1,320.8,88.9,441.8,0.129 106 | 26,1628.3,381.7,189.2,389.9,1 107 | 26,1,242.5,357,675.8,1 108 | 26,1330.4,454.7,73.6,205.7,1 109 | 26,323.5,426.1,89.9,284.7,0.651 110 | 26,1826.4,320.2,93.6,441.3,0.151 111 | 27,1628.2,383.7,187.7,388,1 112 | 27,8,232.8,343.7,693.3,1 113 | 27,1330.2,454.4,74.1,205.5,1 114 | 27,317.7,427.8,97.3,284.2,0.912 115 | 27,1832.2,323.1,87.8,452.9,0.511 116 | 28,1637.1,376.7,172.2,390.3,1 117 | 28,18.5,238.6,355.2,666.9,1 118 | 28,1331.1,455,74,205.8,1 119 | 28,1822.8,317.3,97.2,451.8,0.93 120 | 29,1631.6,374.7,173.2,389.1,1 121 | 29,11.5,234.5,372.5,672.7,1 122 | 29,1331.3,455.8,73.7,205.1,1 123 | 29,1816.5,320.6,103.5,438,0.958 124 | 29,320.3,464.1,79.1,243.6,0.064 125 | 30,1629.6,371,172.1,392.9,1 126 | 30,3.8,231,400.8,670.8,1 127 | 30,1332.3,456.6,74.1,204,1 128 | 30,1305.2,538.5,53.5,126.8,1 129 | 30,1812.5,307.4,107.5,461,0.911 130 | 31,1629.3,369.3,171.8,398.6,1 131 | 31,1,223.8,417.5,677.9,1 132 | 31,1333.2,456.1,74.4,205.4,1 133 | 31,1308.2,538.4,49.3,125.6,0.999 134 | 31,1810.5,303.4,109.5,465.8,0.868 135 | 32,1627.9,371.6,175.2,400.8,1 136 | 32,1,224.5,422.2,677.7,1 137 | 32,1332.3,458.3,76,205.6,1 138 | 32,1310.3,536.5,48,127,0.985 139 | 32,1808,304,112,466.6,0.957 140 | 33,1627.8,362.4,169.8,409.7,1 141 | 33,1,230.7,435.2,667.9,1 142 | 33,1333.2,454.3,75.6,210.3,1 143 | 33,1806,306.8,114,464.1,0.991 144 | 33,1312,527.3,48.5,135.5,0.691 145 | 34,1,229.4,449.3,667.8,1 146 | 34,1624.1,361.5,172.4,412.4,1 147 | 34,1333.7,453.9,75.5,212.1,1 148 | 34,1802.2,302.1,117.8,468.6,0.984 149 | 35,1,232.1,457.6,668.7,1 150 | 35,1617.3,362.5,176.6,415.7,1 151 | 35,1334.9,453,76.3,215.1,1 152 | 35,1796.7,302.5,123.3,471.9,0.994 153 | 36,1620.1,369.4,168.8,404.3,1 154 | 36,1,233.6,464.8,670,1 155 | 36,1335.2,454.2,75.1,214.8,1 156 | 36,1796.5,297.9,123.5,477.8,0.99 157 | 37,1616.5,367.6,173.2,410.4,1 158 | 37,19.3,226.7,452.6,670.9,1 159 | 37,1335.4,454.7,75.8,214.1,1 160 | 37,1793.8,303,126.2,474.7,0.992 161 | 38,1615,368,170.9,411.4,1 162 | 38,27.8,246.2,472.1,652.4,1 163 | 38,1335.3,454.5,76.2,214.4,1 164 | 38,1792.8,304.6,127.2,474.6,0.997 165 | 39,1609.7,367.3,180.9,420.1,1 166 | 39,52.2,245.6,437.5,655.2,1 167 | 39,1335.6,454.8,76.9,214.7,1 168 | 39,1790.8,305.5,129.2,476.7,0.998 169 | 40,1611.2,367.1,177.2,420.6,1 170 | 40,1337,455.4,77,213.3,1 171 | 40,79,243,433,657,1 172 | 40,1788.5,306.5,131.5,474.9,0.998 173 | 41,1610.7,368.9,177.8,421.9,1 174 | 41,1337.7,455.6,77.1,212.8,1 175 | 41,129.9,253.1,381.9,639.3,1 176 | 41,1788.6,309.4,131.4,472.1,0.998 177 | 42,1604.8,369.5,183.3,422.7,1 178 | 42,1337.8,455.7,77.9,212.3,1 179 | 42,157.7,249.4,361.5,642.2,1 180 | 42,1786.4,309.7,133.6,472.7,0.998 181 | 43,1599.4,365.4,184.2,425.4,1 182 | 43,1338.5,456.4,78,211.3,1 183 | 43,200,237.7,330,660.4,1 184 | 43,1780.9,310.7,139.1,473.1,0.998 185 | 44,1338.7,456.3,78.2,211.2,1 186 | 44,1604,364.8,178.4,422.5,1 187 | 44,234.9,251.1,301,645.8,1 188 | 44,1782.7,311.3,137.3,479.8,0.999 189 | 45,1596.6,362.4,184.6,426,1 190 | 45,1339.2,456.3,78.9,211.5,1 191 | 45,272,244.3,271.3,632.1,1 192 | 45,1780.5,308.7,139.5,482.2,1 193 | 46,1591.8,359.1,192.5,430.5,1 194 | 46,1339.4,456,79.2,212,1 195 | 46,285.6,243.4,282.3,624.1,1 196 | 46,1781.3,304.5,138.7,488.8,1 197 | 47,1593.1,363.3,187,433.6,1 198 | 47,1340,455.9,79.5,212.2,1 199 | 47,297.2,251,284.4,618.6,1 200 | 47,1780.4,301.1,139.6,488.6,1 201 | 48,1586.9,351.7,186.8,436.7,1 202 | 48,1340.3,455.7,79.2,212,1 203 | 48,309.4,245.9,299.5,615.5,1 204 | 48,1780.5,298.5,139.5,491.9,0.999 205 | 49,1581.3,359.2,193.2,432.9,1 206 | 49,1338.9,457.2,80.9,211.2,1 207 | 49,327.4,259.1,303.4,602.9,1 208 | 49,1779.4,293.5,140.6,500,0.999 209 | 50,1576.7,355.8,195.9,439.3,1 210 | 50,1340.6,455.5,79.9,212.7,1 211 | 50,342.6,254.5,319,609.1,1 212 | 50,1778,288.9,142,510,1 213 | 51,361.6,259.3,319.9,618.8,1 214 | 51,1340.6,455.3,80.2,212.6,1 215 | 51,1581.5,351.1,188.8,444.2,1 216 | 51,1776.9,286.2,143.1,515,1 217 | 52,371.1,254,320.9,622.2,1 218 | 52,1340.9,455.4,80.2,212.8,1 219 | 52,1577,356,189.7,445.4,1 220 | 52,1774.4,287.7,145.6,512.2,1 221 | 53,381.5,262.1,328.3,605.2,1 222 | 53,1341.3,455.4,79.7,212.5,1 223 | 53,1561.8,353,207,448.5,1 224 | 53,1772.5,286.4,147.5,516.3,1 225 | 54,387.5,264.3,333.8,597.6,1 226 | 54,1341.2,455.1,79.9,213.3,1 227 | 54,1567.3,358.6,197.4,449.1,1 228 | 54,1770.5,285.6,149.5,519.3,1 229 | 55,407.9,258.1,332.1,598.5,1 230 | 55,1341.4,455.1,80,213.3,1 231 | 55,1561.9,362,197.2,440.6,1 232 | 55,1769.7,283.6,150.3,521.1,1 233 | 56,1341.3,455.3,79.7,212.9,1 234 | 56,431,265.7,307.3,592.5,1 235 | 56,1558.9,361.1,196.7,445.5,1 236 | 56,1768.3,283,151.7,525.9,1 237 | 56,381.9,414.6,110.7,310.4,0.834 238 | 57,1341.5,455.1,79.8,213.1,1 239 | 57,456.6,259.6,291.6,597.8,1 240 | 57,1552.6,365.5,204.5,445,1 241 | 57,1764.5,285.4,155.5,525.2,1 242 | 57,378.1,438,118.8,275.1,1 243 | 58,1341.4,455.3,79.8,212.6,1 244 | 58,1540.3,360.6,205,446.5,1 245 | 58,486.4,264.4,265.1,580.7,1 246 | 58,1758.7,284.5,161.3,527.4,1 247 | 58,373.9,441.2,115.8,269.3,1 248 | 59,1341.3,455.2,80.3,214.1,1 249 | 59,512.6,251.3,244.6,587.3,1 250 | 59,1532.7,354.4,208.8,454.5,1 251 | 59,1753.4,288,166.6,523.5,1 252 | 59,371.8,436.8,119.9,274.4,1 253 | 60,1531,359.1,200.5,445,1 254 | 60,1341.3,455.2,80,213.2,1 255 | 60,534.8,268,243,556.4,1 256 | 60,1744.1,295.6,175.9,524.8,1 257 | 60,369.3,436,120.1,273.9,1 258 | 61,546.5,260.9,250.4,576,1 259 | 61,1742.8,283.7,177.2,536.2,1 260 | 61,1341.1,455.2,80.2,213.8,1 261 | 61,1520.2,345.8,210.9,463,1 262 | 61,370.7,435.9,120.3,271.7,1 263 | 62,1520.5,340.3,207.5,462.8,1 264 | 62,563.2,246.3,256.1,591.9,1 265 | 62,1341.2,455.1,80.2,213.5,1 266 | 62,1746.2,283.1,173.8,535.1,1 267 | 62,376.6,433.3,116.1,274.4,1 268 | 62,203.8,468.2,97,237.4,0.998 269 | 63,1508.2,341.4,213.6,471,1 270 | 63,576.6,263.8,268.4,565.7,1 271 | 63,1341.2,455.6,79.4,213,1 272 | 63,1744.5,282.1,175.5,535.7,1 273 | 63,384.7,433.6,110.9,271.3,1 274 | 63,202.8,464,100.4,241.5,0.999 275 | 64,1506.7,341,210.5,474,1 276 | 64,587.2,268.2,276.1,563.8,1 277 | 64,393.6,444.5,102.3,263,1 278 | 64,1341.3,455.2,79.7,213.4,1 279 | 64,1737.8,279.5,182.2,545.6,1 280 | 64,207.2,464.4,96.3,237.1,0.999 281 | 65,1500.7,340.2,212.5,474.5,1 282 | 65,1731.8,276.6,188.2,550.3,1 283 | 65,1341.4,455.2,79.6,213.4,1 284 | 65,608,272.7,277.3,563.8,1 285 | 65,398.8,432.9,105,276.6,1 286 | 65,211.1,468,95,237.5,0.999 287 | 66,1729.2,273.9,190.8,551.9,1 288 | 66,1505.1,341.6,209.3,477.7,1 289 | 66,614,281.3,284.3,549.6,1 290 | 66,1341.3,455.8,79.4,212.2,1 291 | 66,402.6,435.1,103.6,273.6,1 292 | 66,219.2,468.7,94,239,0.999 293 | 67,1726.2,273,193.8,556.1,1 294 | 67,629.8,275.8,280.7,559.9,1 295 | 67,1341.2,455.8,79.7,212.6,1 296 | 67,1507.2,339.7,205,480.6,1 297 | 67,402.7,432.6,108.6,277.1,1 298 | 67,224,469.9,94.5,238.7,1 299 | 68,407.5,439.7,109.1,268.4,1 300 | 68,1718.2,271,201.8,561.6,1 301 | 68,1341.4,455.7,79.3,211.9,1 302 | 68,1504.2,341.6,203.4,475.5,1 303 | 68,648.5,283.8,270.6,539.8,1 304 | 68,234.5,474.8,93.8,235.4,1 305 | 69,406.4,432.4,118.1,272.9,1 306 | 69,1718.7,266.2,201.3,569.2,1 307 | 69,666.6,277.4,257.8,548.8,1 308 | 69,1341.3,455.7,79.6,212.4,1 309 | 69,1506.2,343.2,200.7,472.8,1 310 | 69,239.4,476.2,92.2,235.5,1 311 | 70,407.7,431.2,122.1,276.1,1 312 | 70,1341.3,455.6,80.1,212.4,1 313 | 70,685.3,276,253.2,543.5,1 314 | 70,1712.2,262.1,207.8,574.4,1 315 | 70,1509.2,341.1,197.4,487.1,1 316 | 70,243.7,473.8,94.1,242.1,1 317 | 71,410.5,434.2,118.4,266.5,1 318 | 71,702.6,278.7,246.6,546.1,1 319 | 71,1709.8,270.2,207.8,563.2,1 320 | 71,1341,455.6,80.2,212.4,1 321 | 71,245.2,473.1,91.8,243.4,1 322 | 71,1509.1,341.1,198.2,484.2,1 323 | 72,412.7,434.8,118.3,271.6,1 324 | 72,713.5,284.3,238.1,534.7,1 325 | 72,1710.7,266.3,206,564.9,1 326 | 72,1338.9,457.1,81.3,211,1 327 | 72,247,473,92.3,243.3,1 328 | 72,1509.3,341.4,198.9,489.9,1 329 | 73,741.7,275.5,216.3,544,1 330 | 73,413.6,437.1,115.6,269.4,1 331 | 73,1706.1,268.5,208,564.3,1 332 | 73,1500.8,343.7,199.6,488.3,1 333 | 73,1339,457.1,81.1,210.9,1 334 | 73,248.7,471.6,89.4,241.1,1 335 | 74,756.2,273,208.3,546.2,1 336 | 74,1704.6,266.3,205.6,570.6,1 337 | 74,415.2,436,115.7,273.5,1 338 | 74,1338.9,457,81.3,211.1,1 339 | 74,1496.4,339.8,197.3,497.2,1 340 | 74,249.8,471.3,91.1,240.8,1 341 | 75,773.3,273,201.7,536.8,1 342 | 75,1339.3,457.3,81.2,210.7,1 343 | 75,1697.7,262.3,211.7,576.8,1 344 | 75,413.6,432.5,118.9,274.7,1 345 | 75,1484.4,338,209,491.9,1 346 | 75,250.6,473.8,93.2,238,1 347 | 76,780.6,277.8,203.4,531.7,1 348 | 76,1481.7,333.7,214.6,498.9,1 349 | 76,1339.1,457,81.4,211.2,1 350 | 76,415.9,429.2,117.8,278.5,1 351 | 76,1694.6,264,212.3,574.5,1 352 | 76,253,470.4,94.4,241.9,1 353 | 77,1470.5,335.6,221.7,495,1 354 | 77,1693.6,264.9,207.4,578.4,1 355 | 77,792.7,280.7,211.3,529.9,1 356 | 77,1338.8,457.4,81.5,210.6,1 357 | 77,415.9,429.5,117.5,277.6,1 358 | 77,255.8,471.5,91.7,238.9,1 359 | 78,1692,266.3,209.7,578.4,1 360 | 78,800.5,290.7,228.8,519.7,1 361 | 78,416.4,429.8,116.4,278.8,1 362 | 78,1340.2,455.7,80.6,212.3,1 363 | 78,1463.2,332.3,230.1,494.5,1 364 | 78,255.5,466.6,96.4,242.5,1 365 | 79,807.3,290.3,249.7,512.4,1 366 | 79,1458.9,328.2,223.3,501.8,1 367 | 79,1688.8,261,211.6,588,1 368 | 79,418.7,427.3,114.5,281.9,1 369 | 79,1337.8,458,82.8,209,1 370 | 79,254.2,466,100,244.3,1 371 | 80,814,307.6,260.2,482.6,1 372 | 80,1686.8,269.5,209,579.7,1 373 | 80,1452.7,325.1,229.2,511.6,1 374 | 80,1338.5,457.1,81.6,210.2,1 375 | 80,424.6,427.7,112.4,282.1,1 376 | 80,258,467.9,104.5,242.2,1 377 | 81,816.6,294.8,270,503.2,1 378 | 81,1445.3,315.7,234.9,526.6,1 379 | 81,1682.1,262.7,211.3,593.9,1 380 | 81,1338.3,456.8,82.5,209.5,1 381 | 81,426.9,426.4,112.9,282.1,1 382 | 81,264.4,467.4,104,243.1,1 383 | 81,1895.9,498.4,23.9,102.2,0.071 384 | 82,1680.9,260.4,210,595.1,1 385 | 82,1434.6,314.8,243.7,528.4,1 386 | 82,834.9,293.6,256.9,500.7,1 387 | 82,428.3,423.7,112,287.6,1 388 | 82,1337.9,457,82.7,210.1,1 389 | 82,269.6,463.7,106.3,248.9,1 390 | 82,1898.4,495.6,21.6,106.9,0.067 391 | 83,862,297.9,232.5,499.8,1 392 | 83,1430.2,316.6,245.3,521.7,1 393 | 83,1677.7,264.8,212.2,597.9,1 394 | 83,435.7,425.7,105.5,285.8,1 395 | 83,1339.8,455.1,80.8,212.6,1 396 | 83,276.6,460.6,112.7,250.1,1 397 | 84,1678.3,255.3,209.8,604.3,1 398 | 84,1423.5,317.4,248.2,527.3,1 399 | 84,876.5,295.5,226.2,501.6,1 400 | 84,439.6,429.7,102.6,282.2,1 401 | 84,279.5,462.3,113.5,250.1,1 402 | 84,1339.8,454.7,80.4,213.5,1 403 | 85,906.6,301.2,197.9,489,1 404 | 85,1677.3,258,205.4,602.9,1 405 | 85,1418.3,331.6,253.7,502.7,1 406 | 85,442.2,429.2,105.7,282.8,1 407 | 85,287.9,460.7,107,251.4,1 408 | 85,1339.8,454.9,80.2,213.5,1 409 | 86,927.3,296.4,185.5,496.5,1 410 | 86,1670.8,250.8,214.2,607.1,1 411 | 86,1410.1,329.8,249.1,505.4,1 412 | 86,442.8,427.4,113.3,280.9,1 413 | 86,290.9,462.1,105,252.9,1 414 | 86,1339.5,454.7,80.5,214,1 415 | 87,933.7,292.1,190.8,496.8,1 416 | 87,1402.7,331,255.5,510.7,1 417 | 87,1669.6,248.2,217.2,604.7,1 418 | 87,446.3,423.1,113.5,291,1 419 | 87,298.5,463,100.7,249.6,1 420 | 87,1339.3,455.1,80.7,214.1,1 421 | 88,936.9,298.3,203.9,481.3,1 422 | 88,1400.5,335.9,249.5,507.1,1 423 | 88,1669.2,249.1,215.7,607.9,1 424 | 88,445.5,425.1,121,283.4,1 425 | 88,303.7,459.4,96.7,250.9,1 426 | 88,1340.4,454.9,81,213.7,0.999 427 | 89,940,301.5,209.5,476.1,1 428 | 89,1665.6,241.1,222.7,620.3,1 429 | 89,446.1,426.2,126.2,283.5,1 430 | 89,1397.4,331.7,252.6,521,1 431 | 89,306.1,460.6,100.1,252.1,1 432 | 89,1340.4,456.3,80.6,210.7,0.998 433 | 90,949.9,301.4,217.9,476,1 434 | 90,1658.7,240.1,226.7,620.6,1 435 | 90,1387.1,320.6,246.3,548,1 436 | 90,309.2,458.6,101.3,253.4,1 437 | 90,451.6,421.4,122,292.9,1 438 | 90,1340.1,456.3,78.9,208.7,0.984 439 | 91,949,307.7,238.3,473.3,1 440 | 91,1654.7,240.2,228.5,626.3,1 441 | 91,1383.5,325.3,250,544.4,1 442 | 91,309.6,459.8,102.3,252.3,1 443 | 91,452.1,422.8,119.7,293.4,1 444 | 91,1338.7,454.2,79.7,211.9,0.839 445 | 92,952,313.3,237.9,461,1 446 | 92,1382,319.6,245.7,552.9,1 447 | 92,1651.7,247.7,227.4,617.4,1 448 | 92,309.9,461.3,101.7,253,1 449 | 92,455.1,425.1,112.5,292.4,1 450 | 92,1341.1,452.8,75.3,207.2,0.054 451 | 93,963.1,312,241.3,463.5,1 452 | 93,1382.2,322.6,241.7,550,1 453 | 93,1633.4,243.2,242.6,637,1 454 | 93,458.7,425,108.3,294.2,1 455 | 93,314.9,464,97.1,253.8,1 456 | 94,972.4,315.8,237.7,462.3,1 457 | 94,1377.8,321.5,237.3,541.8,1 458 | 94,1633.5,242.1,243.9,638.3,1 459 | 94,315.8,467,98.1,245.7,1 460 | 94,459.8,424.8,110,295.7,1 461 | 95,987.4,318.5,227.1,449.7,1 462 | 95,1373.4,319.9,238.5,547.6,1 463 | 95,1628.6,240.3,242.7,638,1 464 | 95,463,423.1,108.9,296.1,1 465 | 95,313.7,456.2,103.4,257.8,1 466 | 96,1010.7,316.3,217.3,451.9,1 467 | 96,1613.6,249.5,252.3,639.1,1 468 | 96,1369.9,314.6,233.8,560.1,1 469 | 96,459.4,421.9,115.5,295.3,1 470 | 96,315.7,455.5,105.8,257.4,1 471 | 97,1017.4,315,216.6,448.2,1 472 | 97,1367.5,332.8,233.3,535,1 473 | 97,455.9,416.5,124.4,299.9,1 474 | 97,1615,227.8,245.3,667.9,1 475 | 97,319.2,458.4,101.9,257,1 476 | 98,1037.7,313.5,205.3,443.6,1 477 | 98,319.4,461.8,102.1,252.1,1 478 | 98,1608.1,231.4,244.9,650.9,1 479 | 98,457.1,416.6,126.9,303.4,1 480 | 98,1366.1,311.5,225.5,571.4,1 481 | 98,1351.8,464.7,74.2,202.5,0.057 482 | 99,1045.2,310.9,201,446.5,1 483 | 99,457.7,418.1,127.7,303.4,1 484 | 99,1607.1,228,240.4,651,1 485 | 99,320.3,453.3,101.4,263.6,1 486 | 99,1366.7,305.4,214.2,579.5,1 487 | 100,1061.4,310.2,186.3,447.8,1 488 | 100,459.8,419.6,124.1,296.1,1 489 | 100,1358,314.9,228.7,575.2,1 490 | 100,322.1,459.9,99.1,255.2,1 491 | 100,1600.6,222.6,247.6,672.5,1 492 | 101,457,419,128.2,294.5,1 493 | 101,1588.6,230.5,250.6,663,1 494 | 101,1076.5,310.5,182.9,447.6,1 495 | 101,1355.9,314.1,223.3,568.6,1 496 | 101,323.9,446.5,101.6,269.4,1 497 | 102,1081.7,311.8,185.7,441.5,1 498 | 102,1585.8,218.3,250.9,676.3,1 499 | 102,1351.2,314.5,224.3,569.3,1 500 | 102,457.9,418.4,125.2,294.8,1 501 | 102,326.5,441.1,101.5,275.4,1 502 | 103,457.7,417.3,127.6,298.6,1 503 | 103,1090.2,312.8,189.8,440.4,1 504 | 103,1348.8,317.2,221.4,578.3,1 505 | 103,327.9,443.5,99.7,273.5,1 506 | 103,1583.4,216.7,238.1,672.8,1 507 | 104,457.7,416.4,127.4,299.8,1 508 | 104,1094.6,317.7,193.7,442.7,1 509 | 104,1577.2,231.2,238.7,668.2,1 510 | 104,328.8,449.7,97.6,265.1,1 511 | 104,1331.5,306,232.8,592.8,1 512 | 105,457.4,418.9,126.9,307.5,1 513 | 105,1102.9,324.8,191.4,430.3,1 514 | 105,1574.8,229,241.9,683.1,1 515 | 105,1336,310.6,225.6,583.4,1 516 | 105,328.7,449.8,98.3,266.3,1 517 | 106,1571,227.4,236.9,685.5,1 518 | 106,458.2,416.8,129,305.9,1 519 | 106,1106,323.3,205.9,429.8,1 520 | 106,1323.7,312.6,242.3,593.3,1 521 | 106,333.5,447.4,97.6,271.4,1 522 | 107,1568.2,225.7,234.3,689,1 523 | 107,336.3,449.9,95.1,267.9,1 524 | 107,459,419.8,126.2,297.4,1 525 | 107,1121,328.8,189,419.4,1 526 | 107,1317.8,317.6,243.1,581.2,1 527 | 108,1562.3,221.8,231.8,684.6,1 528 | 108,461.1,420.1,124.1,297.4,1 529 | 108,1129.3,336,187.8,416.7,1 530 | 108,342.3,453.3,91.6,263.5,1 531 | 108,1311.3,301.4,233.7,598.5,1 532 | 109,1559.9,223.3,230.9,688.4,1 533 | 109,1297.4,304.4,247.6,604.3,1 534 | 109,343.1,452.8,92.2,266.3,1 535 | 109,460.3,414.5,127.4,308,1 536 | 109,1134.4,332.7,190.2,404.2,1 537 | 110,343.8,449.2,96,272.6,1 538 | 110,462.8,420.3,122.7,298.3,1 539 | 110,1549.4,223.1,234.5,696.9,1 540 | 110,1297.7,301.9,243.5,606,1 541 | 110,1145.7,328.2,182.8,411.2,1 542 | 111,345.5,451.2,92.8,270.2,1 543 | 111,461.2,418.1,123.3,304.2,1 544 | 111,1548.8,210.8,236,711.8,1 545 | 111,1291.1,297.7,246.3,607.5,1 546 | 111,1152,326.1,179.4,409.6,1 547 | 112,1537.6,218,239.3,724.9,1 548 | 112,461.1,414.2,121.2,307.8,1 549 | 112,348.1,447.1,89.5,273.2,1 550 | 112,1287,298.6,236.8,605.4,1 551 | 112,1155,322.1,180.7,418.3,1 552 | 113,456.4,410,122.9,312,1 553 | 113,1281.3,298.5,242.5,612.7,1 554 | 113,1532.3,218.3,230.8,716.7,1 555 | 113,347.6,445.1,93.9,274.6,1 556 | 113,1165.8,326.8,171.2,408,0.999 557 | 114,460.1,406.2,118.7,316.7,1 558 | 114,1527.1,209,239.6,741.4,1 559 | 114,1263.6,294.1,264.8,625.8,1 560 | 114,347.7,441.2,93.2,278.5,1 561 | 114,1183.8,336.5,138.9,388.4,0.571 562 | 115,1256.8,279.1,251.5,634.5,1 563 | 115,456.3,409.4,120,319.3,1 564 | 115,348.6,441.2,92,280.4,1 565 | 115,1519.5,213,241.9,731.9,1 566 | 116,1251.4,304.6,257.5,617.2,1 567 | 116,458.4,405.8,115.1,313.7,1 568 | 116,1509.2,207.7,240.9,735.9,1 569 | 116,347.5,437.3,95.2,286.8,1 570 | 117,1241.4,290.7,260,622.6,1 571 | 117,459.4,405.7,114.7,313.3,1 572 | 117,346.1,441.6,93.9,284.9,1 573 | 117,1507.9,219.8,240.3,725,1 574 | 118,1223.7,279.8,261.9,653.8,1 575 | 118,1499.7,197.5,251.6,752.9,1 576 | 118,457.1,405.2,118.6,314.8,1 577 | 118,344.7,439.6,95.7,289.9,1 578 | 119,1491.3,201,248.2,752.9,1 579 | 119,1208.1,309.4,280.1,626.1,1 580 | 119,456.5,404.7,119.3,326.7,1 581 | 119,344,440.5,96.7,289.1,1 582 | 120,1204.9,284.8,270.2,649.7,1 583 | 120,454.3,406.4,124.5,312.6,1 584 | 120,1489,183.1,255.5,771.2,1 585 | 120,344.9,441.8,95.9,289.7,1 586 | 121,1187.1,294.6,279.7,647.3,1 587 | 121,1480.5,177.8,261.1,780.6,1 588 | 121,454.1,404.3,122.6,323.6,1 589 | 121,344.8,441.3,95.7,291.3,1 590 | 122,1167.7,289,293.8,662.3,1 591 | 122,1467.2,186.7,258.2,763.2,1 592 | 122,453.1,406.4,122.7,322,1 593 | 122,340.1,438.9,96.5,296.3,1 594 | 123,1157.5,280.4,296,667.6,1 595 | 123,1459,182.1,270.1,769,1 596 | 123,453.1,407.4,118.4,321,1 597 | 123,336.6,437.6,99,298.2,1 598 | 124,1144.6,280.4,303.7,674.8,1 599 | 124,1460.8,176.4,266.2,783.6,1 600 | 124,336.3,437.4,100.7,298.7,1 601 | 124,451.2,407.2,118,321.1,1 602 | 125,1141.6,274,299.6,686.4,1 603 | 125,1455.2,173.7,269.5,785.5,1 604 | 125,330.4,431.7,108.6,303,1 605 | 125,450,407.6,119.4,322.4,1 606 | 126,1434.9,146.8,288.2,816.2,1 607 | 126,1137.8,271.8,292,693.4,1 608 | 126,332.3,434.7,108.2,300.4,1 609 | 126,451.4,409.6,116.5,316.1,1 610 | 127,1132.5,267.7,284.4,690.1,1 611 | 127,1426.7,176.9,290.6,786.4,1 612 | 127,330.5,435.7,109.8,299.6,1 613 | 127,451.2,409.5,116.5,319.1,1 614 | 128,1421.5,163.8,277.6,810.8,1 615 | 128,1124.9,267.2,289.3,701.2,1 616 | 128,324.7,428.6,115.2,304.7,1 617 | 128,453,405.5,116.1,326.1,1 618 | 129,1409.7,190,291.2,783.4,1 619 | 129,1118.8,256.9,282.2,717.9,1 620 | 129,325.7,432.6,112.4,304.1,1 621 | 129,453,402.6,117.3,328.4,1 622 | 130,1402.2,185.5,292.8,789.9,1 623 | 130,1128.3,263.5,262.9,716.7,1 624 | 130,321.7,429.1,116.6,307.6,1 625 | 130,451.4,399.3,118.9,330.3,1 626 | 131,1397.4,172.1,289.6,804.9,1 627 | 131,1118.8,273.9,260.6,703.1,1 628 | 131,316.4,429.3,121.1,308.7,1 629 | 131,454.8,400.3,113,334.8,1 630 | 132,1381.4,166.9,296.3,822.4,1 631 | 132,1119.3,287.8,253.2,695.8,1 632 | 132,316.5,430.1,122.5,304.7,1 633 | 132,454.1,397.4,113.5,339.1,1 634 | 133,1093.6,281.6,280,707.6,1 635 | 133,1374.7,174.8,292.5,819.6,1 636 | 133,318.4,428.5,122.5,313.4,1 637 | 133,450.2,395.7,118.3,337.1,1 638 | 134,1370.2,170.2,287.5,804.6,1 639 | 134,1092.9,277.4,280.4,706.4,1 640 | 134,318.2,433.3,119.8,302.9,1 641 | 134,448.2,392.9,124.8,337.2,1 642 | 135,1362.6,163.7,287.5,824.3,1 643 | 135,1074.5,279.5,289.6,717,1 644 | 135,319.7,430.2,119.9,307.9,1 645 | 135,449.3,392.5,125.8,337.7,1 646 | 136,1347.9,159.9,300.5,821.9,1 647 | 136,1061.4,273.7,290.6,729.1,1 648 | 136,446.6,394,131.9,337.1,1 649 | 136,324.7,424.1,118.3,320.1,1 650 | 137,1048.9,255,295.2,758,1 651 | 137,1341.4,151.1,299.2,837.9,1 652 | 137,447.6,393.2,132,338.8,1 653 | 137,325.6,423.1,117,320.6,1 654 | 138,1329,137.9,304.3,858.2,1 655 | 138,1039.5,238.5,291,783.5,1 656 | 138,322.2,421.3,120.2,324.7,1 657 | 138,444.4,389.6,134.2,352.7,1 658 | 138,3.9,270.4,166.9,668.6,0.987 659 | 139,1022.9,237.2,308.6,779.8,1 660 | 139,1315.6,145.9,311.3,849.9,1 661 | 139,445.4,396.8,131.6,341.5,1 662 | 139,321.1,421.9,122,322,1 663 | 139,3.3,290.1,190.9,662.4,0.999 664 | 140,1009.8,239.2,304.5,780.9,1 665 | 140,1302.8,136.9,317,881.5,1 666 | 140,445,398.2,129.9,340.7,1 667 | 140,321.4,422.2,122.5,322.1,1 668 | 140,9.2,269,207.6,667.2,0.999 669 | 141,1300.7,133.6,312.8,861.7,1 670 | 141,986.2,244.2,334.5,775.4,1 671 | 141,447.6,399.4,125.5,341.6,1 672 | 141,323.2,421.7,120.3,323.1,1 673 | 141,6.4,271.3,209.4,656.1,0.999 674 | 142,1296.1,129.4,307.6,870.1,1 675 | 142,978.6,235.3,326.9,779.3,1 676 | 142,444.1,398.4,131.1,341.5,1 677 | 142,320.1,421,122.7,324.4,1 678 | 142,6.2,271.2,219.1,677.6,0.999 679 | 143,1288.4,129.8,304.8,879.7,1 680 | 143,977.1,218.8,341.3,825.2,1 681 | 143,443.3,398.1,129.7,345.3,1 682 | 143,323.3,420.9,119,326,1 683 | 143,1.6,269.8,217.4,698.9,1 684 | 144,961.4,231,335.9,815.5,1 685 | 144,1280.2,131.5,300.8,896.9,1 686 | 144,443.2,397.8,130.6,348.9,1 687 | 144,1,269,231.6,686.8,1 688 | 144,322.8,419.2,119.5,331.6,1 689 | 145,942.8,214,349.2,838.7,1 690 | 145,1264.4,138.3,308.3,887.5,1 691 | 145,439.6,397.7,134.9,342.3,1 692 | 145,320,419.3,122.4,333.4,1 693 | 145,7.2,268.1,236.7,684.5,1 694 | 146,929.2,230.4,352.4,818.8,1 695 | 146,443.1,394.7,135.7,350.2,1 696 | 146,1254.4,123.9,324.1,912.6,1 697 | 146,24.3,272.3,231.3,673.1,1 698 | 146,319.2,423.1,120.6,331.9,0.999 699 | 147,929.9,215,336.3,845.7,1 700 | 147,442.8,388.5,138.6,362,1 701 | 147,1247.4,143.4,320.5,900.6,1 702 | 147,42.9,281.5,229.6,650.2,1 703 | 147,312.8,415.8,126.9,337.2,0.999 704 | 148,912.5,225.2,350,838.8,1 705 | 148,1234.1,125.7,328,954.3,1 706 | 148,441.6,388.8,142.5,363.9,1 707 | 148,59,289.8,250.2,634.1,1 708 | 148,305.6,418,130.7,341.4,1 709 | 149,1233.5,115.1,324.3,949.9,1 710 | 149,440.6,390.5,143.6,363.7,1 711 | 149,913.1,214.1,335.1,851,1 712 | 149,69,284.5,276.6,645.5,1 713 | 149,305.9,414.2,128.8,339.3,0.998 714 | 150,893.4,222.5,346.4,839,1 715 | 150,1231.5,125.6,318.7,954.4,1 716 | 150,440.2,389,146.7,366.6,1 717 | 150,65.5,277.4,330.1,659.4,1 718 | 150,302.9,413.8,128,343.2,0.984 719 | 151,1216.2,128.7,321,951.3,1 720 | 151,442.7,386.1,141.9,367.8,1 721 | 151,890.1,225.4,339.5,854.6,1 722 | 151,79.8,286.9,347.3,628.7,1 723 | 151,305.1,409.8,126.3,347.9,0.484 724 | 152,873.3,227.5,344.6,846.6,1 725 | 152,1204.9,126.6,329.7,942.7,1 726 | 152,447.6,385.3,138,369.4,1 727 | 152,82.6,299.4,357.6,616.2,1 728 | 153,1204.4,91.4,327.4,968.1,1 729 | 153,859.2,213.5,346.8,866.5,1 730 | 153,449.1,382.6,141.3,372.1,1 731 | 153,110.7,301.6,360.6,606.7,1 732 | 154,1190.6,87.6,342.8,992.4,1 733 | 154,447.2,381.7,145.3,371.2,1 734 | 154,848.9,209,355.6,871,1 735 | 154,131.4,297.3,351.1,615.5,1 736 | 155,1178.5,82.2,352.8,995.9,1 737 | 155,447.3,380.6,146.5,376.4,1 738 | 155,818.2,205,375.2,875,1 739 | 155,144.9,293.9,331.6,618.4,1 740 | 156,1166.1,68.9,354.5,1001.7,1 741 | 156,793.5,195.2,387.9,884.8,1 742 | 156,448.9,389.8,145.6,370.9,1 743 | 156,146.5,291.4,338.9,615.6,1 744 | 156,1460.7,363.6,133.1,322.5,0.726 745 | 157,1157.7,79.2,352.8,1000.8,1 746 | 157,797.3,186.3,362.8,893.7,1 747 | 157,451.4,378.8,148.7,387.9,1 748 | 157,1466.9,365.4,136.6,319.1,0.999 749 | 157,191.7,297.5,284.5,611.9,0.999 750 | 158,788.7,202.7,358.7,877.3,1 751 | 158,1142.1,78.8,364.5,1001.2,1 752 | 158,449.9,386.9,149,381.6,1 753 | 158,1464.9,370.2,145.9,306.6,0.999 754 | 158,245.5,292,239.5,621.1,0.999 755 | 159,784.2,201.9,352.9,878.1,1 756 | 159,1130.1,51.7,375.1,1023,1 757 | 159,457.1,386.1,146.2,379.1,1 758 | 159,1476.1,371.4,136.4,306.2,1 759 | 159,268.1,292.2,211.5,608.7,1 760 | 160,779.2,179.7,342.9,900.3,1 761 | 160,1129.2,87.1,367.5,992.9,1 762 | 160,1479.9,367.9,134,309.8,1 763 | 160,460.6,374.9,144.1,391.9,0.999 764 | 160,292.3,295.7,200.4,594.8,0.999 765 | 161,1109.9,66.1,373.4,1013.9,1 766 | 161,764.6,191.6,349.2,888.4,1 767 | 161,1481.4,368.8,138.6,300.8,1 768 | 161,324.1,294.1,198.9,598.8,1 769 | 161,473.9,383.4,139.3,386.3,0.996 770 | 162,1103.9,39.1,383.5,1040.9,1 771 | 162,758.7,177.6,337.8,902.4,1 772 | 162,1493.1,369.5,130.2,306.2,1 773 | 162,334.7,296.7,208.6,600,1 774 | 162,477.5,382.2,126.6,402.1,0.514 775 | 163,1092.7,27.5,383.7,1052.5,1 776 | 163,1497.1,367.1,132.2,311.7,1 777 | 163,738.7,182.1,348.7,897.9,1 778 | 163,349.7,299.5,213.1,593.7,1 779 | 163,483.7,369.9,137,429,0.124 780 | 164,1071.9,34.6,392.4,1045.4,1 781 | 164,1501.4,370.4,129.9,306.8,1 782 | 164,735.3,186.7,333.1,893.3,1 783 | 164,359.8,307,230.9,579.5,1 784 | 165,1060.8,32.9,395.3,1047.1,1 785 | 165,1500.6,373.3,132.9,302.3,1 786 | 165,694.1,180.6,377.5,899.4,1 787 | 165,375.1,305.6,256.3,585.9,1 788 | 166,1049.9,41.4,390.8,1038.6,1 789 | 166,684.2,173,365.7,907,1 790 | 166,1498.5,371.5,142,306.3,1 791 | 166,387.8,305.1,277.1,590.8,1 792 | 167,1035.8,41.5,402.4,1038.5,1 793 | 167,405.1,315.7,265.9,576.3,1 794 | 167,1500.2,374.8,141.8,300.2,1 795 | 167,659.3,170.6,376.5,909.4,1 796 | 168,1016.5,34.8,404.5,1045.2,1 797 | 168,642.8,159.3,375,920.7,1 798 | 168,422.9,311.2,252.9,569.9,1 799 | 168,1500.7,377.4,142.4,300.4,1 800 | 168,1379.6,452,80.9,231.1,0.986 801 | 169,1002.9,28.6,412.6,1051.4,1 802 | 169,1502.4,378.9,142.2,299,1 803 | 169,623,164.3,386.2,915.7,1 804 | 169,448.1,303.7,230.3,568.3,1 805 | 169,1379.3,450.5,85.6,231.9,0.999 806 | 170,1001.4,18.3,399,1061.7,1 807 | 170,1504.5,382.6,142.7,294.3,1 808 | 170,601.7,154.7,389.4,925.3,1 809 | 170,468.4,310.3,189.4,570.4,0.999 810 | 170,1376.3,448,91,233.1,0.998 811 | 171,977.3,17.3,414.4,1062.7,1 812 | 171,1511.5,381.9,142.4,295.8,1 813 | 171,554.4,146.2,416.7,933.8,1 814 | 171,1382.3,444.8,90.3,235.6,1 815 | 171,358.6,403.7,214.4,449.6,0.464 816 | 172,964.2,12.9,416.5,1067.1,1 817 | 172,1518.8,385.7,135.7,285.2,1 818 | 172,564.4,155.8,395.4,924.2,1 819 | 172,1382.1,442.3,94.2,241.7,1 820 | 172,1333.4,537.8,57.4,172.4,0.831 821 | 172,365.1,392.3,236.8,468.3,0.486 822 | 173,943.6,3.7,427.9,1076.3,1 823 | 173,1525.1,378.9,133.4,293.7,1 824 | 173,1383.5,444.6,92.5,236.8,1 825 | 173,1337.3,536.3,64.2,150.6,1 826 | 173,557,144.1,387,935.9,1 827 | 173,377.6,384.4,241.6,479,0.999 828 | 174,1532.8,382.6,126.7,285,1 829 | 174,937.4,1,413.6,1079,1 830 | 174,522.9,127.5,416.8,952.5,1 831 | 174,1334.4,538.3,68.2,148.7,1 832 | 174,1384.8,444.7,92.2,234.6,1 833 | 174,413.9,402.8,163.6,450.2,0.239 834 | 175,931.1,1,412.9,1079,1 835 | 175,509,133.1,423,946.9,1 836 | 175,1538.3,380,124.2,283.8,1 837 | 175,1386.1,439.2,93.7,241.6,1 838 | 175,1332.9,539.2,70.8,148.7,1 839 | 175,365.6,394.3,142.2,430.6,0.667 840 | 176,487,140,421.4,940,1 841 | 176,1541.7,380.1,127.3,285.9,1 842 | 176,1333.2,540.2,70.4,148,1 843 | 176,917.7,1,405.4,1079,1 844 | 176,1383.8,438.6,98,241.7,1 845 | 176,358.7,400.9,144.2,400.4,0.996 846 | 177,1543,379.3,129.4,285.7,1 847 | 177,463.2,123.9,447,956.1,1 848 | 177,1335.8,541.2,70.3,146.6,1 849 | 177,910.1,1,407.8,1079,1 850 | 177,1387.8,438.3,95.9,242.3,1 851 | 177,361.6,400.7,144.3,402.8,0.997 852 | 178,1546.8,379.2,128.7,289,1 853 | 178,1336.9,540.3,70.1,147.1,1 854 | 178,437.5,129,454.5,951,1 855 | 178,1390.3,439.8,93.6,236.6,1 856 | 178,897.9,1,407.5,1079,1 857 | 178,371.9,396.9,141.8,408.5,0.893 858 | 179,1550,380.5,130.9,284.9,1 859 | 179,1340,540.6,69.1,146.9,1 860 | 179,884.1,1,409.8,1079,1 861 | 179,397.9,143.4,498.3,936.6,1 862 | 179,1387.3,437.4,101.1,245.4,1 863 | 179,389.6,384.1,128.8,431.6,0.198 864 | 180,1551.6,383.8,131.2,282.4,1 865 | 180,377.5,149.3,491.9,930.7,1 866 | 180,1341.2,539.6,69,147.1,1 867 | 180,875.7,22.5,403.9,1057.5,1 868 | 180,1390.1,439,97.7,247.2,1 869 | 181,1557.4,383,129.9,282.2,1 870 | 181,857.9,10.7,409.9,1069.3,1 871 | 181,1342.1,537.1,69,149.2,1 872 | 181,1394.2,443.3,94.1,241.2,1 873 | 181,352.8,137.4,514.5,942.6,1 874 | 182,1561.6,384.6,129.4,272.7,1 875 | 182,849.3,1,408.7,1079,1 876 | 182,1342.8,535.7,68.8,150,1 877 | 182,1392.9,440.7,96.9,245.8,1 878 | 182,323.1,118.4,531.1,961.6,1 879 | 183,1565.9,389.2,127.9,273.5,1 880 | 183,837.7,1,410.7,1079,1 881 | 183,1344.4,533.8,68.6,155.2,1 882 | 183,1394,440.3,96.4,245.7,1 883 | 183,305.4,131.7,502.8,948.3,1 884 | 183,701.2,314.2,143.8,533.7,0.276 885 | 183,6.9,231,202.9,801.6,0.129 886 | 184,1572.7,392.2,122.8,268.9,1 887 | 184,809.6,2.5,433.7,1077.5,1 888 | 184,1395.7,438.8,95.1,244.4,1 889 | 184,1348.6,536.3,67.1,152.4,1 890 | 184,278.3,128.6,507,951.4,1 891 | 184,1,172.8,286.1,899.4,0.996 892 | 184,703.6,307.4,169.8,531.1,0.734 893 | 185,1574.5,385.9,125.3,273.4,1 894 | 185,800.7,8.2,433.2,1071.8,1 895 | 185,1396.9,438.9,96.1,247.4,1 896 | 185,1351.2,538,66.3,148.7,1 897 | 185,285.2,111.6,499.4,968.4,1 898 | 185,1,183.8,322.3,846.3,0.998 899 | 185,718.1,303.6,166.3,519.7,0.218 900 | 186,1579.7,386.1,127.5,274.1,1 901 | 186,781.1,1,441.8,1079,1 902 | 186,1397.2,438.4,97.4,245.6,1 903 | 186,1353.9,540.8,66.6,146,1 904 | 186,237,109,522.6,971,0.999 905 | 186,2.5,178,351.3,866.9,0.997 906 | 187,1583.9,386,125.4,273.9,1 907 | 187,767.1,1,443,1079,1 908 | 187,1397.9,435.9,97.5,248.3,1 909 | 187,1354.9,540,67.7,146.5,1 910 | 187,204.2,107.5,530.2,972.5,0.998 911 | 187,6.4,188.8,318.8,858,0.979 912 | 188,1588.9,386.6,122.3,273.3,1 913 | 188,746.3,1,449.5,1079,1 914 | 188,1399.4,433.5,96,251,1 915 | 188,1355.8,538.5,68.9,148.2,1 916 | 188,159.5,97.7,512.9,982.3,1 917 | 188,26.1,207.1,249.3,779,0.539 918 | 189,1589.3,386.6,126.3,275.4,1 919 | 189,728.7,1,465.4,1079,1 920 | 189,1399.9,435.6,98.9,250.7,1 921 | 189,1361.3,538.8,65,149.7,1 922 | 189,88.8,99.6,534.4,980.4,0.999 923 | 189,561.4,395.5,134.8,390.3,0.052 924 | 190,1593,391.5,122.8,269.5,1 925 | 190,700,1,480.7,1079,1 926 | 190,1400.9,439,97,243.7,1 927 | 190,1362.4,539.8,66.3,149.6,1 928 | 190,60.7,106.2,503.6,973.8,1 929 | 191,1595.4,395.5,122.1,263.6,1 930 | 191,675.8,1,484,1079,1 931 | 191,12.1,87.2,511.9,992.8,1 932 | 191,1400.4,435.5,99,247.7,1 933 | 191,1367.2,539.9,66,151.3,1 934 | 191,481.3,389.1,124.2,418.4,0.139 935 | 192,1597.6,397,121.1,261.1,1 936 | 192,649,1,489.3,1079,1 937 | 192,1,89.7,505.5,990.3,1 938 | 192,1404.5,439.3,96.4,244,1 939 | 192,1368.9,539.5,67.8,153.9,1 940 | 192,477.7,397,132.7,413.7,0.998 941 | 193,1596.9,394.9,128.6,262.6,1 942 | 193,637.4,1,486.6,1079,1 943 | 193,1.8,105.2,476.3,974.8,1 944 | 193,1371.3,539.2,68.9,154.7,1 945 | 193,1401.9,437.1,103.8,245.1,1 946 | 193,478.3,395.6,139.5,418.8,1 947 | 194,1602.5,394.9,129.4,261,1 948 | 194,610.6,1,484.5,1079,1 949 | 194,1373.8,535.8,68.8,156.6,1 950 | 194,1403.8,435.6,102.6,252.4,0.999 951 | 194,1,81.2,415.2,998.8,0.999 952 | 194,488.1,390.5,144.4,432.7,0.999 953 | 195,585.2,1,498.5,1079,1 954 | 195,1605.7,394.6,127.6,263.9,1 955 | 195,1375,534,68.7,159.1,1 956 | 195,1406.5,434.9,103.2,247.7,0.999 957 | 195,1,62,407,1018,0.997 958 | 195,496.8,388.8,143.9,429.2,0.995 959 | 195,1470.4,429.4,95.6,227.8,0.541 960 | 196,551.6,1,526,1079,1 961 | 196,1613.8,399.9,115.4,251,1 962 | 196,1378.9,535.1,69.9,159,1 963 | 196,1405.1,435.2,104.7,257.6,0.999 964 | 196,1473.9,424.9,100.2,239.9,0.995 965 | 196,6.5,84.9,390.6,995.1,0.984 966 | 196,270.6,200.6,227.1,788.3,0.196 967 | 196,513,382.3,134.7,446,0.126 968 | 197,1609.7,399.4,123.5,252.1,1 969 | 197,529.5,1,524.4,1079,1 970 | 197,1381.9,539.1,70.7,153.9,1 971 | 197,1406.9,440,105.5,243.1,0.999 972 | 197,229.2,192.6,324.4,785.8,0.997 973 | 197,1477.9,423.2,101,242.2,0.997 974 | 197,16.1,102,384.9,978,0.923 975 | 198,1614.5,393.4,123.4,255.2,1 976 | 198,1388.2,536.5,66.9,155.6,1 977 | 198,502,1,533.8,1079,1 978 | 198,1407.8,436.6,105.3,248.7,1 979 | 198,1480.7,422.2,101.5,244.3,0.997 980 | 198,227.8,214.4,339.3,769.2,0.996 981 | 198,5.4,93.6,350.8,986.4,0.854 982 | 198,914.9,314.5,158.9,495.6,0.098 983 | 199,1618.1,393.1,117.5,259.6,1 984 | 199,1391.5,537.3,66.7,154.1,1 985 | 199,469.9,1,547.5,1079,1 986 | 199,1409.3,436.2,108.1,251.7,1 987 | 199,1494.5,423.5,88.1,238.2,0.999 988 | 199,255.2,223.6,332.6,764.9,0.998 989 | 199,923.9,320.2,172,485.2,0.761 990 | 199,10.3,91.6,267.8,988.4,0.518 991 | 200,1622.3,388.2,120.3,260.6,1 992 | 200,1393.5,536.6,65.2,156.6,1 993 | 200,441,2.6,559.9,1077.4,1 994 | 200,1410.4,435.7,109,255.4,1 995 | 200,932.1,327.9,188.2,478.6,0.999 996 | 200,1496.9,422.6,88.9,240.4,0.998 997 | 200,276.9,203.7,316,819.4,0.99 998 | 200,11,91.5,208.4,988.5,0.423 999 | 201,1623.8,392.1,119.3,254.7,1 1000 | 201,1396.1,536.5,65.4,156.5,1 1001 | 201,390.3,1,608,1079,1 1002 | 201,934.1,324,219.1,484.2,1 1003 | 201,1412.4,434.4,109.4,255.5,1 1004 | 201,297.4,229,264.7,747.4,0.8 1005 | 201,180.6,233.5,223.9,698.8,0.414 1006 | 202,1630.4,392.5,116.2,255.4,1 1007 | 202,1398.6,535.1,68.1,159.2,1 1008 | 202,1413.8,433.8,111,259,1 1009 | 202,381.6,1,592.4,1079,1 1010 | 202,1511.3,421.6,83.4,237.9,0.999 1011 | 202,941.6,335.3,225.2,470.2,0.999 1012 | 202,295.3,229.3,270.1,729.1,0.075 1013 | 203,1401.6,537.1,67.5,159,1 1014 | 203,1636.3,396.3,115.1,254,1 1015 | 203,1418.2,436.6,106.3,255.5,1 1016 | 203,334.3,1,639.1,1079,1 1017 | 203,936.8,325.9,233.5,476.2,0.999 1018 | 204,1638.4,390.6,118.6,258.2,1 1019 | 204,1404.9,536.7,67.1,161.4,1 1020 | 204,955.7,328.5,219,474.9,1 1021 | 204,1422.1,437.4,104.8,255.2,1 1022 | 204,289.3,1,644.8,1079,1 1023 | 204,1523.3,428.1,80.6,227.5,1 1024 | 204,235.1,260.9,208.8,661,0.053 1025 | 205,1640.9,394.8,118.3,254,1 1026 | 205,1407,536.5,67.5,160.2,1 1027 | 205,1425.4,436.1,103.4,255.4,1 1028 | 205,962.2,323.9,206.1,474.4,1 1029 | 205,1524.2,425.9,88.1,232,1 1030 | 205,236.1,1,691.8,1079,1 1031 | 206,1645.9,397.2,117.4,249.9,1 1032 | 206,1410,536.4,68.5,160.7,1 1033 | 206,974.2,337.3,200.2,470.8,1 1034 | 206,1526.3,425.1,97.9,229.8,1 1035 | 206,1429.1,431.8,101.2,260.4,1 1036 | 206,217.5,1,635.4,1079,1 1037 | 206,855.4,391.3,153.2,394.9,0.081 1038 | 207,1644.9,396.3,120.7,252.5,1 1039 | 207,1411.3,535.1,70.1,164,1 1040 | 207,1429.2,433.6,105.1,255.1,1 1041 | 207,1528.7,424.3,105,229.8,1 1042 | 207,995.3,328,187.1,475.5,1 1043 | 207,159,4.4,665.6,1075.6,0.999 1044 | 207,861.2,397.1,180.2,392.2,0.719 1045 | 208,1650.2,400.3,117,245.6,1 1046 | 208,1414.2,534.4,70.3,165.3,1 1047 | 208,1430.2,432.3,104.9,256.2,1 1048 | 208,1003.5,327.2,190,469.3,1 1049 | 208,1530.2,424,108.5,231.2,1 1050 | 208,116.5,1,676.2,1079,0.998 1051 | 208,869.7,401,194.7,388.7,0.998 1052 | 208,1,234.8,176.4,810.1,0.406 1053 | 209,1654.4,400.3,115.5,243.6,1 1054 | 209,1417.5,536.3,66.9,165.1,1 1055 | 209,1538.2,421.5,109.9,235.4,1 1056 | 209,1026.4,327.1,178.8,470.7,1 1057 | 209,1437.2,430.6,100.4,260.3,1 1058 | 209,896.9,396.7,170.1,394.1,0.999 1059 | 209,19.7,20.8,761.5,1059.2,0.996 1060 | 209,12.7,254.4,186.5,796.6,0.363 1061 | 210,1048.4,334.2,171.7,460.3,1 1062 | 210,1438.6,430.9,102.3,258.9,1 1063 | 210,1657.3,397.8,115.9,251.8,1 1064 | 210,1547.1,421.9,103.4,234.8,1 1065 | 210,1419.2,536,66.1,165,1 1066 | 210,909.1,411.1,154.2,371.8,1 1067 | 210,4.7,30,703.1,1050,0.998 1068 | 211,1069.3,335.2,174.8,456.3,1 1069 | 211,1662.1,394.5,117.3,252,1 1070 | 211,1421.7,537.5,68.1,161,1 1071 | 211,1443.3,428.5,101.9,266.4,1 1072 | 211,1553.7,423.5,98.6,229.3,1 1073 | 211,924.3,399.7,138.3,383.6,1 1074 | 211,10.9,21.2,608.7,1058.8,1 1075 | 211,488.9,276.7,312.8,612.3,0.859 1076 | 212,1072.5,337.7,189.9,447.4,1 1077 | 212,1667.5,400,110.4,243.8,1 1078 | 212,1444,431.1,104.8,264.7,1 1079 | 212,1556.7,423.9,100.2,233.9,1 1080 | 212,498.7,238.9,313.6,681.2,1 1081 | 212,1425,535.9,65.4,163.6,1 1082 | 212,931.8,403,136.4,377.1,0.999 1083 | 212,1,15.3,591.1,1064.7,0.999 1084 | 213,1664.6,394.6,115.1,249.5,1 1085 | 213,1084.1,337.5,193.2,446.4,1 1086 | 213,1564.9,424.4,98.1,230.2,1 1087 | 213,509.9,253.7,307.7,663.1,1 1088 | 213,937.6,401.9,138.7,376.6,1 1089 | 213,1445.6,426,105.4,269.4,1 1090 | 213,1427.4,535.5,65.6,162.4,1 1091 | 213,1,22.3,545.1,1057.7,0.997 1092 | 214,1093.8,337.2,203.2,445.6,1 1093 | 214,1670.5,396.8,117,251.5,1 1094 | 214,522.9,268.2,310.5,641.4,1 1095 | 214,940.9,406.4,147.8,374.4,1 1096 | 214,1450.7,430.5,104.4,261.7,1 1097 | 214,1431.2,537.1,66,164.1,1 1098 | 214,1,36,467.3,1044,0.961 1099 | 214,384.4,233,233.2,641.4,0.122 1100 | 215,1675.8,399.7,112.5,244.8,1 1101 | 215,1097.7,340.2,200.9,443.3,1 1102 | 215,939.6,409.1,159.2,372,1 1103 | 215,1453,430.5,103.9,261.6,1 1104 | 215,529,260.4,315.4,651.6,1 1105 | 215,1433.7,537.2,64.9,165.6,1 1106 | 215,1,61.5,407.5,1018.5,0.956 1107 | 215,419.1,263.9,193.4,604,0.05 1108 | 216,1112,340.9,193.9,445.1,1 1109 | 216,1677.1,397.3,110.9,246.6,1 1110 | 216,545.1,265.6,305.4,650.5,1 1111 | 216,1457.3,426.5,104.7,265.3,1 1112 | 216,961.4,410.2,150.7,370.4,1 1113 | 216,1437.8,538.1,63.5,167,1 1114 | 216,1,310.6,328,769.4,0.402 1115 | 217,1115.8,343.9,186.7,446.7,1 1116 | 217,539.9,255.2,320.5,649.8,1 1117 | 217,1682.4,403.8,111.9,238.7,1 1118 | 217,1460.9,428,101.1,268.3,1 1119 | 217,1440.4,537.4,65.2,167.2,1 1120 | 217,974,412.5,146,367.1,1 1121 | 217,13.4,30,363.8,1050,0.478 1122 | 218,1121.8,342,189.3,441.6,1 1123 | 218,976.1,417.9,157.4,363,1 1124 | 218,562.9,278.8,302.6,622.3,1 1125 | 218,1442.9,536.9,67.4,168.2,1 1126 | 218,1464.1,428.1,100,271.6,1 1127 | 218,1688.2,403.6,107.2,239.8,1 1128 | 218,106.7,259.7,317.1,766.5,0.377 1129 | 219,1132.8,347.7,185.5,437.9,1 1130 | 219,633.3,265,228.4,631,1 1131 | 219,1604.3,421.3,114.9,229,1 1132 | 219,994.2,417.4,146.4,351.2,1 1133 | 219,1446.6,538.1,65.5,168.4,1 1134 | 219,1468.7,432.6,97.5,268.5,1 1135 | 219,1685.9,400.4,114.5,248.7,1 1136 | 219,121.9,253.5,352,760.8,0.996 1137 | 219,494.9,288.9,199.6,579.9,0.985 1138 | 220,1143.9,342.8,179.5,435.8,1 1139 | 220,1470.7,430.4,98.8,267.7,1 1140 | 220,648.5,268.2,224.1,622.7,1 1141 | 220,1446.4,536.2,68.9,170.8,1 1142 | 220,1605.2,416.3,122.1,236.1,1 1143 | 220,1007.3,409.7,136.9,352.7,1 1144 | 220,142.5,278.1,368.9,735.7,1 1145 | 220,1688.4,404.1,109.7,244.9,0.999 1146 | 220,503.2,284.9,199.9,582.4,0.997 1147 | 221,1474.8,429.3,101.4,268.4,1 1148 | 221,1153.9,340,164.5,429.4,1 1149 | 221,154.8,275,386.6,720.6,1 1150 | 221,1451.7,538.2,66.4,168.4,1 1151 | 221,1609.9,422.6,125.6,229,1 1152 | 221,683.6,267.9,218.4,618.6,1 1153 | 221,1023.2,412.1,129.7,353.7,0.999 1154 | 221,511.6,295.2,226.7,581.5,0.999 1155 | 221,1690.3,404.1,108.1,239.2,0.997 1156 | 222,1161.8,337,158,445.4,1 1157 | 222,1455.2,538.2,65.3,168.7,1 1158 | 222,1609.2,423.3,143.9,230.1,1 1159 | 222,690.4,266.5,245.9,609.4,1 1160 | 222,1476.8,429,101.1,264.8,1 1161 | 222,173,300.1,374.3,675.3,1 1162 | 222,1035.2,416.4,122.5,343.1,0.999 1163 | 222,526.8,295.2,218.9,569.4,0.998 1164 | 223,1616.4,423.9,138.3,228.1,1 1165 | 223,1459.3,538.3,66.3,169.4,1 1166 | 223,701.5,267.7,248.9,602.8,1 1167 | 223,1478.7,428.3,105.8,265.6,1 1168 | 223,1161.9,341.2,154.6,433.3,1 1169 | 223,175.4,290.6,381.7,687.4,1 1170 | 223,1042.2,417.1,128.2,339.1,0.999 1171 | 223,527.3,290.6,241.7,588,0.999 1172 | 223,1696.6,401.2,105.1,246,0.72 1173 | 224,1619.9,422.4,137.2,231.4,1 1174 | 224,715.3,279,249.4,605.1,1 1175 | 224,1460.9,538.1,69.7,169.3,1 1176 | 224,1485.3,425.1,108.5,269.3,1 1177 | 224,1169,339.1,149.9,442.3,1 1178 | 224,189.8,277.3,390,700.9,1 1179 | 224,1048.7,416.1,134.4,347.5,1 1180 | 224,544.3,291.3,247,573.1,0.997 1181 | 224,1700.2,402.5,103.4,240.4,0.93 1182 | 225,722.3,275.2,258.1,607.2,1 1183 | 225,1462.4,536.4,72.8,170.6,1 1184 | 225,1487.3,423.8,109.9,269.8,1 1185 | 225,1172.2,342.9,154.5,433.6,1 1186 | 225,212.3,300.6,375.2,687.7,1 1187 | 225,1632.6,419.4,121.1,232,1 1188 | 225,1056.1,413.7,132.4,342,1 1189 | 225,1704.2,399.1,109.8,245.6,0.999 1190 | 225,559.9,300.1,228.4,560.1,0.995 1191 | 226,744.1,275.1,254.3,604.5,1 1192 | 226,1466,535.4,73,172.8,1 1193 | 226,1492.2,425.8,106.9,266.1,1 1194 | 226,1178.3,346.7,160.8,424.4,1 1195 | 226,250.3,295,338.7,684.7,1 1196 | 226,1061.8,407.3,136.4,354.9,1 1197 | 226,1704.3,396.7,114.3,250.1,1 1198 | 226,1641.3,422.2,108.3,225.5,0.999 1199 | 226,575.9,306.8,214.4,558.9,0.993 1200 | 227,752.6,279.7,255.5,594.5,1 1201 | 227,1492.1,425.2,112.1,271.5,1 1202 | 227,300.9,296.1,297.8,680.5,1 1203 | 227,1469.1,534.8,73.2,174.9,1 1204 | 227,1707.7,397.6,108.5,248.5,1 1205 | 227,1186.6,341.1,152.3,425,1 1206 | 227,1066.2,409.8,142.2,352.1,1 1207 | 227,1650.1,420.3,98.2,229.2,0.999 1208 | 227,586.6,300.1,206.9,560.2,0.996 1209 | 228,764.1,280.1,255.9,592.6,1 1210 | 228,338.2,293.6,269.6,685,1 1211 | 228,1496,424.6,112.3,274.9,1 1212 | 228,1713.4,397.3,102.6,239.7,1 1213 | 228,1472,535.3,74,175.9,1 1214 | 228,1069.1,407.7,148.1,351.1,1 1215 | 228,1191.2,350.3,156.3,417.8,0.999 1216 | 228,1664.4,419.7,82.4,232.2,0.999 1217 | 228,608.6,300.8,189.1,553.2,0.998 1218 | 228,182.4,299,282.9,622.7,0.37 1219 | 229,787.3,271.9,239.2,586.8,1 1220 | 229,1477.9,536,73,174.6,1 1221 | 229,381.6,288.7,248.6,669.6,1 1222 | 229,1499.3,422.4,115.9,279.7,1 1223 | 229,1196.6,345.9,151.3,427.8,1 1224 | 229,1084.8,409.9,137.5,347.9,0.999 1225 | 229,1718.2,393.9,109.3,243.5,0.999 1226 | 229,1671.5,417.5,84.7,226.9,0.998 1227 | 229,631.3,294,171.4,554.3,0.997 1228 | 229,214.1,300.5,288.1,633.6,0.996 1229 | 230,792.2,275.2,237.7,586.2,1 1230 | 230,1480.9,534.6,72.6,175.3,1 1231 | 230,408.4,287.4,238.5,679.6,1 1232 | 230,1502.7,426.6,116.8,275.1,1 1233 | 230,1208.6,346.4,144,429.3,1 1234 | 230,1725,394.9,107.7,244.1,0.999 1235 | 230,646.3,296.2,165.6,559.6,0.999 1236 | 230,1088.7,413.7,146.2,340.5,0.999 1237 | 230,252.2,309.7,261.6,614.2,0.998 1238 | 230,1682.3,419.1,83.2,222.9,0.996 1239 | 231,819.3,271.4,216.4,576.9,1 1240 | 231,428.1,296.1,232.1,655.5,1 1241 | 231,1214.6,348.2,143,425.7,1 1242 | 231,1488.1,532.2,71.3,175.7,1 1243 | 231,1686.7,418.8,86.5,228.4,1 1244 | 231,1507.4,424,113.6,273.8,1 1245 | 231,662.9,293.8,171.5,539.4,1 1246 | 231,1099.3,427.5,139.7,324.4,0.999 1247 | 231,302,321.8,191,584.8,0.978 1248 | 232,834.4,270.9,211.7,577.8,1 1249 | 232,426.5,293.2,262.7,669.7,1 1250 | 232,1216.5,360.1,147.3,409.6,1 1251 | 232,1688.8,421.4,88.4,230.2,1 1252 | 232,1493.5,531.6,69,179.2,1 1253 | 232,1513.6,420.2,106,279.2,1 1254 | 232,1111.4,415.5,128.4,330.6,1 1255 | 232,667.7,300.5,191.3,531.1,0.999 1256 | 232,1736.1,415.1,97.2,214.3,0.829 1257 | 233,849.5,270.8,198.9,573.7,1 1258 | 233,1494.3,528.4,73.1,183.8,1 1259 | 233,441.5,302.4,270.8,646.3,1 1260 | 233,1121.2,419.5,119.7,322.9,1 1261 | 233,1228.9,359.6,142.3,404.1,1 1262 | 233,1693,419.4,88.1,229.1,1 1263 | 233,1514,418.7,104.1,283.5,1 1264 | 233,675,294.6,197.9,543.3,0.991 1265 | 233,1748.3,414.4,75.8,211.9,0.393 1266 | 234,870,273,183.2,575,1 1267 | 234,1695.6,424.3,89.2,221.5,1 1268 | 234,1242.6,353.3,141,409.3,1 1269 | 234,1134.4,414.5,113.1,329,1 1270 | 234,461.3,307.7,278,642.5,1 1271 | 234,1496.8,530.8,79,179.7,1 1272 | 234,1519.6,428,103,266.8,1 1273 | 234,1764.5,422.4,63.6,209.2,0.4 1274 | 234,695.3,310.2,201.2,506.5,0.291 1275 | 235,877.9,274.9,185,563.7,1 1276 | 235,1499.4,530.3,86.4,180.8,1 1277 | 235,1702.9,422.4,89.6,226,1 1278 | 235,473.7,312.8,288,639.9,1 1279 | 235,1256.1,354.3,141.3,403.4,1 1280 | 235,1144.3,413.6,110.9,324.6,1 1281 | 235,702.6,309.1,214.1,518.7,0.166 1282 | 235,1767.1,417.1,58.1,214.9,0.152 1283 | 236,1502.6,531.8,94.9,180.1,1 1284 | 236,886.9,286.4,209.4,562.6,1 1285 | 236,1709.4,423.7,89.3,218.9,1 1286 | 236,1259.6,355.2,147.3,396,1 1287 | 236,486.8,315.3,271.1,635.1,1 1288 | 236,1154.6,419.8,102.9,322.6,1 1289 | 236,720.5,312.5,205.8,502.9,0.495 1290 | 236,1767.9,416.2,62,211.5,0.072 1291 | 237,894.4,286.8,218.8,562.4,1 1292 | 237,1506.8,530.7,93.6,181.8,1 1293 | 237,1710.9,425.6,91.1,217.2,1 1294 | 237,507.3,302.9,262.5,644.9,1 1295 | 237,1259.6,362.1,157.9,388.4,1 1296 | 237,1156.4,413.6,107.7,340.6,1 1297 | 237,718.5,306.1,191.4,512.8,0.519 1298 | 237,1773,413.1,67.3,210.2,0.181 1299 | 238,1510.7,531.1,95,182.9,1 1300 | 238,905.2,285.8,237.3,570.8,1 1301 | 238,1718.2,420.1,88.6,224.6,1 1302 | 238,528.2,310.4,244.7,627.3,1 1303 | 238,1265.1,359.4,160.1,388.9,1 1304 | 238,1163.9,421.2,106.7,322.5,0.999 1305 | 238,728.9,323.1,212.3,499,0.312 1306 | 239,1517.9,534.1,99.7,179.2,1 1307 | 239,914.7,309.6,261.8,546.8,1 1308 | 239,1276.6,354.8,162.3,397.9,1 1309 | 239,1730.2,421.7,82.2,219.6,1 1310 | 239,553.4,311.9,237.3,609,1 1311 | 239,1169.4,420.3,112.3,311.5,1 1312 | 239,737.3,318,198.4,494.7,0.264 1313 | 240,1524.2,534,99.4,177.2,1 1314 | 240,922.3,291.8,244.8,565.8,1 1315 | 240,1278.5,356.6,165.6,396.1,1 1316 | 240,1732.3,426.8,82.8,217.3,1 1317 | 240,577.6,297.4,228.7,612.4,1 1318 | 240,1173,422.8,112.7,306.3,1 1319 | 240,480.9,321.2,196.3,571.1,0.746 1320 | 240,752.2,313.8,204.7,496.3,0.144 1321 | 241,1537.6,531.2,94.5,176.4,1 1322 | 241,938.7,295.5,228,548.6,1 1323 | 241,1282.2,358.5,165.6,393,1 1324 | 241,1738.5,419.9,89.3,223.2,1 1325 | 241,1178.5,420.6,116.5,317.4,1 1326 | 241,614.2,305.3,204.3,615,1 1327 | 241,486.8,328,206.7,574.8,0.999 1328 | 241,783.8,313.9,157.3,500.6,0.051 1329 | 242,1540.6,530.8,95.1,179.9,1 1330 | 242,948.7,295,223.6,551.6,1 1331 | 242,1287.1,361.6,164.2,394.2,1 1332 | 242,621.2,303.1,205.1,609.9,1 1333 | 242,1742.4,425.3,86.8,215,1 1334 | 242,1184.5,423,117.1,311.6,1 1335 | 242,498.1,328.1,194.9,559.3,0.993 1336 | 243,1547,530.1,91.5,180.7,1 1337 | 243,958.6,293.4,216.8,542,1 1338 | 243,1749.9,422.4,83.7,220.4,1 1339 | 243,628.1,312.3,224.1,598.1,1 1340 | 243,1292.3,361.3,165.7,390,1 1341 | 243,1190.5,423.2,109.6,310,1 1342 | 243,527.3,324.8,172.7,547.7,0.981 1343 | 244,1554.1,531.6,94.2,178.5,1 1344 | 244,640.2,315.9,231.3,597.1,1 1345 | 244,968.4,285.2,213.8,550.7,1 1346 | 244,1300.2,361,162.5,389.2,1 1347 | 244,1751.3,416.7,87.4,221.6,1 1348 | 244,1198.6,429.1,108.5,295.9,0.999 1349 | 244,559.1,328.5,152.8,536.7,0.832 1350 | 245,1561.2,531,91.6,177.2,1 1351 | 245,649.5,316.4,238.4,597.7,1 1352 | 245,989.6,282.8,196.1,552.4,1 1353 | 245,1304.3,360.3,153.1,385.4,1 1354 | 245,1758.8,420.4,85.5,221,1 1355 | 245,1204.7,417.9,101.4,302.9,0.999 1356 | 245,566.8,321.5,176.3,538.1,0.246 1357 | 246,1576.4,529.2,84.1,180.7,1 1358 | 246,1001.9,288.6,187.8,534.2,1 1359 | 246,656.6,323.2,257.6,587.8,1 1360 | 246,1310.8,351.4,138.7,392.9,1 1361 | 246,1762.9,419.6,87.3,225.7,1 1362 | 246,1208.4,424.5,104.8,306.8,1 1363 | 246,1539.4,419,85.5,277.6,0.999 1364 | 247,1315.8,363.5,133,377.8,1 1365 | 247,1013.6,290.6,191.6,536.5,1 1366 | 247,1579.2,532.2,85.5,178,1 1367 | 247,665.7,325.6,268,578.1,1 1368 | 247,1765.6,421,84.9,218.7,0.999 1369 | 247,1536.7,425,84.6,273.6,0.999 1370 | 247,1214.8,426.2,103,302,0.999 1371 | 248,1583.3,531.9,84.1,180.7,1 1372 | 248,1024.3,289.6,197.1,529.4,1 1373 | 248,1316.7,357.1,132.8,378.9,1 1374 | 248,1768.9,421.6,88.3,224.4,1 1375 | 248,660.8,327,288.3,569.9,1 1376 | 248,1540.9,431.2,87.7,267.6,0.999 1377 | 248,1217.2,424.2,111,304,0.999 1378 | 249,1038.5,299,212,513.4,1 1379 | 249,1592.9,534.5,78.3,179,1 1380 | 249,1324.8,360.8,128,377.3,1 1381 | 249,696.2,315.8,272,584.3,1 1382 | 249,1770.8,421.8,96.3,216.8,1 1383 | 249,1538.4,421.7,90.1,280.3,0.999 1384 | 249,1224.6,431.6,113.6,295.3,0.998 1385 | 250,1048.3,292.1,209.5,529.9,1 1386 | 250,1597.1,534.5,77.1,179.8,1 1387 | 250,1773.4,421.5,108.6,224.7,1 1388 | 250,715.8,321.7,265.4,573.2,1 1389 | 250,1329,360.6,125,373.5,1 1390 | 250,1542.9,420.6,86.6,280.5,0.999 1391 | 250,1232,417.9,109.9,315,0.975 1392 | 250,621.9,343.5,171,532.3,0.121 1393 | 251,1776.1,416.5,110.9,222.7,1 1394 | 251,1601.2,533,80.2,180.3,1 1395 | 251,1055.9,292.9,217,516.7,1 1396 | 251,760.3,325.6,223,563.7,1 1397 | 251,1331.4,360.3,127.2,372.7,1 1398 | 251,1543.1,423.7,85.3,277.9,1 1399 | 251,1245.6,419.3,96.2,306.1,0.477 1400 | 251,650.3,338.1,216.1,511.2,0.301 1401 | 252,1608.1,532.6,77.1,180.2,1 1402 | 252,1062.5,304.5,223.6,518,1 1403 | 252,1543.6,420.4,85.1,281.8,1 1404 | 252,1785.2,419.6,109.6,223.1,1 1405 | 252,787.1,320,211,564.2,1 1406 | 252,1335.9,365.4,128.5,372,1 1407 | 252,635.9,327.1,236.3,537,0.993 1408 | 252,1250.9,408.4,76.7,326.6,0.063 1409 | 253,1612.2,532.5,78.6,181,1 1410 | 253,1074.1,305.8,215.8,513.3,1 1411 | 253,1341.9,365.5,127.9,376.2,1 1412 | 253,1544.3,424,84.3,276.9,1 1413 | 253,1788,421.3,108.8,220.1,1 1414 | 253,803.9,322.1,200.9,554.3,1 1415 | 253,648,330.3,230.3,535.2,0.999 1416 | 254,1618.8,527.4,88.7,186.4,1 1417 | 254,1082.4,307.6,223.4,506.4,1 1418 | 254,827.2,316.2,197.3,562.5,1 1419 | 254,1544.9,421.4,84.5,279.8,1 1420 | 254,1794.8,423.9,101.6,217.1,1 1421 | 254,1346.5,370.1,126.6,363.2,1 1422 | 254,670.6,326.2,227.1,535,0.999 1423 | 255,1620.3,526.6,96.9,187.3,1 1424 | 255,1088.8,308.7,231.5,504.6,1 1425 | 255,838,321.6,203.4,560.8,1 1426 | 255,1798.6,426.1,94.9,211.9,1 1427 | 255,1543.9,424.3,84.5,280.5,1 1428 | 255,1352.1,372.3,121.8,366.8,1 1429 | 255,692.1,328.6,206,528.2,1 1430 | 256,1628.5,526,98.8,188.2,1 1431 | 256,1098.8,305.3,224.1,507.7,1 1432 | 256,847.8,327.1,215.9,556.4,1 1433 | 256,1543.4,424.2,86.6,279.2,1 1434 | 256,1805.9,424.8,92.4,214.3,1 1435 | 256,1355.3,368.5,126,358.1,1 1436 | 256,717.5,329.2,184.3,523.9,0.999 1437 | 257,1636.9,528.4,95.7,191.8,1 1438 | 257,1111.9,302.7,210,512.3,1 1439 | 257,858.2,328.6,218.9,562.1,1 1440 | 257,1543.8,423.8,86.1,280.4,1 1441 | 257,1808.6,426.1,92.4,209.9,1 1442 | 257,1360.2,367.8,128,363.7,1 1443 | 257,729.9,333.9,174.7,507.5,0.997 1444 | 258,1639,525.5,99.1,194.1,1 1445 | 258,866.5,316.5,232.8,568.9,1 1446 | 258,1117.5,306.1,200.3,507.5,1 1447 | 258,1543.4,423,86.2,282.2,1 1448 | 258,1813.3,424,86.6,209.9,1 1449 | 258,1363.9,369.4,127.5,366.4,1 1450 | 258,757.6,337.7,149.6,501.6,0.993 1451 | 259,1650.2,528.5,90.9,190.1,1 1452 | 259,1127.4,306.4,196.6,505,1 1453 | 259,888.2,324.1,220.6,557,1 1454 | 259,1816.5,422.5,90.7,213.5,1 1455 | 259,1544,422.2,87,282.7,1 1456 | 259,1371,369.2,121.6,360.6,1 1457 | 259,766.2,339,163.2,496.6,0.989 1458 | 260,892.3,326.7,222.7,554.4,1 1459 | 260,1654.6,526.7,91.4,193.1,1 1460 | 260,1542.6,420,89.8,285.9,1 1461 | 260,1131.1,310.1,193,501.4,1 1462 | 260,1824.1,423.9,86,211.2,1 1463 | 260,1376.8,368.6,123.3,362.1,1 1464 | 260,784.3,339.4,159.9,503.6,0.998 1465 | 261,1660.1,527.5,87.6,195.7,1 1466 | 261,1141.7,310.3,181,488.2,1 1467 | 261,917.9,325.1,213,547,1 1468 | 261,1543.6,419.9,89.6,285.5,1 1469 | 261,1825.8,417.9,90.3,216,1 1470 | 261,1380.4,365.5,126,366.3,1 1471 | 261,799.2,340.6,163.9,506,0.998 1472 | 262,1668.5,524.5,86.3,195.8,1 1473 | 262,943.9,328.3,195.4,534.8,1 1474 | 262,1388.1,368.6,124.1,356.8,1 1475 | 262,1148.8,308,181.6,494.3,1 1476 | 262,1546.8,420.6,86.6,283.7,1 1477 | 262,1826.1,415.5,91.8,222.8,1 1478 | 262,809.5,348.1,177.3,499.4,0.999 1479 | 263,1674.2,521.8,85.5,196.5,1 1480 | 263,958.9,337.9,191.9,515.4,1 1481 | 263,1157,311.8,179.8,492.9,1 1482 | 263,1393.1,363.5,122.3,366.1,1 1483 | 263,1827.8,421.3,90.5,219.3,1 1484 | 263,1546.3,420.3,87.7,282.1,1 1485 | 263,816.7,349.7,185.9,491.4,0.999 1486 | 264,1680,522.7,86.9,196.6,1 1487 | 264,1395,367.7,131.6,357.2,1 1488 | 264,1167.3,312.9,182.4,485.8,1 1489 | 264,979,335.6,187.6,521.6,1 1490 | 264,1544.6,415.6,90,292.8,1 1491 | 264,1828.6,423.1,89.7,212.3,1 1492 | 264,820.8,359.3,198.9,479.4,0.999 1493 | 265,1684.7,523.7,87.4,196.1,1 1494 | 265,1173.9,316.5,185.3,483.8,1 1495 | 265,989.8,322.9,186.1,527.5,1 1496 | 265,1397.9,368.8,133.2,355.8,1 1497 | 265,1545.1,416.5,92.9,285.6,1 1498 | 265,1830.6,421.6,87.9,214,1 1499 | 265,829.8,345.5,195.8,493.4,0.999 1500 | 266,1686.3,523.7,92.2,197.6,1 1501 | 266,984.5,332,199.4,522.6,1 1502 | 266,1186.1,319.9,183.4,478.8,1 1503 | 266,1406.1,373,129.9,346.2,1 1504 | 266,1549.5,418.9,91.4,286.5,1 1505 | 266,1834,423.3,86,211.4,1 1506 | 266,835.9,357.5,191.4,479.3,0.999 1507 | 267,1691.6,525,92.2,197.2,1 1508 | 267,1006.4,331.3,208.5,517,1 1509 | 267,1195.4,325.4,178.6,465.3,1 1510 | 267,1837.7,424.6,82.3,213.5,1 1511 | 267,1407.2,374.5,133.6,346.9,1 1512 | 267,1549.5,416.7,91.2,287.8,1 1513 | 267,857.3,354.1,179.9,495.9,1 1514 | 268,1695,527.7,91.8,194.4,1 1515 | 268,1016.8,334.2,212.2,515.6,1 1516 | 268,1199.6,326,177.8,466.2,1 1517 | 268,1547.9,420.6,91.7,277.1,1 1518 | 268,1839.2,420.3,80.8,221.1,1 1519 | 268,1414.3,376.1,131.8,343.5,1 1520 | 268,872.4,353.5,178.5,472.9,0.999 1521 | 269,1029.7,336,220.2,508.2,1 1522 | 269,1418.8,380.4,126.7,340.5,1 1523 | 269,1548.1,423.9,91.7,279.8,1 1524 | 269,881.3,354,167.5,468.6,1 1525 | 269,1206.3,322.4,172.8,467.4,1 1526 | 269,1843.6,427.5,76.4,211,1 1527 | 270,1035.4,340.7,216.5,502.8,1 1528 | 270,1549.1,423.6,92,281.4,1 1529 | 270,1422,381.3,124.7,337.7,1 1530 | 270,1207.1,320.1,172.1,462,1 1531 | 270,1846,426.9,74,211.5,1 1532 | 270,895.9,351.4,162.1,469.6,0.999 1533 | 271,1042.6,341.6,221.1,491.7,1 1534 | 271,1423.9,379.6,125.2,335.9,1 1535 | 271,910.7,348.1,157.3,468.1,1 1536 | 271,1218.8,320.8,170,464.6,1 1537 | 271,1547.2,419,93.2,284.4,1 1538 | 271,1847.4,420.5,72.6,215.4,0.999 1539 | 272,1710.3,525,101.5,196.8,1 1540 | 272,1053.3,337.4,223.3,505.5,1 1541 | 272,1429.7,374.5,116.5,340.7,1 1542 | 272,1225.5,320.4,175.5,462.9,1 1543 | 272,1550.2,424.5,96.5,281,1 1544 | 272,1845.2,418.6,74.8,215.8,1 1545 | 272,925.6,344.5,162.4,482.2,0.999 1546 | 273,1713.2,526.4,106.9,197.1,1 1547 | 273,1075.5,334.3,208.9,503.4,1 1548 | 273,1435.2,371.4,109.3,341.9,1 1549 | 273,934.1,348.3,170.1,470,1 1550 | 273,1552.5,427.2,99.3,282.2,1 1551 | 273,1231.4,316.1,181.3,467.6,1 1552 | 273,1850.4,423,69.6,210.2,0.999 1553 | 274,1718.9,529.8,99.7,198.4,1 1554 | 274,1086.2,339.5,200.2,497.8,1 1555 | 274,1443.3,375.5,107.9,343.6,1 1556 | 274,1553.9,426.1,102.5,278.6,1 1557 | 274,1236.1,316,187.8,465,1 1558 | 274,940.1,356,181.6,463.4,1 1559 | 274,1852.4,424.7,67.6,211.5,0.999 1560 | 275,1104.4,331.5,186.7,503.9,1 1561 | 275,1250.9,319.8,184.5,453.9,1 1562 | 275,956,354.5,182.5,461.7,1 1563 | 275,1555.4,427.6,100.2,276.3,1 1564 | 275,1450.5,376.2,104,335.2,1 1565 | 275,1852.1,422.7,67.9,214,0.999 1566 | 276,1119.2,342.1,181.3,494.6,1 1567 | 276,1255.3,321.8,188.1,456.5,1 1568 | 276,961.5,356.2,185.7,459,1 1569 | 276,1561.6,425.4,93.6,277.8,1 1570 | 276,1453,373.9,102.1,341.8,0.999 1571 | 276,1856.8,422.3,63.2,212.7,0.997 1572 | 277,965.8,358.4,190.6,454,1 1573 | 277,1256.5,319.4,200.9,463.9,1 1574 | 277,1138.4,334.2,180.1,493.3,1 1575 | 277,1560.5,432.2,105.8,274.2,1 1576 | 277,1456.4,376.3,107.5,329.3,1 1577 | 277,1859.7,421.7,60.3,214.9,0.997 1578 | 278,984.4,365.8,174.9,443.5,1 1579 | 278,1557.6,430.3,113.1,281.9,1 1580 | 278,1139.9,338.3,184,491.8,1 1581 | 278,1269.5,319.3,184.8,463.1,1 1582 | 278,1457.7,378.4,110.8,325.8,1 1583 | 278,1861.1,423.1,58.9,216.6,0.982 1584 | 279,1725.8,525.4,99.8,207.7,1 1585 | 279,983.8,357.5,181.7,450.7,1 1586 | 279,1561,428.2,112.9,280.8,1 1587 | 279,1157.8,330,172.5,491.5,1 1588 | 279,1459.4,381.5,114.4,323.4,0.999 1589 | 279,1279.5,329.7,182.7,440.4,0.999 1590 | 279,1864.2,424.7,55.8,213.1,0.996 1591 | 280,1724.4,527.2,98.9,205.3,1 1592 | 280,1561.4,432.2,114.1,275.9,1 1593 | 280,994.9,354.5,169.4,452.8,1 1594 | 280,1154.5,327,187.8,503.6,1 1595 | 280,1465.8,382.9,114,317.7,0.999 1596 | 280,1275.6,330.5,193.1,443.9,0.998 1597 | 280,1864.4,424.3,55.6,211.6,0.996 1598 | 281,1721.7,526.3,100.8,203.2,1 1599 | 281,1569.8,443.1,112.1,263,1 1600 | 281,1162.2,336.6,199,492.5,1 1601 | 281,998.4,354.2,166.5,447.4,1 1602 | 281,1285.3,328.3,190.5,436.7,0.999 1603 | 281,1470.4,384.5,112.5,318.9,0.997 1604 | 281,1868.1,420.1,51.9,215.5,0.945 1605 | 282,1718.2,525.9,104.7,208,1 1606 | 282,1019,354.6,153.1,437.7,1 1607 | 282,1571.9,451.9,114,251.9,1 1608 | 282,1182.1,344.1,194.5,484.6,1 1609 | 282,1471.2,384.5,112.3,321.3,0.999 1610 | 282,1871,419.2,49,212.5,0.96 1611 | 282,1307.2,335.3,166.4,431.6,0.935 1612 | 283,1716.3,524,107.7,210.3,1 1613 | 283,1571.2,454.8,113,250.9,1 1614 | 283,1025.9,357.4,151.9,434.1,1 1615 | 283,1188.6,344.4,196,485.1,1 1616 | 283,1476.1,385.6,111.7,315.8,0.999 1617 | 283,1871.1,418.3,48.9,213.5,0.975 1618 | 283,1306.5,331.2,146.4,413.9,0.069 1619 | 284,1713.8,522.2,105.7,212.4,1 1620 | 284,1574.9,458.5,111.8,244.8,1 1621 | 284,1201.3,347.8,190.4,475.3,1 1622 | 284,1036,359.7,154,432.9,1 1623 | 284,1479.2,388.3,115.1,311.3,1 1624 | 284,1872.1,418.1,47.9,214.7,0.944 1625 | 285,1709.6,524.9,110.2,209.9,1 1626 | 285,1210.3,347.8,187.5,479.1,1 1627 | 285,1038.4,363.1,163.9,428.6,1 1628 | 285,1576.2,460.3,116.6,241.8,1 1629 | 285,1483.5,384,113.7,318.3,1 1630 | 285,1874.4,416,45.6,218.3,0.829 1631 | 286,1707,525.3,108.5,211.2,1 1632 | 286,1218.7,346.3,189.6,475.7,1 1633 | 286,1051,360.3,162.4,429.6,1 1634 | 286,1578.8,469.7,116.6,232.6,1 1635 | 286,1488.8,381.6,117.3,322.4,1 1636 | 286,1874.8,411,45.2,224.8,0.365 1637 | 287,1703.4,524.4,113.2,210.6,1 1638 | 287,1234.6,350.3,188.5,461.2,1 1639 | 287,1058.4,362.7,164.4,430.4,1 1640 | 287,1577.3,472,118.2,234.1,1 1641 | 287,1500,381.1,109.3,318.4,1 1642 | 287,1874.2,415.4,45.8,215.7,0.114 1643 | 288,1698.2,523.6,117.5,211.5,1 1644 | 288,1241.7,348.4,187.1,464,1 1645 | 288,1582.1,480.3,114.3,223.7,1 1646 | 288,1058,358.7,178.6,435.3,1 1647 | 288,1502.2,381.8,110,322.5,1 1648 | 289,1696.8,524.7,116.4,209.3,1 1649 | 289,1253.2,345.6,184.8,465.2,1 1650 | 289,1067.5,370.9,174.6,421.1,1 1651 | 289,1585.4,483.9,111.3,216.7,1 1652 | 289,1507.4,381.1,114,322.4,0.999 1653 | 290,1697.6,525.7,112.3,206.5,1 1654 | 290,1264.7,343.2,183.8,461.2,1 1655 | 290,1070.2,359.5,174.7,432.7,1 1656 | 290,1585.7,494.5,112.8,208.1,1 1657 | 290,1511.9,381,113,323.3,0.999 1658 | 291,1698.6,522.1,112,211,1 1659 | 291,1585.4,494.6,114.4,206.1,1 1660 | 291,1275.6,347.3,184.9,461.8,1 1661 | 291,1074.5,359.8,167.8,435,1 1662 | 291,1516.3,385.8,107.8,313.9,1 1663 | 292,1697.6,521.3,111,217.5,1 1664 | 292,1076.3,373.9,162.9,422.4,1 1665 | 292,1289.7,349.9,179.1,457,1 1666 | 292,1593.3,497.3,110.3,207,1 1667 | 292,1522.9,384,113.3,313.8,0.999 1668 | 293,1697.2,526.4,111.8,209,1 1669 | 293,1077.6,365.8,158.6,428.2,1 1670 | 293,1293.7,352.1,184.5,450,1 1671 | 293,1592.8,499.6,110.8,207.6,1 1672 | 293,1527.1,382.9,114.7,311.7,0.999 1673 | 293,1880.7,422.6,39.3,198.6,0.473 1674 | 294,1090.2,366.4,146.1,420.2,1 1675 | 294,1690.9,524.1,115.2,213.2,1 1676 | 294,1592.8,506.8,112.2,200.5,1 1677 | 294,1300.4,355.5,186.9,437.9,1 1678 | 294,1535.5,393.3,131.2,302.4,0.995 1679 | 294,1882,425.3,38,185.6,0.809 1680 | 295,1695.1,523.3,112.3,207.3,1 1681 | 295,1585.1,502.2,121.4,204.8,1 1682 | 295,1308.3,363.6,185.3,432.5,1 1683 | 295,1090.1,365.7,148.4,413,1 1684 | 295,1881.6,424.8,38.4,191.1,0.932 1685 | 295,1544.3,400.9,113,279.8,0.34 1686 | 295,1225,348.5,115.4,412.1,0.092 1687 | 296,1694.8,525.5,108.9,206.7,1 1688 | 296,1589,509.6,119.6,192.7,1 1689 | 296,1094.7,370.3,151.9,409.6,1 1690 | 296,1316.7,362.3,187.5,433.8,1 1691 | 296,1881.5,425.7,38.5,191.7,0.958 1692 | 296,1220.2,352.5,129.6,403.7,0.816 1693 | 296,1550.2,398.1,107.4,291.6,0.72 1694 | 297,1693.6,522.1,107.7,213.3,1 1695 | 297,1587.7,516,120.2,186.1,1 1696 | 297,1331.9,356.8,182,437.4,1 1697 | 297,1111.1,369.9,135.1,403.3,1 1698 | 297,1226.6,356.4,139.4,399.7,0.981 1699 | 297,1881.1,425.1,38.9,196.8,0.967 1700 | 298,1588.4,515.2,119.6,189.2,1 1701 | 298,1691.2,523.4,108.5,210.8,1 1702 | 298,1339.9,355.4,179.6,435.5,1 1703 | 298,1111.5,369.4,141.1,405.4,1 1704 | 298,1236.7,350.4,135,403.9,0.996 1705 | 298,1881.4,424.3,38.6,198.8,0.972 1706 | 299,1587.8,514.1,121,190,1 1707 | 299,1697.5,523.8,99.5,211.3,1 1708 | 299,1352.5,358.4,175.7,429.7,1 1709 | 299,1120.5,368.2,139.2,408.9,1 1710 | 299,1238.9,358.2,142.9,389.5,0.998 1711 | 299,1882,422.3,38,196.3,0.975 1712 | 300,1592.2,511.3,115.7,191.7,1 1713 | 300,1352.4,356.1,181.3,436.9,1 1714 | 300,1698,523.6,100.3,207.7,1 1715 | 300,1126.7,370.7,139.5,406.2,1 1716 | 300,1241.7,356.5,145.2,390.5,0.998 1717 | 300,1881.5,422.2,38.5,195.2,0.971 1718 | 301,1594,517.3,113.9,182.4,1 1719 | 301,1359.7,351.9,175.4,442.7,1 1720 | 301,1697.4,523.1,98.2,210.2,1 1721 | 301,1133.4,373.1,140.6,397.9,1 1722 | 301,1257.7,350,126.5,395.5,0.993 1723 | 301,1881.9,423.6,38.1,194.4,0.947 1724 | 302,1365,352.1,175.7,437.3,1 1725 | 302,1591,509.5,115.4,191.4,1 1726 | 302,1697.8,525.1,98.2,205.3,1 1727 | 302,1139.6,373.3,147.2,393.8,1 1728 | 302,1256.7,359.8,113.4,380.2,0.996 1729 | 302,1880.7,427.2,39.3,186.3,0.932 1730 | 303,1592.1,506,114.1,194.5,1 1731 | 303,1369.5,350.7,174,431.7,1 1732 | 303,1698,525.6,99,205.3,1 1733 | 303,1140.6,370.9,153.8,402.8,1 1734 | 303,1881.5,428.8,38.5,185.2,0.814 1735 | 303,1260,368.2,99.3,371.7,0.315 1736 | 304,1589.6,505.2,118.7,195.5,1 1737 | 304,1373.9,351.9,173.7,425.4,1 1738 | 304,1698.4,526.7,99,205.2,1 1739 | 304,1154.5,368.4,149.1,396.8,1 1740 | 304,1881.4,430.6,38.6,187.3,0.868 1741 | 304,1274.5,359.4,105.9,380.6,0.259 1742 | 305,1375,353.2,177.5,427.5,1 1743 | 305,1590.1,508.9,119.5,199.2,1 1744 | 305,1700.4,525.4,97.8,207.8,1 1745 | 305,1154.8,374.3,144.3,396.8,1 1746 | 305,1274.3,355.1,109.9,391,0.983 1747 | 305,1880.9,431.1,39.1,191.4,0.821 1748 | 306,1589.2,498.4,117.7,204.3,1 1749 | 306,1379.4,357.1,172.9,422.6,1 1750 | 306,1701.9,524.1,98.1,207.4,1 1751 | 306,1156.8,370.9,141.5,397.6,1 1752 | 306,1276.6,351.4,116,392.5,0.988 1753 | 306,1881.5,431.3,38.5,194.6,0.781 1754 | 307,1386.1,361.5,170.5,422.1,1 1755 | 307,1585.3,498.6,122.2,204.3,1 1756 | 307,1696.7,522.3,100.3,209.7,1 1757 | 307,1165,372.4,139.3,390.4,1 1758 | 307,1284.9,354.5,113.3,387.3,0.99 1759 | 307,1882,431.8,38,194.8,0.462 1760 | 308,1388.6,368.2,170,418.3,1 1761 | 308,1589.8,495,115.1,213.5,1 1762 | 308,1697.4,523.2,96.5,210.6,1 1763 | 308,1165.4,375.8,131.6,392.1,1 1764 | 308,1290.8,357.3,111.9,384.8,0.998 1765 | 308,1883.3,433.1,36.7,190.9,0.389 1766 | 309,1394.2,361.2,174.4,422.1,1 1767 | 309,1695,525,97.6,207,1 1768 | 309,1584.2,487.9,120.9,218.4,1 1769 | 309,1170.2,377.6,135.2,384,1 1770 | 309,1290,361,114.6,378.1,0.999 1771 | 309,1884.3,432,35.7,196.4,0.178 1772 | 310,1586.2,491.9,115.8,213.7,1 1773 | 310,1400,363.1,171.1,414.3,1 1774 | 310,1694.3,524.3,97.9,208,1 1775 | 310,1174.3,377.4,133,383.6,1 1776 | 310,1295.7,358.9,111.1,385.4,0.999 1777 | 311,1695.8,525.1,96.5,205.8,1 1778 | 311,1412.6,371.1,165.5,400.8,1 1779 | 311,1585.7,481.4,114.9,226.3,1 1780 | 311,1174.9,377.8,134.1,374.4,1 1781 | 311,1296.8,363.5,112.5,375.3,0.997 1782 | 312,1412.1,365.3,166.3,409.4,1 1783 | 312,1586.6,479.2,115.4,226.3,1 1784 | 312,1174.1,376.3,139.7,381.8,1 1785 | 312,1694.6,523.8,96.6,207.3,1 1786 | 312,1298.1,358.5,117.9,373.5,0.997 1787 | 313,1694,526,97.7,205.4,1 1788 | 313,1177.3,382.8,144.5,375.7,1 1789 | 313,1412.2,364.1,163.7,408.9,1 1790 | 313,1588,474.6,107.3,231.6,1 1791 | 313,1303.3,355.9,117.3,378.3,0.997 1792 | 314,1689.2,522.3,102.5,210.1,1 1793 | 314,1586.8,473.2,108.3,232.7,1 1794 | 314,1178.3,380.3,150.5,373.5,1 1795 | 314,1417.6,358.6,161,417.7,1 1796 | 314,1305.2,368.6,113,368.5,0.998 1797 | 315,1691,526.3,97.1,206.3,1 1798 | 315,1182.4,384.7,146.4,367.7,1 1799 | 315,1587.2,472.5,106.1,232.2,1 1800 | 315,1416.2,361.9,162.9,410.1,1 1801 | 315,1306.3,365,116.5,370.8,0.982 1802 | 316,1690.7,526.9,98.4,205.2,1 1803 | 316,1184.7,384.8,145.2,370.4,1 1804 | 316,1586,466.2,109.2,238.8,1 1805 | 316,1408.2,360.4,170.3,409.6,1 1806 | 316,1309.4,365.9,120.3,367.3,0.995 1807 | 317,1688.2,526.1,100.3,203.4,1 1808 | 317,1584.8,460.4,110.7,248.4,1 1809 | 317,1189.7,382,147.1,369,1 1810 | 317,1422.9,365.1,163,406.3,1 1811 | 317,1309.3,370.6,123.5,355.8,0.993 1812 | 318,1685,523.5,101.5,209.2,1 1813 | 318,1583.9,461.7,107.4,250.3,1 1814 | 318,1422.5,372.6,162.9,393.3,1 1815 | 318,1192.6,379.8,147.9,374.3,1 1816 | 318,1309.1,362.4,124.8,365.3,0.999 1817 | 319,1683.9,524.1,101.9,206.6,1 1818 | 319,1429.8,362.5,163.2,404.3,1 1819 | 319,1197.5,384.3,148.9,367,1 1820 | 319,1581,451.7,109.6,254.8,1 1821 | 319,1314.1,363.2,126.7,363.6,0.988 1822 | 320,1679.4,520.9,102.2,213.4,1 1823 | 320,1585.8,451.6,102.4,254.4,1 1824 | 320,1434.5,379.1,165.9,389.9,1 1825 | 320,1200.8,386.6,147.7,364.7,1 1826 | 320,1318.9,366.3,120.8,366.3,0.963 1827 | 321,1679.3,525.1,104.9,208.6,1 1828 | 321,1588,448.1,101.3,261.1,1 1829 | 321,1207.5,386.9,145.2,368.3,1 1830 | 321,1442.5,365.9,161.2,398.6,1 1831 | 321,1316,369.9,123.4,351.9,0.88 1832 | 322,1674.5,523.5,106.3,214.8,1 1833 | 322,1213.8,384,146.4,370.1,1 1834 | 322,1452.9,364.9,154.1,401.3,1 1835 | 322,1584.5,452.8,105.8,251.4,1 1836 | 323,1672.2,527,111.3,208.7,1 1837 | 323,1219.4,385.4,144.7,366.2,1 1838 | 323,1453.3,365.2,154.4,397.2,1 1839 | 323,1586.1,436.7,101.2,267.9,1 1840 | 324,1669.5,526.2,111.5,208.3,1 1841 | 324,1229.7,384.7,140.8,361.2,1 1842 | 324,1442.7,367.3,168.3,393.7,1 1843 | 324,1587.5,436,100.7,276,0.999 1844 | 325,1668.6,525.8,111.9,207.5,1 1845 | 325,1440,365.2,169.7,383,1 1846 | 325,1230.3,382.7,144.7,359.3,1 1847 | 325,1587.8,432.9,102,276.9,0.999 1848 | 326,1669.2,526.6,112.7,202.2,1 1849 | 326,1438.8,365.9,173.1,382.1,1 1850 | 326,1236.4,382,141.5,358.1,1 1851 | 326,1590.7,427.5,105.3,280.1,0.999 1852 | 326,1176.4,413.7,112.6,295.8,0.43 1853 | 327,1668.4,522.6,108.9,209.3,1 1854 | 327,1241.5,382.6,137.4,357.2,1 1855 | 327,1441.2,375.8,171.4,376.8,1 1856 | 327,1594.1,420.6,99.8,278.3,0.999 1857 | 327,1168.6,408.1,121,308,0.927 1858 | 328,1669,523.1,106.4,209.5,1 1859 | 328,1442.9,374.5,167.5,379.6,1 1860 | 328,1242.8,383.2,140.2,356.8,1 1861 | 328,1593.9,419.8,97.9,287.6,1 1862 | 328,1162.6,401.6,128.3,321.1,0.905 1863 | 329,1669.9,527.3,105.2,201.6,1 1864 | 329,1447.5,372.5,159.8,378.7,1 1865 | 329,1596.5,411.9,96.1,296.7,1 1866 | 329,1247.5,384.2,137.2,355.8,1 1867 | 329,1155.3,401,135.8,322.5,0.997 1868 | 330,1672.8,525.9,101.3,201.7,1 1869 | 330,1449.7,372.1,156.6,378.4,1 1870 | 330,1599.4,408.8,94.8,300.6,1 1871 | 330,1251.5,383.9,140.3,354.8,1 1872 | 330,1151.4,401.2,141,319.2,1 1873 | 331,1448.8,382.5,154.2,371.1,1 1874 | 331,1672.4,526.8,100.9,203.3,1 1875 | 331,1257.2,387.1,139.9,350.9,1 1876 | 331,1602.8,410.1,90.2,292.6,1 1877 | 331,1150.5,400.7,144,320.8,1 1878 | 332,1675.3,527.8,95.1,204,1 1879 | 332,1450,384.6,149,366.7,1 1880 | 332,1149,398.9,144.1,321.1,1 1881 | 332,1264.1,395.9,138.7,347.3,1 1882 | 332,1603.5,407.8,96.3,301.5,1 1883 | 332,1705.8,403,93.1,262.3,0.997 1884 | 333,1677.5,527.4,91.4,205.7,1 1885 | 333,1449.1,383.7,149.3,365.8,1 1886 | 333,1268.5,385.8,137.7,352.6,1 1887 | 333,1150.9,391.3,140.3,339.5,1 1888 | 333,1604.2,407.4,102.6,298.6,1 1889 | 333,1705.1,402.3,100.4,263.3,0.999 1890 | 334,1678.3,529.2,91.6,205.6,1 1891 | 334,1448.5,378.9,146.2,368.3,1 1892 | 334,1271.2,397.4,140.7,327.7,1 1893 | 334,1149.8,390.9,139.8,342.8,1 1894 | 334,1610.5,405.7,110,285.4,0.999 1895 | 334,1713.2,397.4,97.2,265.6,0.999 1896 | 335,1448.3,381.1,146.8,363.7,1 1897 | 335,1280.1,396.1,135.1,337,1 1898 | 335,1148.2,392.2,139.9,342.3,1 1899 | 335,1607.4,407.1,112,283.9,0.999 1900 | 335,1722.4,401.9,79.4,259.9,0.998 1901 | 336,1447.6,381.4,149.5,362.3,1 1902 | 336,1144.9,400.9,144.3,319.6,1 1903 | 336,1283.5,397,134,337.1,1 1904 | 336,1723.8,406.1,89.2,259.3,0.999 1905 | 336,1611.1,405.2,115.4,295.9,0.998 1906 | 337,1445.9,377,146.9,366,1 1907 | 337,1143.2,400.8,142.4,324.2,1 1908 | 337,1291.1,398.6,131.3,330.1,1 1909 | 337,1726.8,403,92.9,261,0.998 1910 | 337,1612,397.8,129.8,304.5,0.997 1911 | 338,1141.7,402.4,144.5,320.9,1 1912 | 338,1445.9,383.6,147.3,360.9,1 1913 | 338,1684.9,529.1,81.6,202,1 1914 | 338,1295.2,396.4,132.6,337.1,1 1915 | 338,1614.7,398.4,127.8,305.9,0.999 1916 | 338,1728.2,406.4,86.7,254,0.994 1917 | 339,1144,392.6,143.4,346.4,1 1918 | 339,1682.7,525,85.2,205.6,1 1919 | 339,1445.1,383.7,146.1,362.6,1 1920 | 339,1301.3,393.9,133.8,337.1,1 1921 | 339,1616,403.7,143.3,303.7,0.999 1922 | 339,1732.8,401.5,87.6,271.7,0.998 1923 | 340,1144.7,391.7,143,347.2,1 1924 | 340,1681.6,526.4,87.7,203.7,1 1925 | 340,1302.6,395.1,132.7,336.4,1 1926 | 340,1445.2,380.6,146.8,361.1,1 1927 | 340,1737.4,401.7,96.6,261.7,0.999 1928 | 340,1614.2,406.1,141.7,304.8,0.976 1929 | 341,1143.2,399.5,143.3,325.8,1 1930 | 341,1680.9,531,88,197.7,1 1931 | 341,1310.7,399.1,125.4,330.9,1 1932 | 341,1446.2,380.5,144,360.1,1 1933 | 341,1737.9,402.8,107.4,260.4,0.999 1934 | 342,1678.9,524.3,89.4,204.4,1 1935 | 342,1141.9,387.7,144.6,351.6,1 1936 | 342,1313.5,394.7,132,330.3,1 1937 | 342,1447.2,384,147.4,359.1,1 1938 | 342,1742.7,406.6,113,249.6,0.999 1939 | 343,1673.8,517.7,92.6,210.1,1 1940 | 343,1140.6,385.6,145.4,354.3,1 1941 | 343,1450.1,389.9,146.7,345.9,1 1942 | 343,1316.5,390.1,135.5,335.2,1 1943 | 343,1749.7,403.8,107.9,256.4,0.998 1944 | 344,1138.5,383.9,143.9,356.6,1 1945 | 344,1453.9,390.4,144,343.8,1 1946 | 344,1318.6,392,137,330.5,1 1947 | 344,1673.6,507.5,98.4,217.6,1 1948 | 344,1750.3,403.4,98.9,255.7,0.998 1949 | 345,1138.9,381.8,144.2,360.6,1 1950 | 345,1327.6,401.4,134.5,314.9,1 1951 | 345,1679.5,523.2,90.3,202.7,1 1952 | 345,1454.4,389.5,141.7,344.9,1 1953 | 345,1753.7,403.4,95.9,259.4,0.991 1954 | 346,1135.4,386,144.4,360.6,1 1955 | 346,1330.9,396.8,134.6,327.6,1 1956 | 346,1678.1,520.6,88.8,207.8,1 1957 | 346,1454.7,388.8,145.4,346.3,1 1958 | 346,1751,399.9,100.8,262.5,0.95 1959 | 347,1132.8,383.4,149.6,362.9,1 1960 | 347,1678.3,526.2,87.4,204.1,1 1961 | 347,1335.7,398.9,132.8,324.5,1 1962 | 347,1458.7,395.9,144.2,334,1 1963 | 347,1754.9,399.1,96.7,263.8,0.73 1964 | 348,1674.6,528.1,92.3,203.8,1 1965 | 348,1126.2,389.1,153.8,361.1,1 1966 | 348,1341.5,400.4,130.2,321.6,1 1967 | 348,1461.3,391.2,145.5,341.1,1 1968 | 348,1752.7,405.3,101.7,257.7,0.735 1969 | 349,1677.7,529.2,87.6,200.3,1 1970 | 349,1128.1,385.3,151.5,364.9,1 1971 | 349,1347.3,403.7,128.9,319,1 1972 | 349,1464,393.3,145,339.1,1 1973 | 349,1755.8,401.9,98.9,258.8,0.9 1974 | 350,1678.1,529.4,88.5,201.5,1 1975 | 350,1463.4,394.5,144.6,331.2,1 1976 | 350,1128.8,384.1,149.1,369.4,1 1977 | 350,1354.8,407.3,127.5,320.9,1 1978 | 350,1761.1,406.4,99.6,254.2,0.984 1979 | 350,1692.8,398.2,116.2,289.4,0.879 1980 | 351,1678,525.3,87.3,205.8,1 1981 | 351,1466.4,395.7,143,329.5,1 1982 | 351,1126.9,382.9,149,371.3,1 1983 | 351,1359.1,407.8,128.6,321,1 1984 | 351,1698.4,399.8,111.9,294,0.918 1985 | 351,1765.1,405.1,89.9,249.7,0.726 1986 | 351,1629.2,443.4,67.1,225.4,0.635 1987 | 352,1124.2,388.4,150.9,359.2,1 1988 | 352,1468.4,392.9,147,325.1,1 1989 | 352,1678,525.4,89.5,204,1 1990 | 352,1362.9,406.6,128.2,312.3,1 1991 | 353,1119.4,377.4,157.1,378.5,1 1992 | 353,1473.8,393.1,140.7,329.5,1 1993 | 353,1367.4,411.8,126.6,299.8,1 1994 | 353,1697.6,391.6,113,321.3,1 1995 | 354,1119.8,381.7,150.9,365.7,1 1996 | 354,1478.5,393.3,136.2,325.2,1 1997 | 354,1373.2,407.6,126.7,298.2,1 1998 | 354,1701.3,390.5,109.1,319.7,1 1999 | 355,1113.2,372.2,160,384.6,1 2000 | 355,1483.4,393.8,138,321.9,1 2001 | 355,1375.9,406,127.6,299,1 2002 | 355,1710.8,383.4,106.8,340.1,0.999 2003 | 356,1112.1,372.6,158.1,381.7,1 2004 | 356,1379,405.1,126.7,303,1 2005 | 356,1486.7,396.7,134.9,320.8,1 2006 | 356,1712,387.3,106.8,325.9,1 2007 | 357,1109.7,370.2,159.2,387.1,1 2008 | 357,1387.7,414.4,125.7,302.1,1 2009 | 357,1677.9,527.2,90.3,206.3,1 2010 | 357,1489.5,388.4,132.6,330.5,1 2011 | 357,1716.9,387.5,107.3,329.1,0.999 2012 | 358,1107.2,371.1,160.2,386.8,1 2013 | 358,1681.8,525.2,89.6,209.6,1 2014 | 358,1390.9,413.4,128.8,302.7,1 2015 | 358,1491,401.9,133.8,309.5,1 2016 | 358,1719.7,390.8,109.2,322.1,0.999 2017 | 359,1105.4,370.5,159.1,388,1 2018 | 359,1684.5,526.1,90.7,208.6,1 2019 | 359,1491.6,398.8,132.4,321.7,1 2020 | 359,1393.6,406,129,309.9,1 2021 | 359,1723.1,387,106.4,325.4,0.999 2022 | 360,1102.6,368.2,160.8,393.9,1 2023 | 360,1690.5,526.8,94.9,210,1 2024 | 360,1497.7,398.8,132.6,323.3,1 2025 | 360,1399.5,407.1,129.1,311.5,1 2026 | 360,1727,388.1,105.8,320.7,0.999 2027 | 361,1102.3,370,160.8,391.6,1 2028 | 361,1693.5,528.4,103.4,208.8,1 2029 | 361,1500.1,397.7,133.6,322.5,1 2030 | 361,1405,408.8,125.4,307,1 2031 | 361,1731,388.1,104.4,309.4,0.999 2032 | 362,1100.5,370.5,161.5,391.7,1 2033 | 362,1702.3,521,101.8,212.8,1 2034 | 362,1509,398.4,130.3,314.7,1 2035 | 362,1408.7,407.7,127.3,306.1,1 2036 | 362,1740.3,390.8,103.8,320.7,0.998 2037 | 363,1099.9,371.7,162.6,392.2,1 2038 | 363,1707.4,520.6,104.6,214.4,1 2039 | 363,1510.5,397,134.7,313.2,1 2040 | 363,1415.9,413.6,124.8,290.6,1 2041 | 364,1099.3,371.7,163.4,394.3,1 2042 | 364,1517,395.1,132.2,312.1,1 2043 | 364,1713.2,520.1,102.8,216.8,1 2044 | 364,1419.1,409.4,128.5,297.6,1 2045 | 365,1098.4,367.9,161.3,402.5,1 2046 | 365,1719.8,519.7,105.5,217.7,1 2047 | 365,1521.7,398.5,132.1,316.3,1 2048 | 365,1422.4,406.9,128.8,306.5,1 2049 | 365,4.2,223.8,170.1,756.6,0.906 2050 | 365,1754.4,386.9,126.1,335.4,0.058 2051 | 366,1726.4,519.5,108.8,218.7,1 2052 | 366,1097.3,367.1,164,403.8,1 2053 | 366,1528.1,399.7,130.2,309.5,1 2054 | 366,1426.9,408,126.6,298.8,1 2055 | 366,1,206.7,189.9,787.8,0.998 2056 | 367,1727.2,520.7,121.1,222.2,1 2057 | 367,1100.4,357.6,158.2,415.7,1 2058 | 367,1537,402.4,127.8,313.2,1 2059 | 367,1.5,211.4,194.5,795.2,1 2060 | 367,1425.2,408.3,126.2,297.7,1 2061 | 368,1742.4,526.2,109,216.1,1 2062 | 368,1097.4,357,159.5,418.3,1 2063 | 368,1538.1,410.4,132,304.4,1 2064 | 368,7.7,243.4,186.1,754.2,1 2065 | 368,1425.7,405.6,123,299.6,1 2066 | 369,1095,356.8,160.8,417.5,1 2067 | 369,1748.5,521.8,109.9,220.4,1 2068 | 369,1543.2,407.5,129.8,306.9,1 2069 | 369,1433,405.7,125.2,295.7,1 2070 | 369,14.5,242.5,246,748.9,1 2071 | 370,1090.9,361.4,160.3,424.4,1 2072 | 370,1757.5,519.2,112.1,223.7,1 2073 | 370,22.9,247.2,289.5,743.8,1 2074 | 370,1545.5,406.4,132,297.9,1 2075 | 370,1441.2,408.2,124.7,292,1 2076 | 371,1766.3,521.4,109.7,216.3,1 2077 | 371,1087,360,161.4,427.6,1 2078 | 371,1553.8,399.9,132.6,308.5,1 2079 | 371,35.1,249.6,337.1,737.1,1 2080 | 371,1447,411,120.5,290.5,1 2081 | 371,1693.4,438.3,68.1,222.4,0.094 2082 | 372,1082.2,356.6,162.6,428.5,1 2083 | 372,1779,521.6,104.5,221.8,1 2084 | 372,34,251.7,394.7,731.6,1 2085 | 372,1454.6,409.6,120.4,292.2,1 2086 | 372,1560.8,404.4,127.3,306.6,1 2087 | 372,1691.7,429.5,93.7,236.8,0.442 2088 | 373,46,261.7,398,714.5,1 2089 | 373,1452.8,407.4,122.4,298.5,1 2090 | 373,1078.6,358.7,162,427.8,1 2091 | 373,1791.9,521.1,97.1,220.7,1 2092 | 373,1568.4,406.2,128.1,300.3,1 2093 | 373,1688.4,432.6,105.7,229.6,0.993 2094 | 374,42.4,271.8,420,704,1 2095 | 374,1073.7,360.5,165.7,428.3,1 2096 | 374,1799.7,515.1,101.9,228.8,1 2097 | 374,1459.3,412.3,121.3,286.7,1 2098 | 374,1572.2,408.5,129.4,299.3,1 2099 | 374,1691.8,425.9,101.5,235.1,0.99 2100 | 375,1810,521.9,98.9,218,1 2101 | 375,61.8,266.8,417.7,690.5,1 2102 | 375,1464.7,415.2,120.8,286.5,1 2103 | 375,1070.3,361,165.2,429.5,1 2104 | 375,1580.4,406.3,128.5,300,1 2105 | 375,1695.5,425.4,92.9,233.2,0.996 2106 | 376,1067.6,359.2,167,433,1 2107 | 376,1467.7,415,121.8,286,1 2108 | 376,1819.1,523.8,95.7,215.4,1 2109 | 376,1585.9,406.1,126.6,297.2,1 2110 | 376,78.6,272.5,412.6,670.9,1 2111 | 376,1703.3,422.4,86.6,235.7,0.998 2112 | 377,1473.1,415.6,120.2,276.9,1 2113 | 377,1590.6,403.4,127.8,290.6,1 2114 | 377,1057.6,361,171.7,432.6,1 2115 | 377,137.7,277,359.5,670.8,1 2116 | 377,1820.2,529.5,99.8,221.6,1 2117 | 378,1477.2,414.8,119.9,279.5,1 2118 | 378,1052.9,365.2,166.6,433,1 2119 | 378,1821.7,521.2,98.3,225.3,1 2120 | 378,1597.5,405.1,125.2,293.9,1 2121 | 378,180.9,275.6,314.7,674.9,1 2122 | 378,1774.6,489.7,67.7,143.1,0.063 2123 | 379,1048.5,359.6,169.3,435.2,1 2124 | 379,1479.1,413.3,120,279.9,1 2125 | 379,218.3,280.3,272.2,659.4,1 2126 | 379,1833.8,525.2,86.2,218.7,1 2127 | 379,1599.1,402.9,124.5,291.8,1 2128 | 379,1773.5,449.7,65.2,194.8,0.072 2129 | 380,1039.8,354.4,171.6,444,1 2130 | 380,1483.3,411.8,117.3,278.9,1 2131 | 380,1604,409.3,123.9,289,1 2132 | 380,260.5,265.5,237.7,660.4,1 2133 | 380,1847.2,529.7,72.8,224.2,0.998 2134 | 380,1784.2,450.8,52,194.1,0.471 2135 | 381,1035.6,346.3,179.1,452.4,1 2136 | 381,1602.9,407.8,129.8,291.9,1 2137 | 381,1488.9,410.8,115.3,277.2,1 2138 | 381,296.1,280.9,205,647.8,1 2139 | 381,1858.6,531.2,61.4,219.2,0.995 2140 | 381,1786.2,444.5,47,204.3,0.087 2141 | 382,1030,340.3,179.5,461.9,1 2142 | 382,325.4,279.1,206.9,640.9,1 2143 | 382,1491.5,409.5,119.7,279,1 2144 | 382,1608.1,408.9,127.4,291,1 2145 | 382,1840.2,369.5,79.8,361.9,0.927 2146 | 383,1023.3,338.8,183.3,465.8,1 2147 | 383,1611.2,407.7,128.8,290.9,1 2148 | 383,336.7,285.5,209.3,632.9,1 2149 | 383,1493,409.2,123.6,283.1,1 2150 | 383,1841.8,365.6,78.2,373.6,0.865 2151 | 384,1024.5,348.1,176.9,461.4,1 2152 | 384,1617.2,410.7,126.2,286.1,1 2153 | 384,343.1,283,230.5,633.2,1 2154 | 384,1501.8,409.6,117.6,277.3,1 2155 | 384,1784.4,455.3,68.2,188.5,0.987 2156 | 384,1848.1,369.4,71.9,365.2,0.8 2157 | 385,1016.3,347.7,177.9,462.9,1 2158 | 385,1621,409.9,125.5,286.4,1 2159 | 385,1505.6,414,115.6,271.5,1 2160 | 385,367.1,295.1,245.8,621.1,1 2161 | 385,1789.6,450.7,65.3,192.7,0.999 2162 | 385,1853.1,379.3,66.9,356.9,0.174 2163 | 386,1006.6,349.1,191.7,462.7,1 2164 | 386,1624.6,408.3,123.6,288.5,1 2165 | 386,370.5,293.6,258,612.7,1 2166 | 386,1511.8,416.5,113,267.9,1 2167 | 386,1792.3,449.5,64.5,190.8,1 2168 | 386,1857.9,366,62.1,368,0.193 2169 | 387,1005.3,348,185.3,473.5,1 2170 | 387,1514.5,419.1,111.3,267.4,1 2171 | 387,1631.7,402.8,122.7,291.4,1 2172 | 387,380,294.7,272.4,611.7,1 2173 | 387,1795.1,449.3,64,189.2,1 2174 | 388,998.3,341.6,194,481.8,1 2175 | 388,1514.6,417.7,112.7,269.9,1 2176 | 388,1636.5,409.9,124.1,285.2,1 2177 | 388,380,299.6,286.8,608.4,1 2178 | 388,1799,449.5,62.9,189.6,0.999 2179 | 388,1864.5,367.6,55.5,375.3,0.058 2180 | 389,993.9,348.9,189.8,472.2,1 2181 | 389,1517.9,415.5,115.3,274.7,1 2182 | 389,390.7,300.1,299.8,608.9,1 2183 | 389,1638.5,405,126,288.8,1 2184 | 389,1800.8,449.5,64.4,189.3,0.999 2185 | 389,1159,459.8,64.4,191.3,0.988 2186 | 390,978.9,346.8,204.3,480.9,1 2187 | 390,1521.5,414.6,115.7,273.1,1 2188 | 390,424.2,295.2,269.2,617.8,1 2189 | 390,1640.9,406.4,128.1,288.9,1 2190 | 390,1804.7,453.3,63.7,183.6,1 2191 | 390,1163.6,460.7,64.4,188.3,0.998 2192 | 391,977.9,339.1,201.8,490.2,1 2193 | 391,1525.3,415.4,113.8,270.6,1 2194 | 391,1644,415,124.2,278.8,1 2195 | 391,444.8,303.7,255.6,601.7,1 2196 | 391,1806.9,453.7,63.3,181.7,1 2197 | 391,1168.4,459.3,63.3,191.6,0.999 2198 | 392,962.4,334.2,213.4,490.2,1 2199 | 392,1530.3,416,113.3,266.4,1 2200 | 392,486.6,298.9,220.4,584.4,1 2201 | 392,1648.4,412.2,123.3,282.8,1 2202 | 392,1808.9,454.9,63.5,181.8,1 2203 | 392,1172.4,453.2,63.7,199.1,1 2204 | 393,958,329.3,211.2,502.4,1 2205 | 393,1650,414.4,122,279.5,1 2206 | 393,1535.3,417.1,112.7,262.1,1 2207 | 393,502.6,295.7,209.6,585,1 2208 | 393,1810.2,453,62.6,185.3,1 2209 | 393,1176.4,453.2,62.9,198.4,0.999 2210 | 394,951.8,327.5,212.4,500.4,1 2211 | 394,527.4,296,193.2,575.5,1 2212 | 394,1653.8,410.8,122.5,287.6,1 2213 | 394,1540.7,411,112.2,267.3,1 2214 | 394,1810.6,451.7,63.8,186.7,1 2215 | 394,1181.8,455.4,61.7,194.7,1 2216 | 395,1659.5,412.4,121.2,277.2,1 2217 | 395,942.4,328.7,208.5,499.7,1 2218 | 395,1545.1,412.8,111.5,269.5,1 2219 | 395,551.6,307.5,177.8,558.5,1 2220 | 395,1185.2,453.1,60.2,197.4,1 2221 | 395,1812.6,453.8,62.9,183.2,1 2222 | 396,940.5,328.1,205.6,498.5,1 2223 | 396,1549.9,414.7,112.6,268.2,1 2224 | 396,1660.4,411.2,121.9,279.5,1 2225 | 396,1190,458.1,60,193.9,1 2226 | 396,565.5,306.1,188.6,554,1 2227 | 396,1814.9,453.4,61.3,184.3,1 2228 | 397,926.7,323.6,214.2,512.4,1 2229 | 397,1554,417.5,112.7,263.1,1 2230 | 397,1665.5,415,121.1,274.1,1 2231 | 397,577.3,307.4,219.9,552.9,1 2232 | 397,1193,454.9,61.8,195.3,1 2233 | 397,1821.4,453.6,57.2,184.9,1 2234 | 398,917.1,316.6,216.9,525.2,1 2235 | 398,1557,417.8,109.7,262.2,1 2236 | 398,1671.8,414,119.9,279.5,1 2237 | 398,586.8,318.3,234,535.4,1 2238 | 398,1196.6,455.4,63.2,192.8,1 2239 | 398,1823.6,454.2,55.8,183.1,1 2240 | 399,907.4,326.7,222.7,517.7,1 2241 | 399,589.7,327.2,258.7,524.6,1 2242 | 399,1558.3,418.3,112.1,262.8,1 2243 | 399,1678.1,410.2,120,281.1,1 2244 | 399,1201,456.2,64,192.4,1 2245 | 399,1823,455.2,58.2,183,1 2246 | 400,900.4,324.8,220.1,525.4,1 2247 | 400,1565.2,418.4,108.4,263.5,1 2248 | 400,1685.1,410.6,120,276.5,1 2249 | 400,605.3,328.4,252.2,522.7,1 2250 | 400,1204.1,453.8,63.5,195.5,1 2251 | 400,1825.3,454.2,60.8,183.8,1 2252 | 401,894.2,326.2,221.5,529.7,1 2253 | 401,1689.3,411.7,122.2,274.8,1 2254 | 401,1567.3,417.8,111,264,1 2255 | 401,608.2,327.2,247.3,525.2,1 2256 | 401,1207.8,455,63.7,194.3,1 2257 | 401,1828.5,455.9,57.9,180,1 2258 | 402,1573.6,421.1,106.4,251.6,1 2259 | 402,1691.3,411.6,121.6,273.8,1 2260 | 402,882.8,320.9,229.9,534.1,1 2261 | 402,1213.4,453.6,61.9,194.5,1 2262 | 402,620.6,324.2,241.8,525.4,1 2263 | 402,1829,456,59.4,182.4,0.999 2264 | 403,1576.3,419,106.5,252.4,1 2265 | 403,1691.8,411,121,274.3,1 2266 | 403,879.7,311.6,222.9,541.6,1 2267 | 403,627.7,329.8,238.8,513.8,1 2268 | 403,1216.4,452.6,63.1,195.3,1 2269 | 403,1828.9,458,60.1,179.3,0.999 2270 | 404,869.2,315.9,227.2,542.5,1 2271 | 404,1578.2,417.6,105.3,253.6,1 2272 | 404,1220.5,452.2,61.7,196.8,1 2273 | 404,1690.9,414.7,123.5,267.3,1 2274 | 404,647.4,323.5,224.1,523.8,1 2275 | 404,1829.5,454.1,61.6,183.6,0.999 2276 | 405,857.5,309,234.3,542.5,1 2277 | 405,1225.1,452.9,60.3,193.8,1 2278 | 405,664.3,324.5,213.3,520.9,1 2279 | 405,1583.1,415.6,104.3,256.5,1 2280 | 405,1696.1,410.6,119,271.5,1 2281 | 405,1834.4,451.9,61.7,180.6,0.999 2282 | 406,856.5,299.3,221,551.6,1 2283 | 406,691.7,330.3,187.5,499.7,1 2284 | 406,1588.2,417.4,107.5,256.3,1 2285 | 406,1228.5,453,59.9,193.2,1 2286 | 406,1696.3,414.4,122.2,267.7,1 2287 | 406,1839.1,454.9,58.2,176,1 2288 | 407,848.2,302.8,220.1,549,1 2289 | 407,1699.9,414.1,120.4,271.6,1 2290 | 407,1234.7,453.2,61.1,193.4,1 2291 | 407,1591.5,415.7,110.5,257.3,1 2292 | 407,722.7,322.7,157.1,510,1 2293 | 407,1840.3,454.9,59.6,175.7,1 2294 | 408,1705.4,416.1,113.5,265.7,1 2295 | 408,831.4,308.6,227.6,563.5,1 2296 | 408,1236.4,452.4,62,196,1 2297 | 408,1596,417.2,109.3,256.1,1 2298 | 408,1842.7,454.8,58.2,176.4,1 2299 | 408,743.3,319.2,145,502.4,0.998 2300 | 409,1706.2,415.2,119.3,267.1,1 2301 | 409,830,301.4,230.3,567.2,1 2302 | 409,1601.9,422,107,248.9,1 2303 | 409,1238.1,452.2,62.4,195.3,1 2304 | 409,1844.5,447.2,58.2,186.2,0.999 2305 | 410,809.8,309.3,240.4,565,1 2306 | 410,1710.4,410.7,120.4,267.3,1 2307 | 410,1242.9,453.1,63.7,196.4,1 2308 | 410,1609.3,423.3,102.5,248.7,1 2309 | 410,1844.6,438.6,57.9,198.1,0.308 2310 | 411,1610.1,422.9,101.9,246.9,1 2311 | 411,805,307.3,235.5,573.5,1 2312 | 411,1709.9,411.7,123.9,265.4,1 2313 | 411,1248.1,454.6,61.1,194.8,1 2314 | 412,1616.1,423.4,101.9,245.5,1 2315 | 412,787.2,307,242.6,566.9,1 2316 | 412,1716.5,410.5,117.2,265.6,1 2317 | 412,1249.9,452.8,64.3,197.9,1 2318 | 413,1720.6,410.6,118.2,270.2,1 2319 | 413,781.7,291.7,238.3,594.2,1 2320 | 413,1254.7,453,61.8,197.7,1 2321 | 413,1620.4,419.6,101.6,252.6,1 2322 | 414,774.7,287.7,234.8,592.7,1 2323 | 414,1259.3,455.3,60.6,193.7,1 2324 | 414,1624.5,417.6,100.9,254.2,1 2325 | 414,1722.6,411.7,117.9,268.4,1 2326 | 415,767.3,287.8,230.8,606.6,1 2327 | 415,1627.2,417.6,100.6,251,1 2328 | 415,1725.1,414.5,121.5,265.6,1 2329 | 415,1262.9,453.5,62.6,194.4,1 2330 | 416,755,290.4,244,597.7,1 2331 | 416,1633.2,419.7,100.6,248.7,1 2332 | 416,1264.8,454.4,64.1,193.5,1 2333 | 416,1730.8,421.4,113.2,252.8,1 2334 | 417,740.6,280.5,252.1,618.6,1 2335 | 417,1636.5,418.5,101.4,249.9,1 2336 | 417,1731.1,419.5,117.8,258.1,1 2337 | 417,1268.5,455.5,63.4,193.9,1 2338 | 418,729.6,275.8,248,624.2,1 2339 | 418,1736.5,421.1,114.9,254.4,1 2340 | 418,1636.9,414.5,100.5,256.6,1 2341 | 418,1274.3,455,62.1,194.7,1 2342 | 419,725.5,277.8,248.9,617.9,1 2343 | 419,1643.3,419.1,99.2,248.2,1 2344 | 419,1279.7,453.2,61.4,195.2,1 2345 | 419,1737.7,419.4,120,256.5,1 2346 | 420,1648.1,422.1,101.9,242.6,1 2347 | 420,1283.2,451.9,63.5,197.1,1 2348 | 420,1745.5,420.3,114.2,256.7,1 2349 | 420,708.6,285.1,257.1,612.8,1 2350 | 421,706.9,274.2,250,627.5,1 2351 | 421,1749.4,419.4,113.7,258.1,1 2352 | 421,1653.1,423.6,100.2,242.4,1 2353 | 421,1285.5,450.3,63.4,200.3,1 2354 | 421,912.9,354.1,117.3,423.9,0.75 2355 | 422,683.9,268.1,259.8,650.6,1 2356 | 422,1751.1,417.4,120,249.7,1 2357 | 422,1655.9,424.1,100.5,241.2,1 2358 | 422,1291.7,450.3,61.1,199.7,1 2359 | 422,911.3,343.3,140.9,440.2,0.999 2360 | 423,671.9,263.5,261.1,663.2,1 2361 | 423,1658,418.9,97.4,250.1,1 2362 | 423,914.7,339.6,146,450.7,1 2363 | 423,1755.1,419.5,116.5,247.9,1 2364 | 423,1295.2,450.6,61.5,200.6,1 2365 | 424,660.9,285.4,267,647.4,1 2366 | 424,1663.9,422.6,95.6,248.3,1 2367 | 424,919.7,345.7,158.7,444.8,1 2368 | 424,1758.8,415.3,113.2,249.6,1 2369 | 424,1298.5,452.3,61,199.5,1 2370 | 425,927.8,353.1,167.1,435.5,1 2371 | 425,1671.8,429.1,94.1,236.5,1 2372 | 425,650.1,277,264.4,659.8,1 2373 | 425,1303.5,454.9,61.1,193.6,1 2374 | 425,1762.7,416.9,116.3,250.6,1 2375 | 426,636.8,275.2,276.3,656.3,1 2376 | 426,937.2,355.2,167.2,431.9,1 2377 | 426,1672.7,422.8,97.1,242.9,1 2378 | 426,1304.1,451.9,64.4,194.9,1 2379 | 426,1763.2,419.4,117.3,241.3,1 2380 | 427,936.6,364,174.8,423.7,1 2381 | 427,627.8,267.5,274.8,660.6,1 2382 | 427,1675.6,424.5,95.8,238.7,1 2383 | 427,1312.8,453.5,60.2,194.1,1 2384 | 427,1767.9,418.3,117.4,247,1 2385 | 427,1155.8,483.2,51.9,168.2,0.089 2386 | 428,608.4,262,273.9,681.7,1 2387 | 428,1680.5,422.6,96.9,239.5,1 2388 | 428,944.1,360.9,175.5,425.3,1 2389 | 428,1773.7,419.2,112.2,247,1 2390 | 428,1314.8,452.9,62.7,194.6,1 2391 | 428,1152.4,474.5,63.8,172.6,1 2392 | 429,599.6,258.5,281.3,688.1,1 2393 | 429,962.9,366,161.2,415.6,1 2394 | 429,1684.5,419,96.9,244,1 2395 | 429,1157.1,474.7,61.3,167.7,1 2396 | 429,1778.7,422.2,112.2,247,1 2397 | 429,1317.4,452.3,63,195.3,1 2398 | 430,969,361.2,166.8,413,1 2399 | 430,589.2,247.2,267,701.2,1 2400 | 430,1686.7,425.7,98.8,234,1 2401 | 430,1161.9,473,62.7,168.1,1 2402 | 430,1778.7,422,114.3,246.1,1 2403 | 430,1321.7,450.6,64.8,194.5,1 2404 | 431,984.9,359.6,154.3,415,1 2405 | 431,569,242,276.9,711.9,1 2406 | 431,1166.6,474.2,64,166,1 2407 | 431,1691.9,424.3,94.8,231.1,1 2408 | 431,1781.5,421.7,117.4,244.9,1 2409 | 431,1326.5,451.1,64.7,195.4,0.999 2410 | 432,993.9,359.3,150.4,414.8,1 2411 | 432,1170.8,473.3,64.4,165.5,1 2412 | 432,556.5,238.1,282.4,711.4,1 2413 | 432,1789.4,425.5,111.5,240.4,1 2414 | 432,1329.2,450.8,64.8,198.2,1 2415 | 432,1701,423.9,94,236.6,1 2416 | 433,1007.8,357.9,145.1,416.9,1 2417 | 433,1171.8,473.2,67.3,169,1 2418 | 433,548.8,233.6,266.7,726.5,1 2419 | 433,1789.5,422.8,116.4,241.2,1 2420 | 433,1332.7,448.3,66.7,199,1 2421 | 433,1702.3,425.8,99.6,233.2,1 2422 | 434,1791.8,422,115.2,242.3,1 2423 | 434,1176.3,473.5,67,168.2,1 2424 | 434,537.6,229.1,270.4,739.6,1 2425 | 434,1019.8,356,144.3,413.3,1 2426 | 434,1336.2,449.2,62.3,196.2,1 2427 | 434,1706.1,425.4,95.6,232.4,1 2428 | 435,1034,355.7,138.8,412.3,1 2429 | 435,516.1,239,275.3,726,1 2430 | 435,1183.6,472.8,63.3,167,1 2431 | 435,1801.2,411.4,107,255.8,1 2432 | 435,1341.6,449.9,62.4,195.6,1 2433 | 435,1714.9,424.4,89.9,232.9,1 2434 | 436,1039.8,362.5,137.8,406.3,1 2435 | 436,501.6,257.9,289.2,719.1,1 2436 | 436,1345.6,449,62.1,192,1 2437 | 436,1187.3,470,63.1,167.5,1 2438 | 436,1807.8,415.5,104.4,252.8,1 2439 | 436,1716.9,421.9,91.7,235.6,1 2440 | 437,489.7,244.1,268.7,737.5,1 2441 | 437,1349.2,449.3,62.2,194.9,1 2442 | 437,1039.8,366.5,147.1,399.8,1 2443 | 437,1719,421.7,88.2,230.4,1 2444 | 437,1189.9,466.9,67.9,172.4,1 2445 | 437,1810.6,417.1,101.8,247,1 2446 | 438,471.9,242.2,274.8,739.9,1 2447 | 438,1051.1,368.5,143.9,397.6,1 2448 | 438,1353.9,450.5,64.8,196.3,1 2449 | 438,1193.4,466.9,67,179.6,1 2450 | 438,1728.4,421,87.7,236.1,1 2451 | 438,1808.1,414.6,111.8,248.9,0.999 2452 | 439,452.3,237.7,286.7,750,1 2453 | 439,1054.6,364.1,148.4,399.3,1 2454 | 439,1806.4,419.4,107.7,242.5,1 2455 | 439,1199.9,468.7,62.8,175,1 2456 | 439,1356.8,452,64.2,194.4,1 2457 | 439,1729.6,419.8,87.7,236.8,1 2458 | 440,1060.5,362.7,152,411.7,1 2459 | 440,441.5,223.3,298.4,782.9,1 2460 | 440,1205.5,467.6,64.6,179.5,1 2461 | 440,1733.3,422.7,91.4,234,1 2462 | 440,1361,450.9,60.5,198,1 2463 | 440,1,286,157.6,625.3,0.9 2464 | 440,1832.3,405.1,87.7,263.8,0.747 2465 | 441,419.5,231.8,293.2,786.3,1 2466 | 441,1066.1,372.9,154.6,387.7,1 2467 | 441,1734.3,424.6,92.8,231.1,1 2468 | 441,1209.9,467.6,63.8,178.1,1 2469 | 441,1363.8,453,64.8,195,1 2470 | 441,1853.2,381.9,66.8,299.4,0.679 2471 | 442,1072.7,375.7,156,391.4,1 2472 | 442,1736.1,423.6,93.9,230.9,1 2473 | 442,403.7,227.8,302.6,787.4,1 2474 | 442,1364.5,451,65.9,196.2,1 2475 | 442,1212.8,469.7,62.3,172.7,1 2476 | 442,1,275.2,213,659.2,0.999 2477 | 442,1849.3,385.9,70.7,293.4,0.933 2478 | 443,1092.1,371.3,144.1,383.5,1 2479 | 443,397.1,197.8,290.2,804.6,1 2480 | 443,1743.9,424.8,95.8,228.5,1 2481 | 443,1370.7,451.1,64.8,195.6,1 2482 | 443,1,265.4,236.1,679.7,1 2483 | 443,1847,388.6,73,289.9,0.999 2484 | 443,1213.2,471.9,66.3,169.4,0.999 2485 | 444,384.3,226.7,285,794,1 2486 | 444,1102.8,374.6,132.8,380.9,1 2487 | 444,1.7,284.1,251.1,662.1,1 2488 | 444,1375.6,450.9,61.8,191.4,1 2489 | 444,1748,425.7,92.5,228.5,1 2490 | 444,1842.8,388.3,77.2,287.9,0.999 2491 | 444,1219.8,468.7,65.2,175.9,0.999 2492 | 445,348.2,225.6,310.8,795.3,1 2493 | 445,1115.5,367,132.1,383.9,1 2494 | 445,1382.5,455.1,61.2,189,1 2495 | 445,1,277.8,274.5,669.5,1 2496 | 445,1754.6,425.3,84.9,233.7,1 2497 | 445,1831.4,383.1,88.6,290.3,0.999 2498 | 445,1226.1,472.2,61.8,169.5,0.998 2499 | 445,1713.6,433.9,65.3,189.5,0.207 2500 | 446,317.8,216.6,327.1,809.8,1 2501 | 446,1129.4,373.7,120.5,372.6,1 2502 | 446,1,284.2,276.9,662.1,1 2503 | 446,1384.9,454.3,61.3,192.1,1 2504 | 446,1757.3,428.2,89.7,230.3,0.999 2505 | 446,1823.7,387.3,96.3,293.2,0.999 2506 | 446,1228.3,469.2,63.1,173,0.994 2507 | 446,1718.6,423.1,56.9,205.5,0.192 2508 | 447,1133.2,365.2,125.2,378.2,1 2509 | 447,3.8,281.3,292.1,658.2,1 2510 | 447,1387.1,450.5,62.3,196.1,1 2511 | 447,293.2,201.4,349.8,821.4,1 2512 | 447,1809.2,388.9,110.8,290.8,0.999 2513 | 447,1748.2,431.7,96.3,224.8,0.943 2514 | 447,1230.1,475.5,57,154.6,0.692 2515 | 448,1144.2,374.9,125.4,372.6,1 2516 | 448,261.4,208.1,382.5,834.7,1 2517 | 448,1,274.3,280.4,664.4,1 2518 | 448,1391.2,452.8,62.2,192.9,1 2519 | 448,1781.5,388.8,138.5,285.4,0.999 2520 | 448,1720.1,414.4,76.8,230.2,0.994 2521 | 448,1246.8,474.4,49.3,163.7,0.31 2522 | 449,1147.7,377.4,135.2,369.2,1 2523 | 449,232.5,214.7,393.6,831,1 2524 | 449,1395.3,452.5,64.1,194.2,1 2525 | 449,1,293.4,278.9,632,0.999 2526 | 449,1776.1,391.2,143.9,279.4,0.999 2527 | 449,1720.2,411.7,84.3,235.6,0.985 2528 | 450,220.1,200,364.4,849.9,1 2529 | 450,1401.2,451.9,60.9,192.9,1 2530 | 450,1.6,290.9,283.2,669.1,1 2531 | 450,1152.2,372.5,145.5,374.2,1 2532 | 450,1769.4,401,150.1,279.6,1 2533 | 450,1722.6,420.3,76.5,216.7,0.34 2534 | 451,1156.4,382.5,156.1,361.7,1 2535 | 451,1404,450.3,62.7,194.2,1 2536 | 451,1766.8,390.6,139.9,287.4,1 2537 | 451,214.7,182.7,365.9,865.1,1 2538 | 451,4.4,268.4,280.6,662.7,0.999 2539 | 451,1728.6,431.6,66.2,192.2,0.165 2540 | 452,1160.8,382.4,164,364,1 2541 | 452,1763.7,396,136,290.9,1 2542 | 452,1408,450.1,61.9,195,1 2543 | 452,194.9,190.9,362.9,857.4,1 2544 | 452,30.3,275.7,259.6,685.3,0.999 2545 | 452,1730.3,437.8,64,184.6,0.077 2546 | 453,1168.9,381.3,166,366.3,1 2547 | 453,170.8,180.6,374.3,878,1 2548 | 453,1758.2,393.5,133.5,286.6,1 2549 | 453,1413.9,449.1,62.8,192.1,1 2550 | 453,60.9,263.1,214.7,662.4,0.769 2551 | 454,1180.4,381.1,156.7,364.7,1 2552 | 454,172.3,179.5,345.5,886.2,1 2553 | 454,1415.8,450.6,62.9,195.2,1 2554 | 454,1751.9,388.7,128.6,293.4,1 2555 | 455,1191.4,383.8,148.9,358,1 2556 | 455,144.2,176.6,352.4,903.4,1 2557 | 455,1419.8,448.5,65,200.9,1 2558 | 455,1744.1,386.7,121.9,294.4,1 2559 | 455,1827.3,386.9,92.7,278.2,0.085 2560 | 456,1201.3,385,142.2,350.7,1 2561 | 456,118.4,175.8,358.2,904.2,1 2562 | 456,1422.7,450.5,63.8,193.5,1 2563 | 456,1733.6,393.3,113.9,285.5,1 2564 | 456,1808.1,391.3,111.9,283.8,0.898 2565 | 457,1218.7,378.2,130.4,359.1,1 2566 | 457,77.1,158,374.4,922,1 2567 | 457,1427.5,448.3,63.8,194.4,1 2568 | 457,1725.4,391.9,113.3,281.5,0.999 2569 | 457,1806.8,391.5,113.2,284,0.987 2570 | 458,42.4,160.6,373.1,919.4,1 2571 | 458,1229,378.3,125.3,357.3,1 2572 | 458,1431.1,449.1,63.3,193.9,1 2573 | 458,1717.6,395.3,105.9,283.6,0.999 2574 | 458,1793.7,389.6,121.8,289.1,0.997 2575 | 459,1231.1,375.8,125.5,365.9,1 2576 | 459,18.6,156.8,384.5,923.2,1 2577 | 459,1435.5,446.3,67.1,200.3,1 2578 | 459,1707.7,395.2,109.8,285.4,1 2579 | 459,1787.2,394,107.6,281.9,0.994 2580 | 460,1238.7,374,130.5,352.9,1 2581 | 460,10.5,154.2,375.1,925.8,1 2582 | 460,1691.9,390,117.3,294.6,1 2583 | 460,1438.7,447.8,64.5,192.6,1 2584 | 460,1783.7,395.1,97.8,282.6,0.995 2585 | 461,1247.7,372.8,130.3,360.3,1 2586 | 461,4.6,155,359.7,925,1 2587 | 461,1441.4,447.1,65.9,199.2,1 2588 | 461,1676.8,398.3,137.7,276.3,1 2589 | 461,1764.6,396.2,108.2,272.9,0.551 2590 | 462,1259.8,380.4,127.6,357.1,1 2591 | 462,1,139,347.2,941,1 2592 | 462,1445.6,448.4,66,198.8,1 2593 | 462,1670,403.9,142.1,280.6,1 2594 | 462,1765.9,404,109,257.5,0.052 2595 | 463,1268.5,387,119.9,338.7,1 2596 | 463,1450.9,451.8,63.9,194.8,1 2597 | 463,1,154,325.8,926,1 2598 | 463,1655.6,406.4,152.3,276.5,1 2599 | 463,214,284,243.4,619.2,0.541 2600 | 464,1271,376,128.2,348.2,1 2601 | 464,1456.2,450.4,65.8,198.2,1 2602 | 464,1647.7,402.4,146.5,279.3,1 2603 | 464,1,139.3,299.2,940.7,0.999 2604 | 464,186.3,295.3,295.1,606.1,0.996 2605 | 464,1805,424.3,84.6,229.5,0.866 2606 | 465,1288.7,390.4,120.6,337.7,1 2607 | 465,1463.6,455.1,62.9,191.1,1 2608 | 465,207.8,306.4,271.8,579.8,1 2609 | 465,1646,401.7,146.5,274.5,0.999 2610 | 465,1807.5,425.4,78.5,227.4,0.992 2611 | 465,7,153.1,238.8,926.9,0.895 2612 | 466,1291.9,394.1,125.1,329.9,1 2613 | 466,1467,459.6,61.2,185.8,1 2614 | 466,219.1,295.7,262,606.6,1 2615 | 466,1641.6,407.3,139.5,277.1,1 2616 | 466,1808.9,424.9,80.1,226.3,0.993 2617 | 466,1.1,111.3,235.6,968.7,0.52 2618 | 467,1293.9,387.9,125.2,333.2,1 2619 | 467,232.4,304.4,262.2,603.8,1 2620 | 467,1466,459.3,64.9,185.8,1 2621 | 467,1637.1,405.5,129.9,273.9,0.999 2622 | 467,1808.1,423.6,82.3,228.9,0.987 2623 | 467,16.2,158.5,214.2,921.5,0.179 2624 | 468,1300.5,385.2,127.7,335.1,1 2625 | 468,263.7,300.9,230.6,603.8,1 2626 | 468,1472.3,454.1,65.3,195,1 2627 | 468,1634.9,405.2,115.9,264.6,0.997 2628 | 468,1702.9,394.5,135.1,282.1,0.995 2629 | 468,1813.1,423.2,75.9,231.1,0.981 2630 | 468,5.1,23.7,178.8,1056.3,0.086 2631 | 469,1306.9,382.7,122.5,338.8,1 2632 | 469,274.9,302.7,227.6,589.9,1 2633 | 469,1474,451.9,71.5,197.2,1 2634 | 469,1681.9,398.2,160.4,280.2,0.999 2635 | 469,1631.5,403.2,103.7,271.6,0.978 2636 | 469,1811.1,426.3,79.7,219.8,0.966 2637 | 470,302.7,302.4,203.8,583.9,1 2638 | 470,1316.7,383.9,121,337.8,1 2639 | 470,1477.7,448.8,82.5,202.2,0.999 2640 | 470,1681.8,396,158.2,282.6,0.999 2641 | 470,1624.5,400.9,98.9,276.9,0.999 2642 | 470,1816.3,428.4,73.3,216,0.978 2643 | 471,309.8,298.3,220.3,573.1,1 2644 | 471,1322.9,383.6,124.2,334.1,1 2645 | 471,1481.7,450.2,86.6,198.9,1 2646 | 471,1685.1,397.6,144,281.6,0.999 2647 | 471,1813.5,431.1,79.8,212.5,0.998 2648 | 471,1614.9,411.4,96.2,266.1,0.997 2649 | 471,1153.7,464.6,53.5,188.6,0.975 2650 | 472,1326.1,380.8,131.7,341.1,1 2651 | 472,318.4,307,221.7,583.3,1 2652 | 472,1151.1,463.9,61,186.5,1 2653 | 472,1486.9,451.1,95.1,199.7,1 2654 | 472,1669.6,399.2,149.4,273.1,1 2655 | 472,1820.5,429.3,74.3,212,1 2656 | 472,1609.9,408,91.3,265.1,0.995 2657 | 473,1335.6,383,127.6,335.7,1 2658 | 473,1152.6,462.2,70.8,186.5,1 2659 | 473,1673.9,395.4,121.7,278.4,1 2660 | 473,328.1,294,236,582.7,1 2661 | 473,1821.9,430.6,75.6,214.1,1 2662 | 473,1491.4,446.2,103.1,206.2,1 2663 | 473,1601.6,414.9,96.2,264.2,0.999 2664 | 474,1340.4,378.3,127.6,338.1,1 2665 | 474,331.7,301.7,252.3,575.9,1 2666 | 474,1153.2,460.4,75.9,189.1,1 2667 | 474,1821.8,432.2,75.7,210.4,1 2668 | 474,1666.9,401.2,118.4,274.8,1 2669 | 474,1495.7,444.7,102.2,209.3,1 2670 | 474,1595.5,403.4,100.2,274,0.999 2671 | 475,1350.3,380.9,130.4,332.9,1 2672 | 475,1821.6,430.5,77.8,213.3,1 2673 | 475,352.5,303.4,265.5,572.5,1 2674 | 475,1154.8,462.5,83.6,186.2,1 2675 | 475,1658.7,396.6,111.8,284.5,0.999 2676 | 475,1500.5,445.8,103.9,211.5,0.998 2677 | 475,1577.9,411.9,112.2,272.3,0.996 2678 | 476,1356.8,386.9,136,329.8,1 2679 | 476,359.9,302.9,272.8,573.2,1 2680 | 476,1822.2,427.4,78.7,216.1,1 2681 | 476,1159.1,463,84.8,185.4,1 2682 | 476,1649.4,396.8,109.3,278.8,1 2683 | 476,1506.6,448.2,92,204,0.993 2684 | 476,1562.9,408.8,131.4,269.6,0.993 2685 | 477,1164,461.5,88.6,188,1 2686 | 477,368.3,297.9,271.5,569.9,1 2687 | 477,1364.2,388,134.7,326.8,1 2688 | 477,1826.1,428.8,75.6,211.9,1 2689 | 477,1645.7,400.7,107.2,277.2,0.999 2690 | 477,1557,406.1,134.4,267.5,0.997 2691 | 477,1521.3,443.1,71.9,209.3,0.195 2692 | 478,1168.8,461.8,90,186.2,1 2693 | 478,372.5,302.7,275.6,567.9,1 2694 | 478,1368.3,393.3,133.3,318.7,1 2695 | 478,1828.7,427.4,72,212.7,1 2696 | 478,1541.2,409,145.7,258.6,0.999 2697 | 478,1632,404.5,116.3,274.8,0.998 2698 | 479,1173.9,458.7,88.1,189.6,1 2699 | 479,1370.4,391.9,133.8,320.1,1 2700 | 479,380.3,302.9,266.3,568,1 2701 | 479,1831.4,426.6,72.8,214.9,1 2702 | 479,1625.7,406,113.1,274.3,0.999 2703 | 479,1544.4,412.5,129.2,263.9,0.997 2704 | 480,1183.3,458.2,84.2,188.1,1 2705 | 480,1380.2,391.1,128.3,321.1,1 2706 | 480,392.5,312,252.8,553.9,1 2707 | 480,1832.3,430.6,76.6,209.2,1 2708 | 480,1615.2,404.2,116.4,275.5,1 2709 | 480,1546.3,421.8,119.6,250.8,0.975 2710 | 481,1186.9,458,83.2,188.6,1 2711 | 481,1385.6,390.5,128.4,322.4,1 2712 | 481,406.7,309.9,245.6,550.2,1 2713 | 481,1835,429.2,73.5,214.7,1 2714 | 481,1607.9,403.4,120.8,275.7,1 2715 | 481,1543.1,419.8,111.3,248,0.915 2716 | 482,1191.7,459,81.7,190.2,1 2717 | 482,1388.2,389.9,125.2,324,1 2718 | 482,401.2,310.2,250.9,555.9,1 2719 | 482,1836.1,431.4,73,209.1,1 2720 | 482,1600.4,414.3,125.6,266.1,0.999 2721 | 482,1538,415.6,104.5,260.1,0.98 2722 | 483,1200.3,457.6,75.7,192.6,1 2723 | 483,1398.4,388.9,115,323.9,1 2724 | 483,422.3,303.9,233.1,554.8,1 2725 | 483,1837.9,433.1,73.4,207.7,1 2726 | 483,1592.5,408.8,129.8,267.1,1 2727 | 483,1533.7,411.5,97.4,262.8,0.975 2728 | 483,1806.5,423.2,63.3,199.2,0.123 2729 | 483,5.4,300.9,165.7,690.8,0.106 2730 | 484,1203.6,457.5,75.9,190.9,1 2731 | 484,426.3,308.9,230.8,545.9,1 2732 | 484,1406,387,111.5,324.8,1 2733 | 484,1588.5,406.6,124.8,268.6,1 2734 | 484,1837.5,435,72.9,201.2,0.999 2735 | 484,1527.3,417.4,99.9,256.2,0.995 2736 | 484,7.3,215.4,183.6,768.8,0.382 2737 | 485,1207.6,455.1,82.6,194.3,1 2738 | 485,442.7,308.2,221.9,537.4,1 2739 | 485,1412.8,392.1,107.5,315.7,1 2740 | 485,1583.9,414,115.2,265.9,1 2741 | 485,1800.8,419.5,80,216.8,0.999 2742 | 485,1517.4,411.3,101.3,262.6,0.984 2743 | 485,1,200.8,237.8,815.2,0.961 2744 | 486,1208.8,454.3,87.6,194.9,1 2745 | 486,453.8,317.6,221.8,539.6,1 2746 | 486,1417.4,387.6,108.7,321.9,1 2747 | 486,1576,411,114.9,266.8,1 2748 | 486,1798.7,421.5,79.7,213.6,0.999 2749 | 486,1.8,211,250.5,806.5,0.998 2750 | 486,1515.9,417.6,90.8,251.9,0.883 2751 | 487,1214.1,459.6,85.5,192.3,1 2752 | 487,462.4,319.5,201.4,530.7,1 2753 | 487,1419.3,386.2,108.3,316.1,1 2754 | 487,1798.5,423,80.7,213,1 2755 | 487,1572.5,414.2,111,260.1,1 2756 | 487,1,221.5,257.9,796.7,0.998 2757 | 487,1505.6,410.8,86.4,267.2,0.784 2758 | 488,1220.2,458.3,89.7,194.2,1 2759 | 488,482.8,321.3,186.9,527.7,1 2760 | 488,1800.8,425.5,80.7,210.8,1 2761 | 488,1425.5,386.8,106.2,316.7,1 2762 | 488,1560.7,408.5,106.6,270.4,0.999 2763 | 488,1,232.3,268.3,777.2,0.999 2764 | 488,1500.3,422.9,97.6,263.7,0.972 2765 | 489,1223.9,457.4,88.5,191.4,1 2766 | 489,488.3,304.9,193,546.7,1 2767 | 489,1430.8,395.2,110.3,313.6,1 2768 | 489,1801,424.4,81,211.1,1 2769 | 489,1556.9,402.6,102.1,274.2,0.999 2770 | 489,1,227.6,277.2,782,0.999 2771 | 490,1230,455.4,91.6,198.1,1 2772 | 490,507.2,307.9,177,534.2,1 2773 | 490,1442.2,396.9,104.5,311,1 2774 | 490,1803.5,420.6,81,211.4,1 2775 | 490,1556.6,411.7,99.6,262.3,1 2776 | 490,10,208.1,294.9,794.4,0.999 2777 | 491,1233,455.3,93.8,200.6,1 2778 | 491,507.8,316.5,180.6,523.4,1 2779 | 491,1806.5,422.4,79.6,209,1 2780 | 491,13.9,220.1,303.8,789.3,1 2781 | 491,1446.5,396,108.9,308.9,1 2782 | 491,1548.1,410.1,106.6,264.6,0.999 2783 | 492,1239,457.2,90.9,195.5,1 2784 | 492,523.6,315.2,174.8,517.6,1 2785 | 492,1809.7,423.9,77.1,205.6,1 2786 | 492,24.6,215.7,343,770.2,1 2787 | 492,1541.9,414.2,107.7,261.5,0.999 2788 | 492,1447.5,395.4,110.2,310,0.999 2789 | 493,1249.4,453.9,84.1,198.4,1 2790 | 493,530.9,327,175.6,526.1,1 2791 | 493,1813.1,421,77.2,209.9,1 2792 | 493,1452.9,393.9,111.6,309.1,0.999 2793 | 493,56.6,221,346.2,746.9,0.999 2794 | 493,1534.4,424.1,108,245.1,0.998 2795 | 494,1254.5,451.7,82.3,198.3,1 2796 | 494,532.1,327.7,186.6,518.5,1 2797 | 494,1462.4,396.5,106.4,308.1,1 2798 | 494,1814.4,421,79.8,210.3,1 2799 | 494,71,223.4,356.6,749.2,0.999 2800 | 494,1528.7,423.9,105.3,248.4,0.991 2801 | 495,1263.7,448.1,81.6,199.5,1 2802 | 495,541.5,329,186.9,514.8,1 2803 | 495,87,228.2,376.3,748.6,1 2804 | 495,1468.1,396.2,104.2,308.2,1 2805 | 495,1816.7,421.8,79.4,209.3,1 2806 | 495,1541.5,437.8,98.5,222.6,0.528 2807 | 496,553.3,332.7,184.4,515.6,1 2808 | 496,101.3,247.8,393.3,736.7,1 2809 | 496,1818.1,420.8,82.7,210.6,1 2810 | 496,1474.6,394.4,103.8,307.8,1 2811 | 496,1547.4,438.3,96.3,224.5,0.582 2812 | 497,561.8,317.3,187.5,519.5,1 2813 | 497,109.9,244.8,411.2,733.1,1 2814 | 497,1819.5,421.3,82.9,211.2,1 2815 | 497,1475.5,394.4,107.9,304.2,0.998 2816 | 497,1436.6,421.4,69.9,255.1,0.787 2817 | 497,1548.2,434.3,101.1,233.2,0.338 2818 | 498,139.7,250.4,394.4,721.4,1 2819 | 498,565.7,332,187.7,504.4,1 2820 | 498,1820,422.3,78.9,208.8,1 2821 | 498,1422.1,418.7,90.1,250.2,0.999 2822 | 498,1480.6,391.5,110.3,302,0.999 2823 | 498,1588.5,447.8,79.9,198.1,0.998 2824 | 499,570.9,331.3,187,507.6,1 2825 | 499,1281.5,450.2,85.2,198.6,1 2826 | 499,138.2,247,407.7,721,1 2827 | 499,1821,422.9,76.5,206.8,1 2828 | 499,1489.7,396.3,106.1,300.9,1 2829 | 499,1417.1,425.8,93.8,243.5,1 2830 | 499,1596,448.9,75.9,198,0.996 2831 | 500,584.7,332.5,180.9,507.1,1 2832 | 500,1285.2,450.7,93.7,195.5,1 2833 | 500,1494.9,391.5,102.5,307.3,1 2834 | 500,165.2,244,391.5,714.1,1 2835 | 500,1822.8,421.8,76,205.4,1 2836 | 500,1408.2,431.4,94.6,238.6,1 2837 | 500,1599.9,450.1,76.1,196.8,0.997 2838 | 501,590.7,333.3,179.1,504.5,1 2839 | 501,1496.7,393.1,103.5,308.2,1 2840 | 501,1288.6,455.1,94.7,191.7,1 2841 | 501,206.3,255.8,365.1,711.8,1 2842 | 501,1823.2,422.3,75.5,204.8,1 2843 | 501,1405.1,432,96.8,239.4,1 2844 | 501,1609,451.7,72.4,193.3,0.999 2845 | 502,597.6,330.6,177.2,501.1,1 2846 | 502,1290.6,453.3,97.2,197.8,1 2847 | 502,1824.2,424,75.5,203.4,1 2848 | 502,259.8,249.5,313.1,714.7,1 2849 | 502,1613.8,450.1,70.9,196.3,1 2850 | 502,1497.2,394.5,106.5,302.4,1 2851 | 502,1402.9,429.9,96.3,243.2,1 2852 | 503,605.8,328.2,173.8,498.1,1 2853 | 503,1297.3,452.6,94.3,196.8,1 2854 | 503,1826.6,424,73.8,204.8,1 2855 | 503,311.3,236.3,269.6,726.1,1 2856 | 503,1611.3,444.9,74.1,200,0.999 2857 | 503,1395.4,445,94.8,226.6,0.999 2858 | 503,1504,400.9,100.8,297,0.999 2859 | 504,611.6,327.7,175,498.1,1 2860 | 504,1298.9,453.7,90.5,199.6,1 2861 | 504,1827.3,425.4,74.5,202.7,1 2862 | 504,351.8,242.3,240.1,704.1,1 2863 | 504,1511.1,403.4,97.7,296,1 2864 | 504,1610.4,445.5,76.9,198.2,0.999 2865 | 504,1387,439.8,98.6,228.6,0.999 2866 | 505,619.9,326.2,174.3,492,1 2867 | 505,1828.3,424.4,74.9,202.2,1 2868 | 505,1306.6,451.7,91.4,198.9,1 2869 | 505,388.6,240.1,216.9,691.1,1 2870 | 505,1511.2,400.1,108.7,295.8,1 2871 | 505,1381.5,439.4,98.1,231.1,0.999 2872 | 505,1609.8,444.8,76.7,197,0.999 2873 | 505,1464.9,419.5,57.4,252.7,0.269 2874 | 506,626.5,326.2,172.3,490.5,1 2875 | 506,1828.3,424.6,77,202.4,1 2876 | 506,397.7,239.1,225,698,1 2877 | 506,1517.6,400.4,105.1,289.3,1 2878 | 506,1371.2,437.3,99.4,232.7,1 2879 | 506,1311.6,451.3,89.5,196.8,0.999 2880 | 506,1616.3,446.2,73.2,195.9,0.995 2881 | 506,1455.6,421,78.6,255.6,0.905 2882 | 507,1826.8,425.8,80.3,204.2,1 2883 | 507,632.3,331,181.5,492.9,1 2884 | 507,1517.1,396.3,104,296.3,1 2885 | 507,407.8,256.6,241.4,650.4,1 2886 | 507,1367.6,439.2,94.9,229.1,0.999 2887 | 507,1619.4,445,72.3,196.7,0.998 2888 | 507,1452.9,428.1,88.7,240.9,0.995 2889 | 507,1326.6,460.1,64.9,184.5,0.792 2890 | 508,1828.1,427.4,80.5,201.3,1 2891 | 508,1531.4,404.2,95.9,284.9,1 2892 | 508,420.2,257.3,261.5,677.2,1 2893 | 508,636.2,328.9,194.1,490.3,1 2894 | 508,1363.6,442.7,92.5,226,0.999 2895 | 508,1437,430.5,100.9,239.7,0.998 2896 | 508,1624.2,449.1,69.4,191.3,0.996 2897 | 509,1533.2,402,99.8,288.5,1 2898 | 509,1829.9,424,78.3,204.3,1 2899 | 509,408.8,263.1,317.7,651.1,0.999 2900 | 509,1428.2,433.2,105.6,239,0.999 2901 | 509,1361.2,434.7,85.3,232,0.999 2902 | 509,1629.5,448.5,69.7,192.9,0.998 2903 | 509,641.9,327,198.6,492.5,0.997 2904 | 510,1537.3,403.1,100.6,281.9,1 2905 | 510,1827.3,427.4,80.6,203.6,1 2906 | 510,442.9,274.4,304.6,646.9,1 2907 | 510,1357.3,439.2,82.7,227.8,1 2908 | 510,1628.7,445.3,71.4,197.8,0.999 2909 | 510,1410.5,432.3,107.2,238.2,0.995 2910 | 510,653.1,328.4,207.1,486.8,0.912 2911 | 511,1536.9,400.2,102.6,279.5,1 2912 | 511,1832.9,426.8,79.4,202.8,1 2913 | 511,443.1,267.9,323,657.5,1 2914 | 511,1404.7,428,106,247,1 2915 | 511,1632.3,446.7,68.5,196.2,0.999 2916 | 511,1352.4,436.5,82.6,229.4,0.998 2917 | 511,663.5,327.4,207.3,481.8,0.444 2918 | 512,1539.9,398.6,101.2,281,1 2919 | 512,460.4,275.5,311.5,644.2,1 2920 | 512,1835,428.1,77.5,201.1,1 2921 | 512,1408.4,429,93.9,241.2,1 2922 | 512,1343.2,440.1,85.4,222.9,0.999 2923 | 512,1635.2,444.1,66.6,199.7,0.999 2924 | 512,669.5,318.6,207.3,492,0.093 2925 | 513,1545.6,396.4,98.7,285.3,1 2926 | 513,481.9,279.7,289.3,650.7,1 2927 | 513,1401.4,435,93,235.4,1 2928 | 513,1838.4,429.6,74,202,1 2929 | 513,1334.4,440.9,88,225.3,0.999 2930 | 513,1637.5,445.1,64.3,198.8,0.999 2931 | 514,515.8,273.7,261.5,656.3,1 2932 | 514,1552.3,398.6,95.5,277,1 2933 | 514,1838.9,430,73.6,199.2,1 2934 | 514,1637.4,441.6,66.9,201.6,0.999 2935 | 514,1334.2,432.8,84.8,230.3,0.999 2936 | 514,1393.6,422.6,88.2,242.6,0.999 2937 | 515,542.9,269.5,238.8,650.1,1 2938 | 515,1557.3,398.5,94.8,285.6,1 2939 | 515,1327.1,440.9,90.9,226.8,1 2940 | 515,1638.7,442.7,70,201.5,0.999 2941 | 515,1391.6,425.3,85.4,242.9,0.998 2942 | 515,1842.1,434.4,70.4,202.1,0.975 2943 | 516,574.4,265.1,228.2,631.1,1 2944 | 516,1563.5,395.9,93.6,283.3,1 2945 | 516,1314.8,438.9,101.5,227.7,0.999 2946 | 516,1642.6,445.5,65.6,197.6,0.999 2947 | 516,1386.2,426.2,85.5,238.1,0.998 2948 | 516,1840,405.6,80,243.7,0.395 2949 | 517,606.8,259.8,212.8,626.8,1 2950 | 517,1565.9,402.3,95.3,279.8,1 2951 | 517,1384.9,427.4,91,239.5,0.999 2952 | 517,1310.8,444.2,104.4,224.4,0.999 2953 | 517,1646,448,66.9,194.2,0.999 2954 | 518,644.9,269.4,194.4,615.1,1 2955 | 518,1572,399.4,93.9,290.4,1 2956 | 518,1359.7,425.4,114.4,245.2,0.998 2957 | 518,1649.1,446.7,69.9,199.7,0.998 2958 | 518,1847.8,389.2,72.2,270,0.053 2959 | 519,1575.4,405.1,96.7,281.5,1 2960 | 519,650.7,269.9,203.3,611.1,1 2961 | 519,1350.2,428.3,102.4,241.7,0.999 2962 | 519,1652,446.9,67.5,197.3,0.995 2963 | 519,1847.5,384.6,72.5,282.1,0.544 2964 | 520,1579.9,409.4,92.7,276,1 2965 | 520,649.3,274.8,226.5,605.9,1 2966 | 520,1351.8,428.9,95.8,242.5,1 2967 | 520,1655.5,446.9,66.5,196.7,0.997 2968 | 520,1306.6,445.3,76.3,214.6,0.971 2969 | 520,1841.1,380.9,78.9,285.1,0.946 2970 | 521,655.6,263.5,237.8,621.6,1 2971 | 521,1583.8,404.3,88.7,272.2,1 2972 | 521,1347.8,435.7,98.7,230.3,0.999 2973 | 521,1659.8,445.8,65.6,197.5,0.997 2974 | 521,1298.8,441.5,74.2,220.6,0.996 2975 | 521,1837.3,377.4,82.7,285.9,0.991 2976 | 522,662.5,279,256.8,597.2,1 2977 | 522,1588.9,406.5,91.9,272.3,1 2978 | 522,1293.5,436.5,80.1,225.2,0.998 2979 | 522,1344.5,440.6,103.5,218.3,0.998 2980 | 522,1660.4,446.1,69.5,198.1,0.992 2981 | 522,1833.7,371.3,86.3,308.7,0.987 2982 | 523,661.3,283.6,277.4,595,1 2983 | 523,1591.7,402.7,92.7,270.4,1 2984 | 523,1425.4,451.2,85.2,204.6,1 2985 | 523,1339.8,438.3,103.8,220.6,0.999 2986 | 523,1282.4,443.1,78.7,216.6,0.998 2987 | 523,1833.6,366.6,86.4,320.4,0.991 2988 | 523,1661.2,444,67.8,199.2,0.883 2989 | 524,671.3,285.7,280.4,594.2,1 2990 | 524,1434.1,452.2,83.4,205,1 2991 | 524,1336,438.5,105.9,222.1,1 2992 | 524,1597.8,401.8,93,273.8,1 2993 | 524,1827.8,369.4,92.2,318.7,0.998 2994 | 524,1282.4,436.2,76.3,223,0.998 2995 | 524,1652.1,437.8,74.7,214.4,0.683 2996 | 525,684.1,306.2,282,563,1 2997 | 525,1433.1,454.8,94.3,202.5,1 2998 | 525,1333.6,442.4,101.2,219.7,1 2999 | 525,1599.4,398.7,92.7,276.4,1 3000 | 525,1829,369.7,91,316.3,0.999 3001 | 525,1280,438.7,69.4,225.6,0.997 3002 | 525,1659.3,441.8,64.3,205.9,0.108 3003 | -------------------------------------------------------------------------------- /UMA-TEST/models/npair0.1-id0.1-se_block2/checkpoint: -------------------------------------------------------------------------------- 1 | model_checkpoint_path: "model.ckpt-332499" 2 | all_model_checkpoint_paths: "model.ckpt-332499" 3 | -------------------------------------------------------------------------------- /UMA-TEST/models/npair0.1-id0.1-se_block2/model.ckpt-332499.data-00000-of-00001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/models/npair0.1-id0.1-se_block2/model.ckpt-332499.data-00000-of-00001 -------------------------------------------------------------------------------- /UMA-TEST/models/npair0.1-id0.1-se_block2/model.ckpt-332499.index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/models/npair0.1-id0.1-se_block2/model.ckpt-332499.index -------------------------------------------------------------------------------- /UMA-TEST/models/npair0.1-id0.1-se_block2/model.ckpt-332499.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/models/npair0.1-id0.1-se_block2/model.ckpt-332499.meta -------------------------------------------------------------------------------- /UMA-TEST/models/npair0.1-id0.1-se_block2/model_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "z_image_size": 127, 3 | "embed_config": { 4 | "embedding_name": "convolutional_alexnet", 5 | "embedding_checkpoint_file": null, 6 | "train_embedding": true, 7 | "init_method": "kaiming_normal", 8 | "use_bn": true, 9 | "bn_scale": true, 10 | "bn_momentum": 0.05, 11 | "bn_epsilon": 1e-06, 12 | "embedding_feature_num": 256, 13 | "weight_decay": 0.0005, 14 | "stride": 8 15 | }, 16 | "adjust_response_config": { 17 | "train_bias": true, 18 | "scale": 0.001 19 | }, 20 | "channels": 256, 21 | "finetune": false, 22 | "dataset": "MOT17_ALL", 23 | "debug": false, 24 | "specific_conv": false, 25 | "attention": "se_block", 26 | "reid_attention": true, 27 | "track_loss": true, 28 | "triplet": "npair", 29 | "extra_fc": false, 30 | "loss2_ratio": 0.1, 31 | "id_loss": true, 32 | "id_num": 522, 33 | "idloss_ratio": 0.1 34 | } -------------------------------------------------------------------------------- /UMA-TEST/models/npair0.1-id0.1-se_block2/track_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "log_dir": "./models/npair0.1-id0.1-se_block2", 3 | "log_level": 0, 4 | "x_image_size": 255, 5 | "upsample_method": "bicubic", 6 | "upsample_factor": 16, 7 | "num_scales": 3, 8 | "scale_step": 1.0375, 9 | "scale_damp": 0.5, 10 | "scale_penalty": 0.9, 11 | "window_influence": 0.3, 12 | "include_first": false 13 | } 14 | -------------------------------------------------------------------------------- /UMA-TEST/models/npair0.1-id0.1-se_block2/train_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "train_dir": "../UMA-TRAIN/Logs/MOT17_ALL/track_model_checkpoints/200314-UMA-npair0.1-id0.1-se_block2", 3 | "seed": 123, 4 | "train_data_config": { 5 | "input_imdb": "../UMA-TRAIN//data/MOT17_ALL/train_imdb.pickle", 6 | "preprocessing_name": "siamese_fc_color", 7 | "num_examples_per_epoch": 53200.0, 8 | "epoch": 50, 9 | "batch_size": 8, 10 | "max_frame_dist": 100, 11 | "prefetch_threads": 4, 12 | "prefetch_capacity": 120 13 | }, 14 | "validation_data_config": { 15 | "input_imdb": "../UMA-TRAIN/data/validation_imdb.pickle", 16 | "preprocessing_name": "None", 17 | "batch_size": 8, 18 | "max_frame_dist": 100, 19 | "prefetch_threads": 1, 20 | "prefetch_capacity": 90 21 | }, 22 | "gt_config": { 23 | "rPos": 16, 24 | "rNeg": 0 25 | }, 26 | "gt_config_neg": { 27 | "rPos": -1, 28 | "rNeg": 0 29 | }, 30 | "optimizer_config": { 31 | "optimizer": "MOMENTUM", 32 | "momentum": 0.9, 33 | "use_nesterov": false 34 | }, 35 | "lr_config": { 36 | "policy": "exponential", 37 | "initial_lr": 0.01, 38 | "num_epochs_per_decay": 1, 39 | "lr_decay_factor": 0.8685113737513527, 40 | "staircase": true 41 | }, 42 | "clip_gradients": null, 43 | "log_every_n_steps": 10, 44 | "save_model_every_n_step": 6650.0, 45 | "max_checkpoints_to_keep": null 46 | } -------------------------------------------------------------------------------- /UMA-TEST/run_public.py: -------------------------------------------------------------------------------- 1 | import os 2 | import cv2 3 | import numpy as np 4 | import time 5 | from application_util import visualization 6 | from tracker.detection import Detection 7 | from tracker.mot_tracker import MOT_Tracker 8 | import configparser 9 | 10 | def gather_sequence_info(sequence_dir, det_dir): 11 | """Gather sequence information, such as image filenames, detections, 12 | groundtruth (if available). 13 | 14 | Parameters 15 | ---------- 16 | sequence_dir : str 17 | Path to the MOTChallenge sequence directory. 18 | detection_file : str 19 | Path to the detection file. 20 | 21 | Returns 22 | ------- 23 | Dict 24 | A dictionary of the following sequence information: 25 | 26 | * sequence_name: Name of the sequence 27 | * image_filenames: A dictionary that maps frame indices to image 28 | filenames. 29 | * detections: A numpy array of detections in MOTChallenge format. 30 | * groundtruth: A numpy array of ground truth in MOTChallenge format. 31 | * image_size: Image size (height, width). 32 | * min_frame_idx: Index of the first frame. 33 | * max_frame_idx: Index of the last frame. 34 | 35 | """ 36 | image_dir = os.path.join(sequence_dir, "img1") 37 | image_filenames = { 38 | int(os.path.splitext(f)[0]): os.path.join(image_dir, f) 39 | for f in os.listdir(image_dir)} 40 | groundtruth_file = os.path.join(sequence_dir, "gt/gt.txt") 41 | detection_dir = os.path.join(det_dir, '%s.txt' % os.path.basename(sequence_dir)) 42 | if os.path.exists(detection_dir): 43 | detections = np.loadtxt(detection_dir, delimiter=',') 44 | groundtruth = None 45 | if os.path.exists(groundtruth_file): 46 | groundtruth = np.loadtxt(groundtruth_file, delimiter=',') 47 | 48 | if len(image_filenames) > 0: 49 | image = cv2.imread(next(iter(image_filenames.values())), 50 | cv2.IMREAD_GRAYSCALE) 51 | image_size = image.shape 52 | else: 53 | image_size = None 54 | 55 | if len(image_filenames) > 0: 56 | min_frame_idx = min(image_filenames.keys()) 57 | max_frame_idx = max(image_filenames.keys()) 58 | else: 59 | min_frame_idx = int(detections[:, 0].min()) 60 | max_frame_idx = int(detections[:, 0].max()) 61 | 62 | info_filename = os.path.join(sequence_dir, "seqinfo.ini") 63 | if os.path.exists(info_filename): 64 | with open(info_filename, "r") as f: 65 | line_splits = [l.split('=') for l in f.read().splitlines()[1:]] 66 | info_dict = dict( 67 | s for s in line_splits if isinstance(s, list) and len(s) == 2) 68 | 69 | update_ms = 1000 / int(info_dict["frameRate"]) 70 | else: 71 | update_ms = None 72 | 73 | seq_info = { 74 | "sequence_name": os.path.basename(sequence_dir), 75 | "image_filenames": image_filenames, 76 | "detections": detections, 77 | "groundtruth": groundtruth, 78 | "image_size": image_size, 79 | "min_frame_idx": min_frame_idx, 80 | "max_frame_idx": max_frame_idx, 81 | "update_ms": update_ms 82 | } 83 | return seq_info 84 | 85 | 86 | def create_detections(detection_mat, frame_idx): 87 | frame_indices = detection_mat[:, 0].astype(np.int) 88 | mask = frame_indices == frame_idx 89 | 90 | detection_list = [] 91 | for row in detection_mat[mask]: 92 | bbox, confidence = row[1:5], row[5] 93 | detection_list.append(Detection(bbox, confidence)) 94 | return detection_list 95 | 96 | 97 | def run(sequence_dir, det_dir, checkpoint, output_file, 98 | max_age, context_amount, iou, 99 | occlusion_thres, association_thres, display): 100 | 101 | seq_info = gather_sequence_info(sequence_dir, det_dir) 102 | tracker = MOT_Tracker(max_age, occlusion_thres, association_thres) 103 | 104 | conf = configparser.ConfigParser() 105 | conf.read(os.path.join(sequence_dir, 'seqinfo.ini')) 106 | tracker.frame_rate = int(conf.get('Sequence', 'frameRate')) 107 | 108 | if display: 109 | gt = seq_info['groundtruth'][np.where(seq_info['groundtruth'][:,-2] == 1)[0], :] 110 | 111 | results = [] 112 | runtime = [] 113 | detections = seq_info["detections"] 114 | def frame_callback(vis, detections, frame_idx, iou): 115 | 116 | # Load image and generate detections. 117 | print("Processing frame %05d" % frame_idx) 118 | frame_path = seq_info['image_filenames'][int(frame_idx)] 119 | detections = create_detections(detections, frame_idx) 120 | 121 | # Update tracker. 122 | before_time = time.time() 123 | trackers = tracker.update(frame_path, checkpoint, context_amount, detections, iou) # tracking 124 | runtime.append(time.time()-before_time) 125 | # Store results. 126 | for d in trackers: 127 | results.append([ 128 | frame_idx, d[4], d[0], d[1], d[2], d[3]]) 129 | 130 | # Update visualization. 131 | if display: 132 | image = cv2.imread( 133 | seq_info["image_filenames"][frame_idx], cv2.IMREAD_COLOR) 134 | vis.set_image(image.copy()) 135 | vis.draw_detections(detections) 136 | vis.draw_groundtruth(gt[np.where(gt[:,0] == frame_idx)[0], 1], \ 137 | gt[np.where(gt[:,0] == frame_idx)[0], 2: 6]) 138 | record_trks = [t for t in tracker.tracks if (t.is_tracked() and t.time_since_update <= 5)] 139 | vis.draw_trackers(record_trks) 140 | 141 | # Run tracker. 142 | if display: 143 | visualizer = visualization.Visualization(seq_info, detections, iou, update_ms=100) 144 | else: 145 | visualizer = visualization.NoVisualization(seq_info, detections, iou,) 146 | 147 | visualizer.run(frame_callback) 148 | 149 | # Store results. 150 | f = open(output_file, 'w') 151 | for row in results: 152 | print('%d,%d,%.2f,%.2f,%.2f,%.2f,1,-1,-1,-1' % ( 153 | row[0], row[1], row[2], row[3], row[4], row[5]), file=f) 154 | 155 | return sum(runtime) / len(runtime) * 1000 156 | 157 | -------------------------------------------------------------------------------- /UMA-TEST/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding:utf8 -*- 3 | # vim: expandtab:ts=4:sw=4 4 | 5 | import os 6 | import run_public 7 | import config.config as CONFIG 8 | import time 9 | import warnings 10 | warnings.filterwarnings("ignore") 11 | 12 | if __name__ == "__main__": 13 | data_dir = CONFIG.PATH['data_dir'] 14 | det_dir = CONFIG.PATH['det_dir'] 15 | trained_model = os.path.join(os.getcwd(), CONFIG.MODEL_DIR) 16 | date_format_localtime = time.strftime('%Y%m%d_%H%M%S', time.localtime()) 17 | save_name = CONFIG.NAME['save_name'] + date_format_localtime 18 | 19 | display = CONFIG.DISPLAY 20 | context_amount = CONFIG.PRAM['context_amount'] 21 | occlusion_thres = CONFIG.PRAM['occlusion_thres'] 22 | association_thres = CONFIG.PRAM['association_thres'] 23 | iou = CONFIG.PRAM['iou'] 24 | 25 | output_dir = os.path.join(os.getcwd(), CONFIG.PATH['output_dir'], save_name) 26 | os.makedirs(output_dir, exist_ok=True) 27 | 28 | sequences = os.listdir(data_dir) 29 | sequence_speed = [] 30 | sequences = CONFIG.NAME['sequences'][CONFIG.TEST_TYPE] 31 | for sequence in sequences: 32 | print("Running sequence %s" % sequence) 33 | sequence_dir = os.path.join(data_dir, sequence) 34 | output_file = os.path.join(output_dir, "%s.txt" % sequence) 35 | info_filename = os.path.join(sequence_dir, "seqinfo.ini") 36 | if os.path.exists(info_filename): 37 | with open(info_filename, "r") as f: 38 | line_splits = [l.split('=') for l in f.read().splitlines()[1:]] 39 | info_dict = dict( 40 | s for s in line_splits if isinstance(s, list) and len(s) == 2) 41 | frame_count = int(info_dict["seqLength"]) 42 | max_age = int(CONFIG.PRAM['life_span'] * int(info_dict["frameRate"])) # max span-life or not 43 | else: 44 | img_list = os.listdir(os.path.join(sequence_dir, 'img1')) 45 | frame_count = int(max(img_list).split('.')[0]) 46 | sequence_speed.append(run_public.run( 47 | sequence_dir, det_dir, trained_model, output_file, 48 | max_age, context_amount, iou, occlusion_thres, 49 | association_thres, display)) 50 | 51 | print("Runtime: %g ms, %g fps.\n%s" % (sum(sequence_speed)/len(sequence_speed), 1000/(sum(sequence_speed)/len(sequence_speed)),output_dir)) 52 | 53 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/Siamese_tracker.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import numpy as np 3 | from tracker.Siamese_utils.infer_utils import convert_bbox_format, Rectangle 4 | from tracker.Siamese_utils.misc_utils import get_center 5 | 6 | 7 | class TargetState(object): 8 | """Represent the target state.""" 9 | 10 | def __init__(self, bbox, search_pos, scale_idx, his_feature, original_search_center, original_target_wh, init_templates, reid_templates, similarity, bbox_in): 11 | self.bbox = bbox # (cx, cy, w, h) in the original image 12 | self.search_pos = search_pos # target center position in the search image 13 | self.scale_idx = scale_idx # scale index in the searched scales 14 | self.original_search_center = original_search_center 15 | self.original_target_wh = original_target_wh 16 | self.init_templates = init_templates 17 | self.reid_templates = reid_templates 18 | self.similarity = similarity 19 | self.bbox_in = bbox_in 20 | self.his_feature = his_feature 21 | self.old_bbox = bbox 22 | self.old_scale_idx = scale_idx 23 | self.old_search_pos = search_pos 24 | 25 | 26 | class Siamese_Tracker(object): 27 | """Tracker based on the siamese model.""" 28 | 29 | def __init__(self, siamese_model, model_config, track_config): 30 | self.siamese_model = siamese_model 31 | self.model_config = model_config 32 | self.track_config = track_config 33 | 34 | self.num_scales = track_config['num_scales'] 35 | logging.info('track num scales -- {}'.format(self.num_scales)) 36 | scales = np.arange(self.num_scales) - get_center(self.num_scales) 37 | self.search_factors = [self.track_config['scale_step'] ** x for x in scales] #0.963, 1, 1.0375 38 | self.x_image_size = track_config['x_image_size'] # Search image size 255 39 | self.window = None # Cosine window 40 | self.log_level = track_config['log_level'] 41 | 42 | def init_tracks(self, sess, det, filename): 43 | 44 | # Get initial target bounding box and convert to center based 45 | init_bb = Rectangle(int(det[0]) - 1, int(det[1]) - 1, int(det[2]), int(det[3])) 46 | bbox = convert_bbox_format(init_bb, 'center-based') 47 | 48 | # Feed in the first frame image to set initial state. 49 | bbox_feed = [bbox.y, bbox.x, bbox.height, bbox.width] 50 | bbox_in = [init_bb.x, init_bb.y, init_bb.width, init_bb.height] 51 | input_feed = [filename, bbox_feed] 52 | templates, reid_templates = self.siamese_model.initialize(sess, input_feed) 53 | 54 | his_feature=[] 55 | his_feature.append(reid_templates) 56 | 57 | search_center = np.array([get_center(self.x_image_size), 58 | get_center(self.x_image_size)]) 59 | current_target_state = TargetState(bbox=bbox, 60 | search_pos=search_center, 61 | original_search_center=search_center, 62 | scale_idx=int(get_center(self.num_scales)), 63 | original_target_wh=[bbox.width, bbox.height], 64 | init_templates=templates, # used for SOT 65 | his_feature=his_feature, # used for re-id 66 | reid_templates=reid_templates, 67 | similarity=1.0, 68 | bbox_in=bbox_in, 69 | ) # bbox_in [x,y,w,h] 70 | return current_target_state 71 | 72 | def track(self, sess, current_target_state, filename): 73 | """Runs tracking on a single image sequence.""" 74 | 75 | def roi_align(image, disp_instance_feat, height, width): 76 | """ 77 | `image` is a 3-D array, representing the input feature map 78 | `disp_instance_feat` box center 79 | `height` and `width` are the desired spatial size of output feature map 80 | """ 81 | crop_center = disp_instance_feat + get_center(image.shape[0]) 82 | crop_box = [np.maximum(crop_center[0]-3, 0), np.maximum(crop_center[1]-3, 0), 83 | np.minimum(crop_center[0] + 3, image.shape[0]), 84 | np.minimum(crop_center[1] + 3, image.shape[0])] 85 | if (int(crop_box[2]-crop_box[0]) != 6) or (int(crop_box[3]-crop_box[1]) != 6): # pad if reach boundary 86 | image = np.pad(image, ((6, 6), (6, 6), (0, 0)), 'constant', constant_values=np.mean(image)) 87 | crop_center = crop_center + 6 88 | crop_box = [crop_center[0] - 3, crop_center[1] - 3, crop_center[0] + 3, crop_center[1] + 3] 89 | 90 | crop_box = [ele/image.shape[0] for ele in crop_box] 91 | 92 | y_min, x_min, y_max, x_max = crop_box 93 | 94 | img_height, img_width, channel_num = image.shape 95 | 96 | feature_map = [] 97 | 98 | for y in np.linspace(y_min, y_max, height) * (img_height - 1): 99 | for x in np.linspace(x_min, x_max, width) * (img_height - 1): 100 | y_l, y_h = np.floor(y).astype('int32'), np.ceil(y).astype('int32') 101 | x_l, x_h = np.floor(x).astype('int32'), np.ceil(x).astype('int32') 102 | 103 | a = image[y_l, x_l] 104 | b = image[y_l, x_h] 105 | c = image[y_h, x_l] 106 | d = image[y_h, x_h] 107 | 108 | y_weight = y - y_l 109 | x_weight = x - x_l 110 | 111 | val = a * (1 - x_weight) * (1 - y_weight) + \ 112 | b * x_weight * (1 - y_weight) + \ 113 | c * y_weight * (1 - x_weight) + \ 114 | d * x_weight * y_weight 115 | 116 | feature_map.append(val) 117 | 118 | return np.array(feature_map).reshape(height, width, channel_num) 119 | 120 | def roi_crop(disp_instance_feat, instance): 121 | instance_pad = instance.copy() 122 | crop_center = np.round(disp_instance_feat + get_center(instance_size)).astype(int) 123 | crop_box = [np.maximum(crop_center[0]-3, 0), np.maximum(crop_center[1]-3, 0), 124 | np.minimum(crop_center[0] + 3, instance_size), 125 | np.minimum(crop_center[1] + 3, instance_size)] 126 | if (int(crop_box[2]-crop_box[0]) != 6) or (int(crop_box[3]-crop_box[1]) != 6): # padding if reach border 127 | instance_pad = np.pad(instance_pad, ((6, 6), (6, 6), (0, 0)), 'constant', constant_values=np.mean(instance_pad)) 128 | crop_center = crop_center + 6 129 | crop_box = [crop_center[0] - 3, crop_center[1] - 3, crop_center[0] + 3, crop_center[1] + 3] 130 | # print(crop_box) 131 | instance_crop = instance_pad[crop_box[0]:crop_box[2], crop_box[1]:crop_box[3], :] 132 | return instance_crop 133 | 134 | def npair_distance(a, b, data_is_normalized=False): 135 | b = np.vstack(b) 136 | a = np.reshape(a, (1, -1)) 137 | b = np.reshape(b, (b.shape[0], -1)) 138 | if not data_is_normalized: 139 | a = np.asarray(a) / np.linalg.norm(a, axis=1, keepdims=True) 140 | b = np.asarray(b) / np.linalg.norm(b, axis=1, keepdims=True) 141 | return np.mean(np.dot(a, b.T)) 142 | 143 | current_target_state.old_bbox = current_target_state.bbox # [x_c,y_c,w,h] 144 | current_target_state.old_scale_idx = current_target_state.scale_idx 145 | current_target_state.old_search_pos = current_target_state.search_pos 146 | 147 | bbox_feed = [current_target_state.bbox.y, current_target_state.bbox.x, 148 | current_target_state.bbox.height, current_target_state.bbox.width] # center x y 149 | bbox_feed_ltwh = [current_target_state.bbox.x - current_target_state.bbox.width/2, 150 | current_target_state.bbox.y - current_target_state.bbox.height/2, 151 | current_target_state.bbox.width, current_target_state.bbox.height] 152 | 153 | templates = current_target_state.init_templates 154 | input_feed = [filename, bbox_feed, templates] 155 | outputs = self.siamese_model.inference_step(sess, input_feed) 156 | search_scale_list = outputs['scale_xs'] 157 | response = outputs['response_up'] # [3,272,272] 158 | instance = outputs['instance'] # [3,22,22,256] 159 | reid_instance = outputs['instance_reid'] # [3,22,22,256] 160 | response_size = response.shape[1] 161 | instance_size = instance.shape[1] 162 | 163 | # Choose the scale whole response map has the highest peak 164 | if self.num_scales > 1: 165 | response_max = np.max(response, axis=(1, 2)) 166 | penalties = self.track_config['scale_penalty'] * np.ones(self.num_scales) 167 | current_scale_idx = int(get_center(self.num_scales)) 168 | penalties[current_scale_idx] = 1.0 169 | response_penalized = response_max * penalties 170 | best_scale = np.argmax(response_penalized) 171 | else: 172 | best_scale = 0 173 | 174 | response = response[best_scale] 175 | 176 | with np.errstate(all='raise'): # Raise error if something goes wrong 177 | response = response - np.min(response) 178 | response = response / np.sum(response) 179 | 180 | if self.window is None: # suppress the border 181 | window = np.dot(np.expand_dims(np.hanning(response_size), 1), 182 | np.expand_dims(np.hanning(response_size), 0)) 183 | self.window = window / np.sum(window) # normalize window 184 | window_influence = self.track_config['window_influence'] # 0.3 185 | response = (1 - window_influence) * response + window_influence * self.window 186 | # Find maximum response 187 | r_max, c_max = np.unravel_index(response.argmax(), response.shape) 188 | 189 | # Convert from crop-relative coordinates to frame coordinates 190 | p_coor = np.array([r_max, c_max]) 191 | 192 | # displacement from the center in instance final representation (response comes from instance) 193 | disp_instance_final = p_coor - get_center(response_size) 194 | 195 | # ... in instance feature space ... 196 | upsample_factor = self.track_config['upsample_factor'] 197 | disp_instance_feat = disp_instance_final / upsample_factor 198 | # ... Avoid empty position ... 199 | r_radius = int(response_size / upsample_factor / 2) 200 | disp_instance_feat = np.maximum(np.minimum(disp_instance_feat, r_radius), -r_radius) 201 | 202 | # ... in instance input ... 203 | disp_instance_input = disp_instance_feat * self.model_config['embed_config']['stride'] 204 | # ... in instance original crop (in frame coordinates) 205 | disp_instance_frame = disp_instance_input / search_scale_list[best_scale] 206 | # Position within frame in frame coordinates 207 | y = current_target_state.bbox.y 208 | x = current_target_state.bbox.x 209 | y += disp_instance_frame[0] 210 | x += disp_instance_frame[1] 211 | 212 | # compute the similarity 213 | instance_reid_crop1 = np.mean(roi_crop(disp_instance_feat, reid_instance[best_scale]), axis=(0, 1)) 214 | similarity1 = npair_distance(instance_reid_crop1, current_target_state.his_feature) 215 | 216 | # instance_reid_crop2 = np.mean(roi_align(reid_instance[best_scale], disp_instance_feat, 6, 6), axis=(0, 1)) 217 | # similarity2 = npair_distance(instance_reid_crop2, current_target_state.his_feature) 218 | 219 | current_target_state.similarity = similarity1 220 | 221 | # Target scale damping and saturation 222 | original_target_width = current_target_state.original_target_wh[0] 223 | original_target_height = current_target_state.original_target_wh[1] 224 | 225 | target_scale = current_target_state.bbox.height / original_target_height 226 | search_factor = self.search_factors[best_scale] 227 | scale_damp = self.track_config['scale_damp'] # damping factor for scale update 228 | target_scale *= ((1 - scale_damp) * 1.0 + scale_damp * search_factor) 229 | target_scale = np.maximum(0.5, np.minimum(1.5, target_scale)) 230 | 231 | # Some book keeping 232 | height = original_target_height * target_scale 233 | width = original_target_width * target_scale 234 | current_target_state.bbox = Rectangle(x, y, width, height) 235 | current_target_state.scale_idx = best_scale 236 | current_target_state.search_pos = current_target_state.original_search_center + disp_instance_input 237 | current_target_state.bbox_in = bbox_feed_ltwh 238 | 239 | assert 0 <= current_target_state.search_pos[0] < self.x_image_size, \ 240 | 'target position in feature space should be no larger than input image size' 241 | assert 0 <= current_target_state.search_pos[1] < self.x_image_size, \ 242 | 'target position in feature space should be no larger than input image size' 243 | 244 | track_bbox = convert_bbox_format(current_target_state.bbox, 'top-left-based') # center -> top left 245 | track_bbox = np.array([track_bbox.x, track_bbox.y, track_bbox.width, track_bbox.height]) 246 | 247 | return current_target_state, track_bbox 248 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__init__.py -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/Siamese_tracker.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/Siamese_tracker.cpython-35.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/Siamese_tracker.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/Siamese_tracker.cpython-36.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/Siamese_tracker.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/Siamese_tracker.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/convolutional_alexnet.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/convolutional_alexnet.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/convolutional_alexnet.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/convolutional_alexnet.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/inference_wrapper.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/inference_wrapper.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/__pycache__/inference_wrapper.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_inference/__pycache__/inference_wrapper.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/convolutional_alexnet.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import tensorflow as tf 3 | from tracker.Siamese_utils.misc_utils import get 4 | import config.config as CONFIG 5 | 6 | slim = tf.contrib.slim 7 | 8 | 9 | def convolutional_alexnet_arg_scope(embed_config, 10 | trainable=True, 11 | is_training=False): 12 | """Defines the default arg scope. 13 | 14 | Args: 15 | embed_config: A dictionary which contains configurations for the embedding function. 16 | trainable: If the weights in the embedding function is trainable. 17 | is_training: If the embedding function is built for training. 18 | 19 | Returns: 20 | An `arg_scope` to use for the convolutional_alexnet models. 21 | """ 22 | # Only consider the model to be in training mode if it's trainable. 23 | # This is vital for batch_norm since moving_mean and moving_variance 24 | # will get updated even if not trainable. 25 | is_model_training = trainable and is_training 26 | 27 | if get(embed_config, 'use_bn', True): 28 | batch_norm_scale = get(embed_config, 'bn_scale', True) 29 | batch_norm_decay = 1 - get(embed_config, 'bn_momentum', 3e-4) 30 | batch_norm_epsilon = get(embed_config, 'bn_epsilon', 1e-6) 31 | batch_norm_params = { 32 | "scale": batch_norm_scale, 33 | # Decay for the moving averages. 34 | "decay": batch_norm_decay, 35 | # Epsilon to prevent 0s in variance. 36 | "epsilon": batch_norm_epsilon, 37 | "trainable": trainable, 38 | "is_training": is_model_training, 39 | # Collection containing the moving mean and moving variance. 40 | "variables_collections": { 41 | "beta": None, 42 | "gamma": None, 43 | "moving_mean": ["moving_vars"], 44 | "moving_variance": ["moving_vars"], 45 | }, 46 | 'updates_collections': None, # Ensure that updates are done within a frame 47 | } 48 | normalizer_fn = slim.batch_norm 49 | else: 50 | batch_norm_params = {} 51 | normalizer_fn = None 52 | 53 | weight_decay = get(embed_config, 'weight_decay', 5e-4) 54 | if trainable: 55 | weights_regularizer = slim.l2_regularizer(weight_decay) 56 | else: 57 | weights_regularizer = None 58 | 59 | init_method = get(embed_config, 'init_method', 'kaiming_normal') 60 | if is_model_training: 61 | logging.info('embedding init method -- {}'.format(init_method)) 62 | if init_method == 'kaiming_normal': 63 | # The same setting as siamese-fc 64 | initializer = slim.variance_scaling_initializer(factor=2.0, mode='FAN_OUT', uniform=False) 65 | else: 66 | initializer = slim.xavier_initializer() 67 | 68 | with slim.arg_scope( 69 | [slim.conv2d], 70 | weights_regularizer=weights_regularizer, 71 | weights_initializer=initializer, 72 | padding='VALID', 73 | trainable=trainable, 74 | activation_fn=tf.nn.relu, 75 | normalizer_fn=normalizer_fn, 76 | normalizer_params=batch_norm_params): 77 | with slim.arg_scope([slim.batch_norm], **batch_norm_params): 78 | with slim.arg_scope([slim.batch_norm], is_training=True) as arg_sc: 79 | return arg_sc 80 | 81 | 82 | def convolutional_alexnet(inputs, stage='init', reuse=None, scope='convolutional_alexnet'): 83 | """Defines the feature extractor of SiamFC. 84 | 85 | Args: 86 | inputs: a Tensor of shape [batch, h, w, c]. 87 | reuse: if the weights in the embedding function are reused. 88 | scope: the variable scope of the computational graph. 89 | 90 | Returns: 91 | net: the computed features of the inputs. 92 | end_points: the intermediate outputs of the embedding function. 93 | """ 94 | 95 | with tf.variable_scope(scope, 'convolutional_alexnet', [inputs], reuse=reuse) as sc: 96 | end_points_collection = sc.name + '_end_points' 97 | with slim.arg_scope([slim.conv2d, slim.max_pool2d], 98 | outputs_collections=end_points_collection): 99 | 100 | net = inputs 101 | net = slim.conv2d(net, 96, [11, 11], 2, scope='conv1') 102 | net = slim.max_pool2d(net, [3, 3], 2, scope='pool1') 103 | 104 | net = slim.conv2d(net, 256, [5, 5], 1, scope='conv2') 105 | net = slim.max_pool2d(net, [3, 3], 2, scope='pool2') 106 | net = slim.conv2d(net, 384, [3, 3], 1, scope='conv3') 107 | net = slim.conv2d(net, 384, [3, 3], 1, scope='conv4') 108 | 109 | track_feature = slim.conv2d(net, 256, [3, 3], 1, activation_fn=None, normalizer_fn=None, scope='conv5_track') 110 | reid_feature = slim.conv2d(net, 256, [3, 3], 1, scope='conv5_reid') 111 | 112 | with tf.name_scope('attention'): 113 | def attach_attention_module(net, attention_module, block_scope=None, 114 | reuse=False): 115 | def se_block(input_feature, name, reuse=False, ratio=4): 116 | """Contains the implementation of Squeeze-and-Excitation(SE) block. 117 | As described in https://arxiv.org/abs/1709.01507. 118 | """ 119 | 120 | kernel_initializer = tf.contrib.layers.variance_scaling_initializer() 121 | bias_initializer = tf.constant_initializer(value=0.0) 122 | 123 | with tf.variable_scope(name): 124 | channel = input_feature.get_shape()[-1] 125 | # Global average pooling 126 | squeeze = tf.reduce_mean(input_feature, axis=[1, 2], keep_dims=True) 127 | assert squeeze.get_shape()[1:] == (1, 1, channel) 128 | excitation = tf.layers.dense(inputs=squeeze, 129 | units=channel // ratio, 130 | activation=tf.nn.relu, 131 | kernel_initializer=kernel_initializer, 132 | bias_initializer=bias_initializer, 133 | kernel_regularizer=tf.contrib.layers.l2_regularizer(5e-4), 134 | name='bottleneck_fc', 135 | reuse=reuse) 136 | assert excitation.get_shape()[1:] == (1, 1, channel // ratio) 137 | excitation = tf.layers.dense(inputs=excitation, 138 | units=channel, 139 | activation=tf.nn.sigmoid, 140 | kernel_initializer=kernel_initializer, 141 | bias_initializer=bias_initializer, 142 | kernel_regularizer=tf.contrib.layers.l2_regularizer(5e-4), 143 | name='recover_fc', 144 | reuse=reuse) 145 | assert excitation.get_shape()[1:] == (1, 1, channel) 146 | scale = input_feature * excitation 147 | return scale 148 | 149 | if attention_module == 'se_block': # SE_block 150 | block_scope = 'se_block' if block_scope is None else block_scope + '_SE' 151 | net = se_block(net, block_scope, reuse) 152 | else: 153 | raise Exception("'{}' is not supported attention module!".format(attention_module)) 154 | return net 155 | 156 | if CONFIG.ATTENTION: 157 | track_feature = attach_attention_module(track_feature, CONFIG.ATTENTION, 'tracking', reuse=reuse) 158 | reid_feature = attach_attention_module(reid_feature, CONFIG.ATTENTION, 're-id', reuse=reuse) 159 | if stage == 'init': 160 | reid_feature = tf.reduce_mean(reid_feature, axis=[1, 2], keep_dims=True) # GAP 161 | reid_feature = tf.squeeze(reid_feature, [1, 2], name='embedding/squeezed') 162 | 163 | 164 | return track_feature, reid_feature 165 | 166 | 167 | convolutional_alexnet.stride = 8 168 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_inference/inference_wrapper.py: -------------------------------------------------------------------------------- 1 | import os 2 | import os.path as osp 3 | import functools 4 | import logging 5 | import numpy as np 6 | import tensorflow as tf 7 | from tracker.Siamese_inference.convolutional_alexnet import convolutional_alexnet_arg_scope, convolutional_alexnet 8 | from tracker.Siamese_utils.infer_utils import get_exemplar_images 9 | from tracker.Siamese_utils.misc_utils import get_center 10 | 11 | slim = tf.contrib.slim 12 | weight_decay = 5e-4 13 | l2_reg = tf.contrib.layers.l2_regularizer(weight_decay) 14 | 15 | class InferenceWrapper(): 16 | """Model wrapper class for performing inference with a siamese model.""" 17 | 18 | def __init__(self, context_amount): 19 | self.image = None 20 | self.target_bbox_feed = None 21 | self.search_images = None 22 | self.embeds = None 23 | self.init_templates = None 24 | self.init = None 25 | self.model_config = None 26 | self.track_config = None 27 | self.response_up = None 28 | self.response = None 29 | self.frame_templates = None 30 | self.instance_feature = None 31 | self.reid_embeds = None 32 | self.context_amount = context_amount 33 | 34 | def build_graph_from_config(self, model_config, track_config, checkpoint_path): 35 | """Build the inference graph and return a restore function.""" 36 | self.build_model(model_config, track_config) 37 | ema = tf.train.ExponentialMovingAverage(0) 38 | variables_to_restore = ema.variables_to_restore(moving_avg_variables=[]) 39 | 40 | # Filter out State variables 41 | variables_to_restore_filterd = {} 42 | for key, value in variables_to_restore.items(): 43 | if key.split('/')[1] != 'State': 44 | variables_to_restore_filterd[key] = value 45 | 46 | saver = tf.train.Saver(variables_to_restore_filterd) 47 | 48 | if osp.isdir(checkpoint_path): 49 | checkpoint_path = tf.train.latest_checkpoint(checkpoint_path) 50 | if not checkpoint_path: 51 | raise ValueError("No checkpoint file found in: {}".format(checkpoint_path)) 52 | 53 | def _restore_fn(sess): 54 | logging.info("Loading model from checkpoint: %s", checkpoint_path) 55 | saver.restore(sess, checkpoint_path) 56 | logging.info("Successfully loaded checkpoint: %s", os.path.basename(checkpoint_path)) 57 | 58 | return _restore_fn 59 | 60 | def build_model(self, model_config, track_config): 61 | self.model_config = model_config 62 | self.track_config = track_config 63 | 64 | self.build_inputs() 65 | self.build_search_images() 66 | self.build_template() 67 | self.build_detection() 68 | self.build_upsample() 69 | self.dumb_op = tf.no_op('dumb_operation') 70 | 71 | def build_inputs(self): 72 | filename = tf.placeholder(tf.string, [], name='filename') 73 | image_file = tf.read_file(filename) 74 | image = tf.image.decode_jpeg(image_file, channels=3, dct_method="INTEGER_ACCURATE") 75 | image = tf.to_float(image) 76 | 77 | self.image = image 78 | self.target_bbox_feed = tf.placeholder(dtype=tf.float32, 79 | shape=[4], 80 | name='target_bbox_feed') # center's y, x, height, width 81 | self.frame_templates = tf.placeholder(dtype=tf.float32, shape=[3, 6, 6, 256], name='frame_templates_feed') # track_feature 82 | 83 | def build_search_images(self): 84 | """Crop search images from the input image based on the last target position 85 | 86 | 1. The input image is scaled such that the area of target&context takes up to (scale_factor * z_image_size) ^ 2 87 | 2. Crop an image patch as large as x_image_size centered at the target center. 88 | 3. If the cropped image region is beyond the boundary of the input image, mean values are padded. 89 | """ 90 | model_config = self.model_config 91 | track_config = self.track_config 92 | 93 | size_z = model_config['z_image_size'] # 127 94 | size_x = track_config['x_image_size'] # 255 95 | 96 | num_scales = track_config['num_scales'] # 3 97 | scales = np.arange(num_scales) - get_center(num_scales) 98 | assert np.sum(scales) == 0, 'scales should be symmetric' 99 | search_factors = [track_config['scale_step'] ** x for x in scales] # pow(1.0375, -1), pow(1.0375, 0), pow(1.0375, 1) 100 | 101 | frame_sz = tf.shape(self.image) 102 | target_yx = self.target_bbox_feed[0:2] 103 | target_size = self.target_bbox_feed[2:4] 104 | avg_chan = tf.reduce_mean(self.image, axis=(0, 1), name='avg_chan') 105 | 106 | # Compute base values 107 | base_z_size = target_size # suppose [60, 120] 108 | base_z_context_size = base_z_size + self.context_amount * tf.reduce_sum(base_z_size) 109 | base_s_z = tf.sqrt(tf.reduce_prod(base_z_context_size)) # Canonical size, sqrt(87*147) = 113 110 | base_scale_z = tf.div(tf.to_float(size_z), base_s_z) # 127 / 113 = 1.124 111 | d_search = (size_x - size_z) / 2.0 # 64 112 | base_pad = tf.div(d_search, base_scale_z) # 64 / 1.124 =57 113 | base_s_x = base_s_z + 2 * base_pad # 113 + 2*57 = 227 114 | base_scale_x = tf.div(tf.to_float(size_x), base_s_x) # 255 / 227 = 1.123 115 | 116 | boxes = [] 117 | 118 | for factor in search_factors: 119 | s_x = factor * base_s_x # 1.0375 x 227 120 | frame_sz_1 = tf.to_float(frame_sz[0:2] - 1) 121 | # self.frame_shape = frame_sz_1 122 | topleft = tf.div(target_yx - get_center(s_x), frame_sz_1) 123 | bottomright = tf.div(target_yx + get_center(s_x), frame_sz_1) 124 | box = tf.concat([topleft, bottomright], axis=0) 125 | boxes.append(box) 126 | 127 | boxes = tf.stack(boxes) 128 | scale_xs = [] 129 | for factor in search_factors: 130 | scale_x = base_scale_x / factor 131 | scale_xs.append(scale_x) 132 | self.scale_xs = tf.stack(scale_xs) 133 | 134 | # Note we use different padding values for each image 135 | # while the original implementation uses only the average value 136 | # of the first image for all images. 137 | image_minus_avg = tf.expand_dims(self.image - avg_chan, 0) 138 | image_cropped = tf.image.crop_and_resize(image_minus_avg, boxes, 139 | box_ind=tf.zeros((track_config['num_scales']), tf.int32), 140 | crop_size=[size_x, size_x]) 141 | self.search_images = image_cropped + avg_chan 142 | 143 | def get_image_embedding(self, images, stage='init', reuse=None): 144 | 145 | config = self.model_config['embed_config'] 146 | arg_scope = convolutional_alexnet_arg_scope(config, 147 | trainable=config['train_embedding'], 148 | is_training=False) 149 | 150 | @functools.wraps(convolutional_alexnet) 151 | def embedding_fn(images, stage, reuse=False): 152 | with slim.arg_scope(arg_scope): 153 | return convolutional_alexnet(images, stage=stage, reuse=reuse) 154 | 155 | track_feature, reid_feature_squeeze = embedding_fn(images, stage, reuse) 156 | return track_feature, reid_feature_squeeze 157 | 158 | def build_template(self): 159 | 160 | model_config = self.model_config 161 | track_config = self.track_config 162 | 163 | # Exemplar image lies at the center of the search image in the first frame 164 | exemplar_images = get_exemplar_images(self.search_images, [model_config['z_image_size'], 165 | model_config['z_image_size']]) 166 | 167 | self.exemplar = exemplar_images 168 | templates, reid_templates = self.get_image_embedding(exemplar_images, stage='init') 169 | 170 | center_scale = int(get_center(track_config['num_scales'])) 171 | center_template = tf.identity(templates[center_scale]) # Shared feature 172 | self.center_template = center_template 173 | self.reid_templates = tf.identity(reid_templates[center_scale]) 174 | 175 | 176 | templates = tf.stack([center_template for _ in range(track_config['num_scales'])]) 177 | 178 | with tf.variable_scope('target_template'): 179 | # Store template in Variable such that we don't have to feed this template every time. 180 | with tf.variable_scope('State'): 181 | state = tf.get_variable('exemplar', 182 | initializer=tf.zeros(templates.get_shape().as_list(), dtype=templates.dtype), 183 | trainable=False) 184 | with tf.control_dependencies([templates]): 185 | self.init = tf.assign(state, templates, validate_shape=True) 186 | self.init_templates = state 187 | 188 | def build_detection(self): # co-relation 189 | 190 | self.embeds, self.reid_embeds = self.get_image_embedding(self.search_images, stage='track', reuse=True) # [3, 22, 22, 256] 191 | 192 | with tf.variable_scope('detection'): 193 | def _translation_match(x, z): 194 | x = tf.expand_dims(x, 0) # [batch, in_height, in_width, in_channels] 195 | z = tf.expand_dims(z, -1) # [filter_height, filter_width, in_channels, out_channels] 196 | return tf.nn.conv2d(x, z, strides=[1, 1, 1, 1], padding='VALID', name='translation_match') 197 | 198 | output = tf.map_fn( 199 | lambda x: _translation_match(x[0], x[1]), 200 | (self.embeds, self.frame_templates), dtype=self.embeds.dtype) # of shape [3, 1, 17, 17, 1] 201 | output = tf.squeeze(output, [1, 4]) # of shape e.g. [3, 17, 17] 202 | 203 | bias = tf.get_variable('biases', [1], 204 | dtype=tf.float32, 205 | initializer=tf.constant_initializer(0.0, dtype=tf.float32), 206 | trainable=False) 207 | response = self.model_config['adjust_response_config']['scale'] * output + bias 208 | self.response = response 209 | 210 | def build_upsample(self): 211 | """Upsample response to obtain finer target position""" 212 | with tf.variable_scope('upsample'): 213 | response = tf.expand_dims(self.response, 3) # [3,17,17,1] 214 | up_method = self.track_config['upsample_method'] 215 | methods = {'bilinear': tf.image.ResizeMethod.BILINEAR, 216 | 'bicubic': tf.image.ResizeMethod.BICUBIC} 217 | up_method = methods[up_method] 218 | response_spatial_size = self.response.get_shape().as_list()[1:3] 219 | up_size = [s * self.track_config['upsample_factor'] for s in response_spatial_size] # [272,272] 220 | response_up = tf.image.resize_images(response, 221 | up_size, 222 | method=up_method, 223 | align_corners=True) 224 | response_up = tf.squeeze(response_up, [3]) # [3, 272, 272] 225 | self.response_up = response_up 226 | 227 | def initialize(self, sess, input_feed): 228 | image_path, target_bbox = input_feed 229 | _, _, reid_templates = sess.run([self.scale_xs, self.init, self.reid_templates], feed_dict={'filename:0': image_path, "target_bbox_feed:0": target_bbox, }) 230 | init_templates = self.init_templates.eval(session=sess) 231 | 232 | return init_templates, reid_templates 233 | 234 | def inference_step(self, sess, input_feed): 235 | image_path, target_bbox, frame_templates = input_feed # input_feed = [filename, bbox_feed, templates] 236 | log_level = self.track_config['log_level'] 237 | image_cropped_op = self.search_images if log_level > 0 else self.dumb_op 238 | image_cropped, scale_xs, response_up, instance_track, instance_reid = sess.run( 239 | fetches=[image_cropped_op, self.scale_xs, self.response_up, self.embeds, self.reid_embeds], 240 | feed_dict={ 241 | "filename:0": image_path, 242 | "target_bbox_feed:0": target_bbox, 243 | "frame_templates_feed:0": frame_templates}) 244 | 245 | output = { 246 | 'scale_xs': scale_xs, 247 | 'response_up': response_up, 248 | 'instance': instance_track, 249 | 'instance_reid': instance_reid 250 | } 251 | return output 252 | 253 | 254 | 255 | 256 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__init__.py -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__init__.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/infer_utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/infer_utils.cpython-35.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/infer_utils.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/infer_utils.cpython-36.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/infer_utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/infer_utils.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/infer_utils.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/infer_utils.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/misc_utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/misc_utils.cpython-37.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/__pycache__/misc_utils.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/__pycache__/misc_utils.cpython-38.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/infer_utils.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | 3 | 4 | """ 5 | Inference Utilities 6 | """ 7 | 8 | from __future__ import absolute_import 9 | from __future__ import division 10 | from __future__ import print_function 11 | 12 | import collections 13 | 14 | import numpy as np 15 | import tensorflow as tf 16 | from cv2 import resize 17 | 18 | from tracker.Siamese_utils.misc_utils import get_center 19 | 20 | Rectangle = collections.namedtuple('Rectangle', ['x', 'y', 'width', 'height']) 21 | 22 | 23 | def im2rgb(im): 24 | if len(im.shape) != 3: 25 | im = np.stack([im, im, im], -1) 26 | return im 27 | 28 | 29 | def convert_bbox_format(bbox, to): 30 | x, y, target_width, target_height = bbox.x, bbox.y, bbox.width, bbox.height 31 | if to == 'top-left-based': 32 | x -= get_center(target_width) 33 | y -= get_center(target_height) 34 | elif to == 'center-based': 35 | y += get_center(target_height) 36 | x += get_center(target_width) 37 | else: 38 | raise ValueError("Bbox format: {} was not recognized".format(to)) 39 | return Rectangle(x, y, target_width, target_height) 40 | 41 | 42 | def get_exemplar_images(images, exemplar_size, targets_pos=None): 43 | """Crop exemplar image from input images""" 44 | with tf.name_scope('get_exemplar_image'): 45 | batch_size, x_height, x_width = images.get_shape().as_list()[:3] 46 | z_height, z_width = exemplar_size 47 | 48 | if targets_pos is None: 49 | target_pos_single = [[get_center(x_height), get_center(x_width)]] 50 | targets_pos_ = tf.tile(target_pos_single, [batch_size, 1]) 51 | else: 52 | targets_pos_ = targets_pos 53 | 54 | # convert to top-left corner based coordinates 55 | top = tf.to_int32(tf.round(targets_pos_[:, 0] - get_center(z_height))) 56 | bottom = tf.to_int32(top + z_height) 57 | left = tf.to_int32(tf.round(targets_pos_[:, 1] - get_center(z_width))) 58 | right = tf.to_int32(left + z_width) 59 | 60 | def _slice(x): 61 | f, t, l, b, r = x 62 | c = f[t:b, l:r] 63 | return c 64 | 65 | exemplar_img = tf.map_fn(_slice, (images, top, left, bottom, right), dtype=images.dtype) 66 | exemplar_img.set_shape([batch_size, z_height, z_width, 3]) 67 | return exemplar_img 68 | 69 | 70 | def get_crops(im, bbox, size_z, size_x, context_amount): 71 | """Obtain image sub-window, padding with avg channel if area goes outside of border 72 | 73 | Adapted from https://github.com/bertinetto/siamese-fc/blob/master/ILSVRC15-curation/save_crops.m#L46 74 | 75 | Args: 76 | im: Image ndarray 77 | bbox: Named tuple (x, y, width, height) x, y corresponds to the crops center 78 | size_z: Target + context size 79 | size_x: The resultant crop size 80 | context_amount: The amount of context 81 | 82 | Returns: 83 | image crop: Image ndarray 84 | """ 85 | cy, cx, h, w = bbox.y, bbox.x, bbox.height, bbox.width 86 | wc_z = w + context_amount * (w + h) 87 | hc_z = h + context_amount * (w + h) 88 | s_z = np.sqrt(wc_z * hc_z) 89 | scale_z = size_z / s_z 90 | 91 | d_search = (size_x - size_z) / 2 92 | pad = d_search / scale_z 93 | s_x = s_z + 2 * pad 94 | scale_x = size_x / s_x 95 | 96 | image_crop_x, _, _, _, _ = get_subwindow_avg(im, [cy, cx], 97 | [size_x, size_x], 98 | [np.round(s_x), np.round(s_x)]) 99 | 100 | return image_crop_x, scale_x 101 | 102 | 103 | def get_subwindow_avg(im, pos, model_sz, original_sz): 104 | # avg_chans = np.mean(im, axis=(0, 1)) # This version is 3x slower 105 | avg_chans = [np.mean(im[:, :, 0]), np.mean(im[:, :, 1]), np.mean(im[:, :, 2])] 106 | if not original_sz: 107 | original_sz = model_sz 108 | sz = original_sz 109 | im_sz = im.shape 110 | # make sure the size is not too small 111 | assert im_sz[0] > 2 and im_sz[1] > 2 112 | c = [get_center(s) for s in sz] 113 | 114 | # check out-of-bounds coordinates, and set them to avg_chans 115 | context_xmin = np.int(np.round(pos[1] - c[1])) 116 | context_xmax = np.int(context_xmin + sz[1] - 1) 117 | context_ymin = np.int(np.round(pos[0] - c[0])) 118 | context_ymax = np.int(context_ymin + sz[0] - 1) 119 | left_pad = np.int(np.maximum(0, -context_xmin)) 120 | top_pad = np.int(np.maximum(0, -context_ymin)) 121 | right_pad = np.int(np.maximum(0, context_xmax - im_sz[1] + 1)) 122 | bottom_pad = np.int(np.maximum(0, context_ymax - im_sz[0] + 1)) 123 | 124 | context_xmin = context_xmin + left_pad 125 | context_xmax = context_xmax + left_pad 126 | context_ymin = context_ymin + top_pad 127 | context_ymax = context_ymax + top_pad 128 | if top_pad > 0 or bottom_pad > 0 or left_pad > 0 or right_pad > 0: 129 | R = np.pad(im[:, :, 0], ((top_pad, bottom_pad), (left_pad, right_pad)), 130 | 'constant', constant_values=(avg_chans[0])) 131 | G = np.pad(im[:, :, 1], ((top_pad, bottom_pad), (left_pad, right_pad)), 132 | 'constant', constant_values=(avg_chans[1])) 133 | B = np.pad(im[:, :, 2], ((top_pad, bottom_pad), (left_pad, right_pad)), 134 | 'constant', constant_values=(avg_chans[2])) 135 | 136 | im = np.stack((R, G, B), axis=2) 137 | 138 | im_patch_original = im[context_ymin:context_ymax + 1, 139 | context_xmin:context_xmax + 1, :] 140 | if not (model_sz[0] == original_sz[0] and model_sz[1] == original_sz[1]): 141 | im_patch = resize(im_patch_original, tuple(model_sz)) 142 | else: 143 | im_patch = im_patch_original 144 | return im_patch, left_pad, top_pad, right_pad, bottom_pad 145 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/infer_utils.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/Siamese_utils/infer_utils.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/Siamese_utils/misc_utils.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | 5 | import errno 6 | import json 7 | import logging 8 | import os 9 | import re 10 | import sys 11 | from os import path as osp 12 | 13 | try: 14 | import pynvml # nvidia-ml provides utility for NVIDIA management 15 | 16 | HAS_NVML = True 17 | except: 18 | HAS_NVML = False 19 | 20 | 21 | def auto_select_gpu(): 22 | """Select gpu which has largest free memory""" 23 | if HAS_NVML: 24 | pynvml.nvmlInit() 25 | deviceCount = pynvml.nvmlDeviceGetCount() 26 | largest_free_mem = 0 27 | largest_free_idx = 0 28 | for i in range(deviceCount): 29 | handle = pynvml.nvmlDeviceGetHandleByIndex(i) 30 | info = pynvml.nvmlDeviceGetMemoryInfo(handle) 31 | if info.free > largest_free_mem: 32 | largest_free_mem = info.free 33 | largest_free_idx = i 34 | pynvml.nvmlShutdown() 35 | largest_free_mem = largest_free_mem / 1024. / 1024. # Convert to MB 36 | 37 | idx_to_gpu_id = {} 38 | for i in range(deviceCount): 39 | idx_to_gpu_id[i] = '{}'.format(i) 40 | 41 | gpu_id = idx_to_gpu_id[largest_free_idx] 42 | logging.info('Using largest free memory GPU {} with free memory {}MB'.format(gpu_id, largest_free_mem)) 43 | return gpu_id 44 | else: 45 | logging.info('nvidia-ml-py is not installed, automatically select gpu is disabled!') 46 | return '0' 47 | 48 | 49 | def get_center(x): 50 | return (x - 1.) / 2. 51 | 52 | 53 | def get(config, key, default): 54 | """Get value in config by key, use default if key is not set 55 | 56 | This little function is useful for dynamical experimental settings. 57 | For example, we can add a new configuration without worrying compatibility with older versions. 58 | You can also achieve this by just calling config.get(key, default), but add a warning is even better : ) 59 | """ 60 | val = config.get(key) 61 | if val is None: 62 | logging.warning('{} is not explicitly specified, using default value: {}'.format(key, default)) 63 | val = default 64 | return val 65 | 66 | 67 | def mkdir_p(path): 68 | """mimic the behavior of mkdir -p in bash""" 69 | try: 70 | os.makedirs(path) 71 | except OSError as exc: # Python >2.5 72 | if exc.errno == errno.EEXIST and os.path.isdir(path): 73 | pass 74 | else: 75 | raise 76 | 77 | 78 | def tryfloat(s): 79 | try: 80 | return float(s) 81 | except: 82 | return s 83 | 84 | 85 | def alphanum_key(s): 86 | """ Turn a string into a list of string and number chunks. 87 | "z23a" -> ["z", 23, "a"] 88 | """ 89 | return [tryfloat(c) for c in re.split('([0-9.]+)', s)] 90 | 91 | 92 | def sort_nicely(l): 93 | """Sort the given list in the way that humans expect.""" 94 | return sorted(l, key=alphanum_key) 95 | 96 | 97 | class Tee(object): 98 | """Mimic the behavior of tee in bash 99 | 100 | From: http://web.archive.org/web/20141016185743/https://mail.python.org/pipermail/python-list/2007-May/460639.html 101 | Usage: 102 | tee=Tee('logfile', 'w') 103 | print 'abcdefg' 104 | print 'another line' 105 | tee.close() 106 | print 'screen only' 107 | del tee # should do nothing 108 | """ 109 | 110 | def __init__(self, name, mode): 111 | self.file = open(name, mode) 112 | self.stdout = sys.stdout 113 | sys.stdout = self 114 | 115 | def close(self): 116 | if self.stdout is not None: 117 | sys.stdout = self.stdout 118 | self.stdout = None 119 | if self.file is not None: 120 | self.file.close() 121 | self.file = None 122 | 123 | def write(self, data): 124 | self.file.write(data) 125 | self.stdout.write(data) 126 | 127 | def flush(self): 128 | self.file.flush() 129 | self.stdout.flush() 130 | 131 | def __del__(self): 132 | self.close() 133 | 134 | 135 | def save_cfgs(train_dir, model_config, train_config, track_config): 136 | """Save all configurations in JSON format for future reference""" 137 | with open(osp.join(train_dir, 'model_config.json'), 'w') as f: 138 | json.dump(model_config, f, indent=2) 139 | with open(osp.join(train_dir, 'train_config.json'), 'w') as f: 140 | json.dump(train_config, f, indent=2) 141 | with open(osp.join(train_dir, 'track_config.json'), 'w') as f: 142 | json.dump(track_config, f, indent=2) 143 | 144 | 145 | def load_cfgs(checkpoint): 146 | # print(checkpoint) 147 | # print(osp.isdir(checkpoint)) 148 | if osp.isdir(checkpoint): 149 | train_dir = checkpoint 150 | else: 151 | train_dir = osp.dirname(checkpoint) 152 | with open(osp.join(train_dir, 'model_config.json'), 'r') as f: 153 | model_config = json.load(f) 154 | with open(osp.join(train_dir, 'train_config.json'), 'r') as f: 155 | train_config = json.load(f) 156 | with open(osp.join(train_dir, 'track_config.json'), 'r') as f: 157 | track_config = json.load(f) 158 | return model_config, train_config, track_config 159 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/__init__.py: -------------------------------------------------------------------------------- 1 | # vim: expandtab:ts=4:sw=4 2 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/__init__.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/detection.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | 4 | class Detection(object): 5 | """ 6 | This class represents a bounding box detection in a single image. 7 | 8 | Parameters 9 | ---------- 10 | tlwh : array_like 11 | Bounding box in format `(x, y, w, h)`. 12 | confidence : float 13 | Detector confidence score. 14 | feature : array_like 15 | A feature vector that describes the object contained in this image. 16 | 17 | Attributes 18 | ---------- 19 | tlwh : ndarray 20 | Bounding box in format `(top left x, top left y, width, height)`. 21 | confidence : ndarray 22 | Detector confidence score. 23 | feature : ndarray | NoneType 24 | A feature vector that describes the object contained in this image. 25 | 26 | """ 27 | 28 | def __init__(self, tlwh, confidence): 29 | self.tlwh = np.asarray(tlwh, dtype=np.float) 30 | self.confidence = float(confidence) 31 | 32 | def to_tlbr(self): 33 | """Convert bounding box to format `(min x, min y, max x, max y)`, i.e., 34 | `(top left, bottom right)`. 35 | """ 36 | ret = self.tlwh.copy() 37 | ret[2:] += ret[:2] 38 | return ret 39 | 40 | def to_xyah(self): 41 | """Convert bounding box to format `(center x, center y, aspect ratio, 42 | height)`, where the aspect ratio is `width / height`. 43 | """ 44 | ret = self.tlwh.copy() 45 | ret[:2] += ret[2:] / 2 46 | ret[2] /= ret[3] 47 | return ret 48 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/detection.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/detection.pyc -------------------------------------------------------------------------------- /UMA-TEST/tracker/mot_tracker.py: -------------------------------------------------------------------------------- 1 | import os.path as osp 2 | import cv2 3 | import numpy as np 4 | import numba 5 | from sklearn.utils.linear_assignment_ import linear_assignment 6 | from .track import Track, TrackState 7 | import tensorflow as tf 8 | from tracker.Siamese_inference import inference_wrapper 9 | from tracker.Siamese_inference.Siamese_tracker import Siamese_Tracker 10 | from tracker.Siamese_utils.misc_utils import load_cfgs, get_center, auto_select_gpu 11 | 12 | 13 | class MOT_Tracker: 14 | def __init__(self, max_age, occlusion_thres, association_thres): 15 | self.max_age = max_age 16 | self.occlusion_thres = occlusion_thres 17 | self.association_thres = association_thres 18 | self.siamese = None 19 | self.sess = None 20 | self.tracks = [] # save all the targets 21 | self._next_id = 1 22 | self.frame_rate = None 23 | 24 | @staticmethod 25 | def initiate_siamese_tracker(checkpoint, context_amount): 26 | model_config, _, track_config = load_cfgs(checkpoint) 27 | g = tf.Graph() 28 | with g.as_default(): 29 | model = inference_wrapper.InferenceWrapper(context_amount) 30 | restore_fn = model.build_graph_from_config(model_config, track_config, checkpoint) 31 | gpu_options = tf.GPUOptions(allow_growth=True) 32 | sess_config = tf.ConfigProto(gpu_options=gpu_options) 33 | sess = tf.Session(graph=g, config=sess_config) 34 | restore_fn(sess) # load ckpt 35 | siamese = Siamese_Tracker(model, model_config=model_config, track_config=track_config) 36 | return sess, siamese 37 | 38 | @staticmethod 39 | def npair_distance(a, b, data_is_normalized=False): 40 | result = np.zeros((a.shape[0], len(b))) 41 | frames_count = [ele.shape[0] for ele in b] 42 | b = np.vstack(b) 43 | a = np.reshape(a, (a.shape[0], -1)) 44 | b = np.reshape(b, (b.shape[0], -1)) 45 | if not data_is_normalized: 46 | a = np.asarray(a) / np.linalg.norm(a, axis=1, keepdims=True) 47 | b = np.asarray(b) / np.linalg.norm(b, axis=1, keepdims=True) 48 | concat_targets_result = np.dot(a, b.T) 49 | 50 | for k in range(a.shape[0]): 51 | index = 0 52 | for i, num in enumerate(frames_count): 53 | result[k, i] = np.mean(concat_targets_result[k, index:index + num]) 54 | # result[k, i] = np.max(concat_targets_result[k, index:index + num]) 55 | index += num 56 | return result 57 | 58 | @staticmethod 59 | @numba.jit 60 | def iou(bb_test, bb_gt): 61 | """ 62 | Computes IUO between two bboxes in the form [x1,y1,x2,y2] 63 | """ 64 | xx1 = np.maximum(bb_test[0], bb_gt[0]) 65 | yy1 = np.maximum(bb_test[1], bb_gt[1]) 66 | xx2 = np.minimum(bb_test[2], bb_gt[2]) 67 | yy2 = np.minimum(bb_test[3], bb_gt[3]) 68 | w = np.maximum(0., xx2 - xx1) 69 | h = np.maximum(0., yy2 - yy1) 70 | wh = w * h 71 | o = wh / ((bb_test[2] - bb_test[0]) * (bb_test[3] - bb_test[1]) 72 | + (bb_gt[2] - bb_gt[0]) * (bb_gt[3] - bb_gt[1]) - wh) 73 | return (o) 74 | 75 | def associate_detections_to_trackers(self, detections, trackers, score_threshold, cos_matrix=None): 76 | 77 | """ 78 | For tracked targets, update bboxes. 79 | For lost targets, associate with dets. 80 | """ 81 | 82 | if (len(trackers) == 0): 83 | return np.empty((0, 2), dtype=int), np.arange(len(detections)), np.empty((0, 5), dtype=int), np.zeros((0, 0)) 84 | 85 | if cos_matrix is not None: # for lost targets 86 | association_matrix = cos_matrix 87 | else: # for tracked targets 88 | association_matrix = np.zeros((len(detections), len(trackers)), dtype=np.float32) 89 | for d, det in enumerate(detections): 90 | for t, trk in enumerate(trackers): 91 | association_matrix[d, t] = self.iou(det, trk) 92 | 93 | matched_indices = linear_assignment(-association_matrix) 94 | 95 | unmatched_detections = [] 96 | for d, det in enumerate(detections): 97 | if (d not in matched_indices[:, 0]): 98 | unmatched_detections.append(d) 99 | unmatched_trackers = [] 100 | for t, trk in enumerate(trackers): 101 | if (t not in matched_indices[:, 1]): 102 | unmatched_trackers.append(t) 103 | 104 | # filter out matched with low score 105 | matches = [] 106 | for m in matched_indices: 107 | if (association_matrix[m[0], m[1]] < score_threshold): 108 | unmatched_detections.append(m[0]) 109 | unmatched_trackers.append(m[1]) 110 | else: 111 | matches.append(m.reshape(1, 2)) 112 | if (len(matches) == 0): 113 | matches = np.empty((0, 2), dtype=int) 114 | else: 115 | matches = np.concatenate(matches, axis=0) 116 | 117 | return matches, np.array(unmatched_detections), np.array(unmatched_trackers), association_matrix 118 | 119 | def initiate_track(self, detection, current_frame_path): 120 | current_target_state = self.siamese.init_tracks(self.sess, detection, current_frame_path) 121 | self.tracks.append(Track( 122 | current_target_state, detection, self._next_id, self.max_age)) 123 | self._next_id += 1 124 | 125 | def update(self, frame_path, checkpoint, context_amount, detections, iou): 126 | 127 | # init 128 | frame_count = int(osp.basename(frame_path).split(".")[0]) 129 | if frame_count == 1: 130 | self.sess, self.siamese = self.initiate_siamese_tracker(checkpoint, context_amount) 131 | dets = np.array([d.tlwh for d in detections]) # dets: [x1,y1,w,h] 132 | if len(dets) == 0: 133 | dets_tlrb = dets 134 | else: 135 | dets_tlrb = dets.copy() 136 | dets_tlrb[:, 2:] += dets_tlrb[:, :2] # convert to [x1,y1,w,h] to [x1,y1,x2,y2] 137 | 138 | ########################### STEP 1: occlusion detection ####################### 139 | 140 | for t in self.tracks: 141 | if t.is_tracked(): 142 | similarity = t.current_target_state.similarity 143 | if similarity <= self.occlusion_thres or t.average_overlap < 0.5: 144 | t.state = TrackState.Lost 145 | t.current_target_state.bbox = t.current_target_state.old_bbox 146 | t.current_target_state.scale_idx = t.current_target_state.old_scale_idx 147 | t.current_target_state.search_pos = t.current_target_state.old_search_pos 148 | 149 | ############################### STEP 2: update tracked targets ############################### 150 | 151 | tracked_trks = [t for t in self.tracks if t.is_tracked()] 152 | trks = np.zeros((len(tracked_trks), 5)) # update tracked 153 | ret = [] 154 | for t, trk in enumerate(trks): # TODO: batch prediction 155 | tracked_trks[t].predict(self.sess, self.siamese, frame_path) 156 | pos = tracked_trks[t].track_bbox 157 | trk[:] = [pos[0], pos[1], pos[2], pos[3], 0] 158 | trks_tlrb = trks.copy() 159 | trks_tlrb[:, 2:4] += trks_tlrb[:, 0:2] # convert to [xl,yl,w,h] to [x1,y1,x2,y2] 160 | matched, unmatched_dets, unmatched_trks, iou_matrix = self.associate_detections_to_trackers(dets_tlrb, trks_tlrb, iou) # associate with detection 161 | 162 | for t, trk in enumerate(tracked_trks): # refine bbox of matched track 163 | if t not in unmatched_trks: 164 | d = int(matched[np.where(matched[:, 1] == t)[0], 0]) 165 | matched_iou = iou_matrix[d, t] 166 | det_state = self.siamese.init_tracks(self.sess, dets[d, :4], frame_path) # TODO: batch prediction 167 | trk.update(dets[d, :4], det_state.reid_templates, 'tracked', matched_iou, self.frame_rate) 168 | else: # update unmatched track 169 | trk.overlap_history.append(0) 170 | history_len = len(trk.overlap_history) 171 | if history_len > 2 * self.frame_rate: 172 | trk.overlap_history.pop(0) 173 | trk.average_overlap = sum(trk.overlap_history) / min(2 * self.frame_rate, history_len) 174 | 175 | ############################### STEP 3: update lost targets ############################### 176 | 177 | lost_trks = [t for t in self.tracks if t.is_lost()] 178 | for t in lost_trks: 179 | t.time_since_update += 1 180 | trks1 = np.zeros((len(lost_trks), 4)) 181 | for t, trk in enumerate(trks1): 182 | pos = lost_trks[t].track_bbox 183 | trk[:] = [pos[0], pos[1], pos[2], pos[3]] 184 | trks_tlrb1 = trks1.copy() 185 | trks_tlrb1[:, 2:] += trks_tlrb1[:, :2] # convert to [xl,yt,w,h] to [x1,y1,xr,yb] 186 | dets_tlwh1 = np.array([dets[i, :4] for i in unmatched_dets]) # [xl,yt,w,h] 187 | 188 | if not len(dets_tlwh1) == 0: 189 | dets_tlrb1 = dets_tlwh1.copy() 190 | dets_tlrb1[:, 2:] += dets_tlrb1[:, :2] 191 | else: 192 | dets_tlrb1 = dets_tlwh1 193 | 194 | if not (len(lost_trks) == 0 or len(dets_tlwh1) == 0): 195 | lost_trks_templates = [np.vstack(trk.current_target_state.his_feature) for trk in lost_trks] 196 | dets_reid_embeding, dets_trk_embeding = [], [] 197 | for i in unmatched_dets: 198 | det_state = self.siamese.init_tracks(self.sess, dets[i, :4], frame_path) 199 | dets_reid_embeding.append(det_state.reid_templates) 200 | dets_trk_embeding.append(det_state.init_templates) 201 | dets_reid_embeding = np.array(dets_reid_embeding) 202 | cos_matrix = self.npair_distance(dets_reid_embeding, lost_trks_templates) # todo: add motion model to limit detections to be matched 203 | else: 204 | cos_matrix = np.zeros((len(dets_tlrb1), len(trks_tlrb1)), dtype=np.float32) 205 | 206 | lost_matched, lost_unmatched_dets, lost_unmatched_trks, _ = self.associate_detections_to_trackers(dets_tlrb1, trks_tlrb1, self.association_thres, cos_matrix) 207 | 208 | # update recover targets 209 | for t, trk in enumerate(lost_trks): 210 | if (t not in lost_unmatched_trks): 211 | d = int(lost_matched[np.where(lost_matched[:, 1] == t)[0], 0]) 212 | trk.update(dets_tlwh1[d, :4], [dets_reid_embeding[d], dets_trk_embeding[d]], 'recover') 213 | 214 | # initiate targets if not match with any dets 215 | for i in lost_unmatched_dets: 216 | self.initiate_track(dets_tlwh1[i, :4], frame_path) # TODO: batch prediction 217 | 218 | ############################### STEP 4: post processing ############################### 219 | 220 | # remove dead tracklet 221 | wh = cv2.imread(frame_path).shape 222 | i = len(self.tracks) 223 | for trk in reversed(self.tracks): 224 | i -= 1 225 | if (trk.is_lost() and trk.time_since_update > self.max_age) or not trk.is_insight( 226 | wh): 227 | self.tracks.pop(i) 228 | 229 | # record results 230 | for trk in reversed(self.tracks): 231 | d = trk.track_bbox 232 | if trk.is_tracked(): 233 | ret.append(np.concatenate((d, [trk.track_id])).reshape(1, -1)) # +1 as MOT benchmark requires positive 234 | 235 | if (len(ret) > 0): 236 | return np.concatenate(ret) 237 | return np.empty((0, 5)) 238 | 239 | 240 | 241 | 242 | 243 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/track.py: -------------------------------------------------------------------------------- 1 | from tracker.Siamese_utils.infer_utils import convert_bbox_format, Rectangle 2 | import numpy as np 3 | 4 | 5 | class TrackState: 6 | 7 | Tracked = 1 8 | Lost = 2 9 | 10 | class Track: 11 | 12 | def __init__(self, current_target_state, track_bbox, track_id, max_age): 13 | self.current_target_state = current_target_state 14 | self.track_bbox = track_bbox 15 | self.track_id = track_id 16 | self.time_since_update = 0 17 | self.state = TrackState.Tracked 18 | self._max_age = max_age 19 | self.overlap_history = [1] 20 | self.average_overlap = 1 21 | 22 | def predict(self, sess, siamese, frame_path): 23 | 24 | self.current_target_state, self.track_bbox = siamese.track(sess, self.current_target_state, frame_path) 25 | self.time_since_update += 1 26 | 27 | def update(self, detection, det_embeding, mode, matched_iou=1.0, frame_rate=30): 28 | self.time_since_update = 0 29 | 30 | if mode == 'tracked': 31 | self.overlap_history.append(1 if matched_iou > 0.5 else 0) 32 | history_length = len(self.overlap_history) 33 | if history_length > 2 * frame_rate: 34 | self.overlap_history.pop(0) 35 | self.average_overlap = sum(self.overlap_history) / min(2 * frame_rate, history_length) 36 | 37 | refine_detection = [0.5 * self.track_bbox[0] + 0.5 * detection[0], 38 | 0.5 * self.track_bbox[1] + 0.5 * detection[1], 39 | 0.5 * self.track_bbox[2] + 0.5 * detection[2], 40 | 0.5 * self.track_bbox[3] + 0.5 * detection[3]] # ltrb 41 | 42 | self.current_target_state.bbox = convert_bbox_format(Rectangle(refine_detection[0], 43 | refine_detection[1], 44 | refine_detection[2], 45 | refine_detection[3]), 'center-based') 46 | self.track_bbox = np.array(refine_detection) # track result 47 | self.current_target_state.his_feature.append(det_embeding) 48 | if len(self.current_target_state.his_feature) > frame_rate: 49 | self.current_target_state.his_feature.pop(0) 50 | 51 | return 52 | 53 | if mode == 'recover': 54 | 55 | self.state = TrackState.Tracked # re-tracked 56 | init_bb = Rectangle(int(detection[0]) - 1, int(detection[1]) - 1, int(detection[2]), int(detection[3])) # xl, yt, w, h 57 | bbox = convert_bbox_format(init_bb, 'center-based') 58 | self.current_target_state.bbox = bbox 59 | self.current_target_state.reid_templates = det_embeding[0] 60 | self.current_target_state.init_templates = det_embeding[1] 61 | self.current_target_state.scale_idx = int(1) 62 | self.current_target_state.similarity = 1.0 63 | self.current_target_state.original_target_wh = [bbox.width, bbox.height] 64 | self.current_target_state.bbox_in = detection 65 | self.track_bbox = np.array([init_bb.x, init_bb.y, init_bb.width, init_bb.height]) 66 | 67 | self.overlap_history = [1] 68 | self.average_overlap = 1 69 | self.current_target_state.his_feature = [] 70 | self.current_target_state.his_feature.append(self.current_target_state.reid_templates) 71 | 72 | def is_tracked(self): 73 | """Returns True if this track is confirmed.""" 74 | return self.state == TrackState.Tracked 75 | 76 | def is_lost(self): 77 | """Returns True if this track is lost.""" 78 | return self.state == TrackState.Lost 79 | 80 | 81 | def is_insight(self, shape): 82 | x = self.track_bbox[0] + self.track_bbox[2] / 2 83 | y = self.track_bbox[1] + self.track_bbox[3] / 2 84 | return x > 1 and y > 1 and x < shape[1] and y < shape[0] 85 | 86 | 87 | -------------------------------------------------------------------------------- /UMA-TEST/tracker/track.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinjunbo/UMA-MOT/8ae92f93747981e1dbae938448fd734c3c6ac2c0/UMA-TEST/tracker/track.pyc -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | sacred 2 | scipy 3 | matplotlib 4 | numba 5 | numPy 6 | pillow 7 | scikit-learn==0.22.2 8 | matplotlib 9 | numPy 10 | opencv-python 11 | --------------------------------------------------------------------------------