Problem with comparison.
/Modules/Sensors/MAG01A/SW/Python/MAG_test.ipynb |
---|
0,0 → 1,704 |
{ |
"metadata": { |
"name": "" |
}, |
"nbformat": 3, |
"nbformat_minor": 0, |
"worksheets": [ |
{ |
"cells": [ |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Uk\u00e1zka pou\u017eit\u00ed n\u00e1stroje IPython na manipulaci se senzorov\u00fdmi daty\n", |
"=======\n", |
"\n", |
"P\u0159\u00edklad vyu\u017e\u00edv\u00e1 modulovou stavebnici MLAB a jej\u00ed knihovnu [pymlab](https://github.com/MLAB-project/MLAB-I2c-modules). Sn\u00edma\u010d je k po\u010d\u00edta\u010di p\u0159ipojen\u00fd p\u0159es rozhradn\u00ed USB a data jsou vy\u010d\u00edt\u00e1na p\u0159es [I\u00b2C](http://wiki.mlab.cz/doku.php?id=cs:i2c)\n", |
"\n", |
"Pou\u017eit\u00fd sn\u00edma\u010d [HMC5883L](http://www.magneticsensors.com/three-axis-digital-compass.php) m\u00e1 n\u00e1sleduj\u00edc\u00ed katalogov\u00e9 parametry: \n", |
"\n", |
"* M\u011b\u0159\u00edc\u00ed rozsah +/- 800 uT\n", |
"* Rozli\u0161en\u00ed typicky 5 uT\n", |
"* \u010cetnost m\u011b\u0159en\u00ed 75 Hz\n", |
"\n", |
"Zprovozn\u011bn\u00ed demo k\u00f3du\n", |
"---------------------\n", |
"\n", |
"Nejd\u0159\u00edve zjist\u00edme zda m\u00e1me p\u0159\u00edstup pro z\u00e1pis a \u010dten\u00ed do syst\u00e9mov\u00e9ho za\u0159\u00edzen\u00ed. A jak\u00e9 \u010d\u00edslo m\u00e1 I\u00b2C sb\u011brnice na kterou m\u00e1me p\u0159ipojen\u00e1 \u010didla. \n" |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"!i2cdetect -l" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"i2c-0\ti2c \ti915 gmbus ssc \tI2C adapter\r\n", |
"i2c-1\ti2c \ti915 gmbus vga \tI2C adapter\r\n", |
"i2c-2\ti2c \ti915 gmbus panel \tI2C adapter\r\n", |
"i2c-3\ti2c \ti915 gmbus dpc \tI2C adapter\r\n", |
"i2c-4\ti2c \ti915 gmbus dpb \tI2C adapter\r\n", |
"i2c-5\ti2c \ti915 gmbus dpd \tI2C adapter\r\n", |
"i2c-6\ti2c \tDPDDC-B \tI2C adapter\r\n", |
"i2c-7\ti2c \ti2c-tiny-usb at bus 001 device 070\tI2C adapter\r\n" |
] |
} |
], |
"prompt_number": 1 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Proto\u017ee pro p\u0159ipojen\u00ed \u010didel k po\u010d\u00edta\u010di pou\u017e\u00edv\u00e1me adapt\u00e9r i2c-tiny-usb. Vid\u00edme, \u017ee sb\u011brnice m\u00e1 aktu\u00e1ln\u011b ozna\u010den\u00ed nap\u0159\u00edklad i2c-8. \n", |
"\n", |
"V p\u0159\u00edpad\u011b, \u017ee v\u00fd\u0161e uveden\u00fd p\u0159\u00edklad vr\u00e1t\u00ed chybu, nebo pojmenov\u00e1n\u00ed \"unknown\" tak nem\u00e1me p\u0159\u00edstup k syst\u00e9mov\u00fdm rozhran\u00edm. Ten z\u00edsk\u00e1me vytvo\u0159en\u00edm souboru s n\u00e1sleduj\u00edc\u00edm obsahem ve slo\u017ece: /etc/udev/rules.d/i2c-devices.rules" |
] |
}, |
{ |
"cell_type": "raw", |
"metadata": {}, |
"source": [ |
"KERNEL==\"i2c-[0-9]*\", GROUP=\"i2c\"" |
] |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Toto ozna\u010den\u00ed budeme je\u0161t\u011b d\u00e1le pot\u0159ebovat, proto si jej ulo\u017e\u00edme da prom\u011bnn\u00e9. " |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"port = 7" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 2 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Budeme pokra\u010dovat na\u010dten\u00edm pot\u0159ebn\u00fdch modul\u016f pro zach\u00e1zen\u00ed s I\u00b2C sn\u00edma\u010di." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"import time\n", |
"import datetime\n", |
"import sys\n", |
"\n", |
"from pymlab import config\n", |
"import matplotlib.pyplot as plt\n", |
"import numpy as np" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 3 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Nyn\u00ed si nadefinujeme strukturu p\u0159ipojen\u00ed jednotliv\u00fdch \u010didel na I\u00b2C sb\u011brnici." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"cfg = config.Config(\n", |
" i2c = {\n", |
" \"port\": port,\n", |
" },\n", |
" bus = [\n", |
" {\n", |
" \"type\": \"i2chub\",\n", |
" \"address\": 0x71,\n", |
" \n", |
" \"children\": [\n", |
" {\"name\": \"mag\", \"type\": \"mag01\", \"gauss\": 0.88, \"channel\": 0, }, \n", |
" ],\n", |
" },\n", |
" ],\n", |
")" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 26 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Tuto strukturu inicializujeme, aby jsme dos\u00e1hli definovan\u00e9 konfigurace \u010didel." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"cfg.initialize()\n", |
"mag_sensor = cfg.get_device(\"mag\")\n", |
"time.sleep(0.5)" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 27 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Nyn\u00ed u\u017e m\u016f\u017eeme p\u0159\u00edmo komunikovat se za\u0159\u00edzen\u00edm pojmenovan\u00fdm jako mag_sensor. A vy\u010d\u00edst z n\u011bj sadu dat." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"import sys\n", |
"import time\n", |
"from IPython.display import clear_output\n", |
"\n", |
"MEASUREMENTS = 500\n", |
"list_meas = []\n", |
"\n", |
"for n in range(MEASUREMENTS):\n", |
"# mag_sensor.route() #V p\u0159\u00edpad\u011b v\u00edce \u010didel je pot\u0159eba ke ka\u017ed\u00e9mu p\u0159ed jeho pou\u017eit\u00edm nechat vyroutovat cesutu na sb\u011brnici.\n", |
" clear_output()\n", |
" (x, y, z) = mag_sensor.axes()\n", |
" list_meas.append([x, y, z])\n", |
" print (n, list_meas[n])\n", |
" time.sleep(0.2)\n", |
" sys.stdout.flush()" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"(499, [5.109999999999999, 163.51999999999998, -689.85])\n" |
] |
} |
], |
"prompt_number": 31 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"V\u00fdstupn\u00ed jsou v jednotk\u00e1ch miliGauss a m\u011b\u0159\u00edc\u00ed rozsah je nastaven\u00fd na 0.88 Gauss. Viz konfigurace \u010didel naho\u0159e.\n", |
"Nam\u011b\u0159en\u00e9 hodnoty n\u00e1sledn\u011b ulo\u017e\u00edme do souboru. " |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"np.savez(\"calibration_data_2Dset\", data=list_meas)" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 32 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Zpracov\u00e1n\u00ed dat 2D\n", |
"-----------\n", |
"\n", |
"V dal\u0161\u00ed \u010d\u00e1sti budeme pracovat s daty v ulo\u017een\u00e9m souboru, kter\u00fd na\u010dteme do pol\u00ed x, y, z. " |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"data = np.load('./calibration_data_3Dset.npz')\n", |
"list_meas = data['data']\n", |
"x = list_meas[:, 0]\n", |
"y = list_meas[:, 1]\n", |
"z = list_meas[:, 2]" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 3 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Nam\u011b\u0159en\u00e9 hodnoty vykresl\u00edme do 3D grafu." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"from mpl_toolkits.mplot3d.axes3d import Axes3D\n", |
"#%pylab qt\n", |
"%pylab inline\n", |
"fig = plt.figure()\n", |
"ax = Axes3D(fig)\n", |
"p = ax.scatter(x,y,z)" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"Populating the interactive namespace from numpy and matplotlib\n" |
] |
}, |
{ |
"metadata": {}, |
"output_type": "display_data", |
"png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4VNeZ/z93+mjUGxISAkTvBmMgmF4cbBw77iSsY8dO\n4WenbuJkkywu2XUcr5N12HWcdU/s4ECME+I4MtgBA4aEZnoRRYimhlAZSdPL/f0hn/HVaGY0Gs2o\n3s/z8MSBuWfOLXO+933PWyRZlmVUVFRUVFQGCJqenoCKioqKikp3ogqfioqKisqAQhU+FRUVFZUB\nhSp8KioqKioDClX4VFRUVFQGFKrwqaioqKgMKFThU1FRUVEZUKjCp6KioqIyoFCFT0VFRUVlQKEK\nn4qKiorKgEIVPhUVFRWVAYUqfCoqKioqAwpV+FRUVFRUBhSq8KmoqKioDChU4VNRUVFRGVCowqei\noqKiMqBQhU9FRUVFZUChCp+KioqKyoBCFT4VFRUVlQGFKnwqKioqKgMKVfhUVFRUVAYUqvCpqKio\nqAwoVOFTUVFRURlQqMKnoqKiojKg0PX0BFRUEonf78fr9eJ0OtHpdGi1WrRaLRqNBkmSkCSpp6eo\noqLSzajCp9Iv8fv9OJ1OAGRZxufz4ff7kWU58L9KIVQFUUVl4KAKn0q/wu/34/F48Pv9NDc3k5yc\nHBAyrVYLEPh3jUaD3+/H5/O1G0cIoU6nQ6PRqIKootKPUIVPpc8jyzKyLAcEDUCSJGRZxuv14nK5\n8Pl8AQETn5dlGUmS0Gg07cYTguh2uwN/Lz6rCqKKSt9GkmVZ7ulJqKjEQjjBA3C73dhsNjQaDWaz\nOfBZsecnPi/LckDAlH9CiZlSMJUIQdRoNAH3qSqIKiq9F1X4VPocoQRMKXgOhyPgxrRYLGi1Wjwe\nT+AzHo8Hn8+HyWQKjBX8JxZBdDgc6PX6gEtVCKJSDFVBVFHpeVRXp0qfIVjwlALicrlwOp1oNBos\nFgs6nY6mpqYOBUbs/QmxCv4u8UdYlR0JonIsMYbL5Wr3naogqqj0HKrwqfR6RFSmiMwMJXharRaL\nxYJer293rPhfcYzY/4tELIIIrRZnsJiF20MMJYjBEabij4qKSvxQhU+l1yIEz+v1BoRLiJfT6Qzk\n5iUnJ6PTtX+UldZTvCypSIJot9sDLlalGzbYOhSiFnw8EDhfJT6fD4PBgF6vbzOGah2qqMSGKnwq\nvY5QgieiMZWCl5KSElLwgukOgVC6OsWclAE14o/STRvKZRpKEB0OB1qttk3ahXC5iu8LtjJVVFTC\nowqfSq8hnOCJZHSn04leryc1NbWdxdUbCBYcIYahxEwpiD6fL+AyDSWIQDtBC7YQg125qiCqqIRH\nFT6VHkcInt1uR5ZljEZjQPAcDgculysmwYtmL68n6KwgAgE3ajQWIoQWRGEhBu8hqoKoMtBQhU+l\nxxAJ5j6fr82CL9x7LpcLg8HQay28eBNOEFtaWtqkXnRkIUYSRK/XGxBTt9sdSL9QBVFlIKEKn0q3\nIwRPBHEo9/C8Xi9WqxWDwUBaWlrCIhp7oyUYiVBC1FmXabAgis9BW0FUfqcqiCr9EVX4VLqNUIIn\nSRI+nw+n04nL5UKr1cZN8MK5OvvLwt3VPUTltYnGQlR+VhVElb6MKnwqCSeS4DkcDjweD0ajkaSk\nJLxer5q31kWiEUQRIep0OtsEEsXiMhWogqjSV1CFTyVhiAU2kuCZTCaSkpLQaDTtErpV4otSEHU6\nHR6Ph6SkJICQKReRqtREEkSbzdYm11EVRJXehip8KnEnnOB5vV4cDgderxeTyYTFYmmXZN7X9t76\nA/Es26ZMv9BqtW0Kibvd7jb3WxVElZ5CFT6VuCGsBeFGCyd4okdeolGFtGvEKojCtQ1EtBAjCaJo\n+6QKokoiUIVPpcuEEzyPx4PT6Qx0QuguwesIVRC7RkeCKPYNO2MhKseQZRm3290mBxE+FVGDwdCm\nbFtveKZU+haq8KnERKReeMLC8/v9nRI8VZD6NkIQNRoNer2+Tem2WF2mAlHkwOVy4fV62zxPofIQ\nVUFUiYQqfCqdQil4drsdSZIwmUwAAQvP7/djNpsxGAw9uvioQto7iNceohhLWZ9VGaUabCGqgqgS\nDlX4VKIiVPNX8fcejweHwwGAyWSKWfASIVSyLLfp1ScWP1UQE0ewAIUjWkF0u91tnjnlvQyVcqEc\nQ1nYW6AKoooqfCoRidT8VbylezwezGYzer2+1yweynJoWq020KdP9PQDsNlsYV1tsdCXBLU3zzOU\nIIr76fF4AnVcg1s/Bfcw7Iwg+v1+NBoNBoMhEFijCmL/RRU+lZBEEjy32x1waYp+eL1lcVBaeAB6\nvR6LxRJIttbr9fj9fux2O2azuVPlvnrLOcaTvnJO4vkTwS2CrpZtEyhF1O12t/leIaqqIPYfVOFT\naUOk5q9utxuHw4FGo8FsNrfpiB4PumIxKQVPdGMX5xDqe4CQi2CohVREGIYTQ3UB7Dni1fpJ2d8w\neBzlc6D8XlUQ+y6q8KkAkZu/KvfILBYLOp0OSZICVlVPzztY8IRbM7iTeTREWkg7CsQQi2qwhawS\nH6LdO4TYBBFaXeHRWIgdCWKoXojq89B7UIVvgBNNt/NgQRHEe0+rM+NFErxwn+/KwhNNIIa4juJa\nikVvoCVhd/VaJ5Jwgii63IsXmFhdpuJ5UJbfE2KqbAEVaQyVxKMK3wAlkuA5HA6cTmdg/04ZPt7T\ndEbwhPWVSJSCqAykUVqHA3X/sC8hBDH4WY/HHqKwCJVl/JTfGxxhKhLzVRJH71nRVLqF4Oav4QQv\nJSWlQ8HrTouvsxZeTxPt/qEqiNGTSEsy3NidcZkqq80E7x9GKuwdSRCV+4eqIMYPVfgGCOGav4oS\nU06nE71e3+lu54kOi4+n4PW0Cy6aRVQsgsr9Q2i1GtScs95DtHvB4l66XC7cbnc793dnBFEZgBNq\nD1ElelTh6+cIwXO5XNjtdlJTUwMuQIfDgcvliknwIHGh8OKHHy/BE4tUsEj3tBAKlItoqKokojhA\nNKW+esP59EXi9SyE2gu22+2Bog5dLdsGtNmiEK58IYSqIEaHKnz9lGALT1h3wqXpcrkwGAwxCZ4g\nEa5OiK/gRUpn6O2IRRRoUw0nVISpSMgOlcgd6nx7wm0Yj3H7KvEq2xYsiCKIRpKkdnv2oLZ+Cocq\nfP2MUC5NSZICPwir1YrBYCAtLa1XRZQJlya0uvV6+x5eTxKuskln9g/7Kn1xwY70ItBVQRQBVUBY\nC1FUvFEy0AVRFb5+QqRu506nMxBZFk/Bi4fFF7yHB5CcnNynF+eeINa8NVGQYKDvH/YWt7cgWkEU\ntXJFKbfOuEwHsiCqwtfHCdcLz+fz4XA48Hg8GI1GUlNTsVqtveYBDhe00tDQELfviLcrti8SThDF\n86HT6aJ2sfWWZ6evEU9RDRZEv98fyA+MR+sn+FQQhagq+x8ePHiQSZMmkZaWFpfz6SlU4eujRCN4\nJpOJpKSkhFlPsQhLX0tL6K+I5yX42ndmzylUeH0iXzSUUa6JGLsvC3u0FqKy00VHgihSnsT/93q9\nPPfcczz55JOq8Kl0L8rFCNru4TkcDrxeLyaTCYvF0u6HLISqJ37g0Qped1pp8b4W/cHC7EyFmlD7\nh+J69mURiSfdke4T6VqHu59KMQzV6SL4BUOsM1arlfT09PifSDejbqT0AZRlkFwuV5sFx+fz0dzc\nTHNzMzqdjvT0dMxmc9hk3O4uMSZKn1mtVjweDxaLhZSUlG6z8sLNT12YO4dYQPV6fcCTYLFY2rSj\nUtattNlsgehhEXXaW18KumNeiU796SwidcZgMLS5n0lJSQHXplh3bDYb3/3ud7nxxhupq6tj/fr1\n7Ny5s8NtCbvdzsMPP8yoUaMYOnQoVquVuro6li1bxpgxY7jxxhvbjPHkk08yduxYJk2axKZNm2I6\nr6jPP6Gjq3QJ8eC53e52guf1emlubqalpQW9Xh9R8LpjnqH+LhbBi6c4K6+FKnTxR5l7KBZQs9kM\n0E4QXS4XNpsNm80WCLZSJupHQ6K9FYlKwUj0sxfP/UPl/dTpdOh0OiwWC4888gjf+c53ANi/fz/f\n+973KCoq4uGHHw473je/+U1ycnI4c+YMFy5cIC0tjUceeYQ77riDU6dOcdttt/H4448DsGPHDjZt\n2sTJkyf54IMP+Pa3vx1TkfloUV2dvRAheKF64QmXpt/vx2QydaoXXqLy7oLnru7hqYQr2dbZAAz1\nhSUy3ZGPKUkSgwcPJj8/n2effZZXXnklsJbYbLaQx1ZXV7Nnzx5efvnlNn+/detW1qxZA8A999zD\n9OnTWbNmDVu2bOHuu+9GkiTy8vKYMGECe/bs4frrr0/IuanC14sIdmkqLTiPxxNo/mo2m9skNEdL\novag4l1pJd5z9Hg8OBwOZFkOhGiLMP+BSiKTzBOVs5aoe9YXk/nF2D2Bch83OTk55GeOHTuGJEks\nWrSIqqoqpk+fzgsvvEBdXR0pKSlAa2pVfX09AFVVVYwbNy5wfE5ODtXV1Qk7B1X4egGyLLcrQ+Tx\neDCbzYFFG8BkMsUkeIlGCHU8LLx4npu4pjabDb1eH1g4Re6SyGELrnbS265vfyeSIIpmx+JPcM3L\njirUDAS6S7T9fn/UUbVXrlxh9OjRrFu3Dq1WyyOPPMITTzzR7h4rexlG+rd4owpfDxIseMqAFVmW\naWpqAtrul3SFeFp8ykorYg+vt7g0lRGukiSRlpbWxm0Mn9ZPhE+T/9VOCb0LSWrbJkjcM1F+ry/c\nt75s8QWnjzQ3N4e18ILJzMxssyZ8/vOf55lnniE9PR2bzYbFYsFqtZKZmQlAXl4etbW1geNra2vJ\nz8+P49m0RQ1u6QGUhaOF9SEeMBEEIFyaqampcbPy4lVpRRm0IklSXEWvK3MUAT/Nzc3o9fpABZhI\nrrdQkW3KFw2v14vT6cRms2G322MOzFCJD6ECarp63/pyDl8i5x18XaxWK6mpqVEdO3v2bHbs2MGF\nCxcAKCkpYebMmSxcuJD169cDsG7dOpYsWQLA4sWLeeutt/D7/VRVVXHgwAFmzJgR5zP6FNXi60bC\nWXjCehKuN7PZjM1mC1gkvYHgoBXRoNZqtfb44q9M2jebzYGAn1hC6COV/oq0DyUa0Yr72VcX0r5K\nrPdNvBiJz8U7oKav7h+GoqmpKeocvtTUVF555RVuvfVWPB4Ps2fP5qc//SlWq5WVK1fy9NNPM3z4\ncNauXQvA/PnzWbRoEePHj0er1fL888+TlJSUsHNRha8bEBZeqOavoheeRqPBYrEEXDvhoqW6Qjwq\nrSS6I3tn5hhcpSZU0n4859VRIrB4sbHZbO3cbqLKSazz6ytC2tsW+mgCasSLqN1uB6LvcNHfCWXx\ndaZiy+LFizl06FCbv8vOzmbz5s0hP7969WpWr14d22Q7iSp8CSQawQsVECIW/p6sLBKt4PVEtRJl\n4e1oBU/sC8UbZdi+uF8ikEZZ5UR05+5s2H5PW9P9FaUgimtvMpnaVajp6v5hb3sR6Mr4/aVqC6jC\nlxCE4AV3O5fl1l54TqcTnU4XUUwSObeO/r07LbzOIJqyut1ujEZjpzpNdKeAKN1uoRrLhuqjF2xh\nDFQroyeJ5C6NRhC7u8NFd78UNTU19fkanYLesaL1E0IJnrCIlIKXkpLSoZiI47rL4otV8LqjDFqs\ngtfR3Lp74QjldotmUYXWwJ14Lqp90ZLsidxD6FgQRcpFqP1DkQKQiP1DMbdEEcriKygoSNj3dSeq\n8MWBcILn9/sDLk29Xt+pbueJcCGKOQXPvTdbeE6nM9Atvqu9BJU/5N4SYh7NoqoUw3hWOVEtyq4R\nbUCN2IsOd+9ifaa7O1WiqampTZJ5X6Z3rHB9FGWbD/EjEOIiCvR2VvAEiRI+5f5hPAQvERaf3+/H\nbrfHTfC6i3heC+XzJKr4QOQ2M73BXdoXI1oT4VkRlr3okK7c9w2+d70x/1B5LgJ1j2+AowxaELkt\nwp0hBM9gMMQkeIJEBY0EB9Z01cKLd1K8sJxF89xYr1+859ZbiNVdGrwH1dfoD/exK/culCB2d+BM\nZ9IZejuq8HWCcM1fhUvO7XbH1UKJ549diIpImO9NLs3gtA6DwYDFYunpafUZYtmDEotacPmv3k6i\n9vgSRVf3DyMJonCddlf+oSp8A4xI3c5lWaa5uRmTyRRXl1y8HmKlS1O8cYoisfGgK1aVUvCES1iE\n/at0nUiLqsfjwePxIMtyn3C5JZredo7R7B+K+xZp/zBWQVSFb4Ai3rhCdTtXJk4DWCwWjEZjXL+/\nq266UHt4Irq0p1FWqok2yrWr3xfqxz9QBVYpcOK5jcbCCC7k3Z1i0VfvVSL3D71eL3q9Hp1OF1WF\nmq66ux0OR2Cvua+jCl8Q0QqeqBEoqnTEm1iFL1LQiqhQ0VPzDJ5bKMELFXnalbnF8m8DkWgjFCNF\nl2q12oTuOyVyP6svuHkjEWr/ENp3uFAWa49l/7CvXyeBKnyfIH7g4sGATxcDZbX/4EohiQqg6Oy4\n0URp9lSwh3CniVqkvWl/sS8gXsZ6QqwjLahK6zD4d+NyuQacuzQUPV25RZKkdr+1aPcPxcs+9B/B\nEwz41SdY8JRh5MGCF6rbeSLFJJpxezoPL5KFFix40XRx6G+RmCKcPdZj167dwJ/+tAudTstdd83j\n7rs/T11dHRs2lFBfb2PGjLEsXryg24VFKYjingpPiWgHFbyghqp/2RsEsa8+b7GKajQBNeK+OZ1O\nFi5cGLDyn3zySSZOnMjEiRMpLi7uUBCfeeYZXn/9dY4ePUpdXR0rV66kvLyc4uJi3nzzTTIyMgB4\n8skneeONN9Dr9TzzzDMsW7as0+fVGQas8EUSPNHt3OfzhRU8QU9ZfLEIXneJilgAxX6iKL7dUxaL\n+EF35wJ34sQJfvnLN6mvbyEz08D48cXk5mZx440Lyc7OjmqM9977gPXra8jO/jk6nZbXX/9fzOa/\n8ac/7aShYREGQwE7d/6NhoYm7rrr1pBjiI4Rwdc+EZaIckFVdhbprLs03H5sIp+fnrTKegvK+yde\n2AwGA9u3b+fYsWP84Ac/oKWlhZdffpljx46xevVqHnzwwbDj7dq1iz/84Q+B83/kkUe44447+OpX\nv8qLL77I448/zpo1a9ixYwebNm3i5MmT1NTUMH/+fI4fP57QF/gBJ3zC561sDSRujLDw/H5/h4In\nSKTwhbKkumLhJWKuyjGDBS9eDXS7grA6nU5noHyUMgQ82oXJ7/fz8ccf09jYyLBhwxg1alSb76ir\nq8Nms5GZmUlLSwv/8R+/x2BYhU6XyocfbmTv3sOMHbucHTue4+c//yZZWVkdfue+fadJSbkRvT4F\nvV5PUtJnee+917l6dQqFhbcAkJw8jLfffqyd8DkcDn71q1f46KNjGAxavv71W7nxxhs6efU6T6jr\n2Vl3aaj9p75qlSWSRLtRhTVnNpsZNmwYBQUF/PznP2/zmXBcvXqVf/3Xf+WFF17ggQceAGDr1q2s\nWbMGgHvuuYfp06ezZs0atmzZwt13340kSeTl5TFhwgT27NnD9ddfn5BzgwEkfKEET/yghIUnmr92\npvFrPIMxgsdVPljxdGnG+wejdGlC1wQvXuIs7iu0NvcVlffFYiueBdFMN1KhYVmWWbPmFT78sAVJ\nGoEkreXhh+exdOkiKisr+f73n2Lfvkp0unQmT05j6dLxVFf7yctr4tw5GykpX8Lt/ncGDZpPVZWT\n/fv389nPfrbDc8jOTubQoYskJ48FwO2+TGqqKei6hr5eL764lm3bUsnPfwm3u4E1a35OQUEekydP\n7vK1jRfh3KXh9p+AQK5nPN2liRIQcV8SOXaiCB4/VEuicOclyzL3338/zzzzDLm5uYG/r6urC6RS\npaWlUV9fD0BVVVWbUmg5OTlUV1fH5TzC0e+FTyRuiwLRSsFTLtYmkymmTueJdnXGU/AS8QMUAuLz\n+Tr90pAohNUp7ktycnLg74XVIRY7UUoqUqHhsrIytm2rZfDgR9Fqtbhci3jhhUeZN+96HnvsOT7+\n2Ex6+lp8Pg379r3NwYPr8fmWcuXKPhyOq5jNmWi1PrRaM5Kkx+eL7kVpxYrP8fHH/01V1UW0Whg0\nqIxVqx7kscf+j6qqv2EyFdDc/C733Ten3bH7958hK+vHaDR6TKZcYAEnTpzqVcIXinD7TyLvUKvV\nJixcvy/SXe7fznRmePbZZ5k9ezbz5s3j/Pnzgb8PtvjdbndU/5YI+rXwifJXojloRkZGXK0TSOy+\nmc/nw2q1xjVopTPuvUgIcfH5fEiSRFpaWlx+hF25nsJVrRRhq9UaGDfc90UK46+srOTvf99CfT1k\nZDgxGo1oNGm43RoqKyupqGjBaPwMOl0mGo0fu30kaWnDGT16Hhcv+vB4fofb/RXGj7+Nmpp/kJS0\ni6lT/19U55OTk8OvfvVD9u/fj9lsZvLkO0lJSeEXv/gef/zj36ivP8nMmddwww2LQxybSlnZeUym\nQZ+cSzmZmcM7/M6KigpsNhsFBQW9qnqOuE/BwVFKC74z4frBYySCno7ojOf4jY2NUSevnz9/nvff\nf5833ngDj8fD5cuXmTdvHunp6dhsNiwWC1arlczMTADy8vKora0NHF9bW0t+fn58TyiIfi18ApFf\nJCwniN/+U7yFT5ncLcsyqampvSr0P1hcJEkKVIXpKXw+H3a7Ha/Xi9lsjmpvtiMkSaKiooLHHnuN\nxsaJVFW9S23t35gxYwlNTTsZMyaLtLQ0DAYZj+cUHo8VWTbi85VhNpuYMmUqRUUNHDqUhk6XTlPT\nMbTa3fz85w936kedlpbGrFmzAlYrQG5uLt/4xpcjHvfQQ/fwwx/+murqA8hyA5Mm2Zk///6wn5dl\nmRdffIO33z5Ec3MLPl8N9913E1/+8r0kJSVFPd/uJtT+YSh3aaRGwH0pAKW7CL4mnbH4/ud//ifw\n3xcuXODmm29mx44dfPnLX2b9+vU88MADrFu3jiVLlgCtndoff/xxVq1aRU1NDQcOHGDGjBnxPaEg\nes+KmgDEjXO5XEDr/kC8Ay7iuSeldGmazWZcLlfcRS/W+SoFTxn4E++k+M7ML7igQDwET8nGjVvx\neG5mxIjZZGVN55///C/KytZz442f4eGHV5GRkcH3v7+SRx99hUuXHkaWk8jMLKOo6HacTit1dcew\n28+zbNkakpNzqanZw/bth5kyZUrc5hiOkSNH8sILP+HkyZMYjUamTp0aMZXk4MGDvP12GQ7HdVRV\nncPnu4Nf/nI3paU/55e//Pc2UZqRSOR+WWf23SNZ8cHRpfDp3mFwdZrumnNvGjsUjY2NMTWhVc7z\nmWeeYeXKlTz99NMMHz6ctWvXAjB//nwWLVrE+PHj0Wq1PP/88wl/2erXwud2u2lqagr8AJKTk7tU\n7T8UXRW+cHt4Pp8vYJ3Gk87OV5nLGC9rqqt0pjFtV1y7ly/X0NIy4ZMahaO59tqvM3v2UVatWhn4\nzJw5s/j974soLS0FoLi4mL/+dTvHjz9LamoTEyfeTHJyDn6/n9TUsZw583fsdntUIfxdJTs7m7lz\n50b12ZqaGmR5DJcvb8NofAFJMuFyDeb06RKOHTvGtGnT4j6/7iZcdGlLSwsGg6HT3RH6M8G/mebm\nZvLy8jo9zrBhwzhy5AjQ+jxu3rw55OdWr17N6tWrY5tsDPRr4dPpdIGk6cbGxoR8R6zC11HQSk8n\nckdrTXXnPBPRmDYcmzdv5dixas6e/QtnzzoZNiyFpKS/M2NG+/20wYMHM3jwYDweDz6fj29+8z4A\njh8/zrPP7kOWfeh0Bq5ePcuoUXkYjcZ2hYZ9Ph+1tbXodDry8/PR6XQJrZYRvLANGTIEWf4Qv19G\nkoy43VdJSUlCo0kKNFjuz2i12ja/v2B3qdg7DOcuDRVd2lctvlC/i/5UoBr6ufApw6R7KtE8mGij\nNHtqvsGCpyzP1h2Emp8sf9rFoat9DkN9T1lZGW+++QGNjXamTy9m6dI5rF+/j8mTnyYr65+cPbuL\ny5eP8LOf3cu0aVOj/o7x48ezbNl53n//f9BoksnJsXPvvV9oZ3W0tLTw6qsbKS/XAX5Gj5ZZufJz\n6PX6gPiJ9kGJsg4nTpzIV74yiyeeeIGmph+QlDSP7GwfGRnnGDfu/rh/X28h3G+hs+5SIYhKV2ki\nXwi7w9WpHD9UOkNfpl8Ln/LGJdoy6ehBjDUtId4PeLjrIFyr0bgPoxkvHigDfWLtZC/GCUdtbS1P\nP70Bne4ukpJyKSnZTG3tn5GkNAyGZIYPX8rw4UupqHiOyZMndep7JUnijjtuYuHCepxOJzk5OSH3\nyrZs2cXFi6MYNmwBsixz+nQJhw8fZ/786wP3RUQjJ9IFt2LF7SxaNIfXX/8jZ8/uorAwk6985YeB\n3Cuv10tNTQ0Wi6Xb3/57S+WWSMn4IrI0OPdQlOzrK+7SUNdatfj6KIm0oCLtI8UqeIn6YQRfh87s\nl3UHoiCAELxwXRw6M57yv8+fP09lZSUWi4UxY8ZQVlaGyzWZQYNaE2gLC2/j8OH/ID3dQm3tEbKz\nJ1FXd5zUVGvUpcaCv7+jKi0XL9ah0RTjdDo/6fpRTHV1aWCRBSK2D4oUsdjZe5mbm8v3v/+Ndn9f\nVVXFt771BJWVPmS5ha985WYeeGBlu88pK34MJCSpfTFot9uNz+dDr9fH7C4NR3e7Ua1Wa6CuZn9A\nFb44Eco919XE83jl3IVCuV/WFcGL53UVVg20RuJGU9S6M+zYsYuXX96DRjMBj+cgS5eeZNKkkchy\nI263m1OnzlFTcxGz+RK/+tW3eOut97l8eT2FhemsWvVFTCZT3OYiqKioYP/+o5w6ZSMlxc7YsTnA\ncYqKBoX8fGdccCLHsqtiCPDYY7/i8uVbyM6+A6/XyksvfYcpU8Zy7bXXxnLavYZEW5IajSZkd4Ro\n3aU9YR2Gs/hUV2cfobtcncqx411pJRFzdrlc2O32uASICLqygIjyYsomuSkpKXH9wbtcLn73u60M\nGvQDjMZ6OnMbAAAgAElEQVQ0PB4XW7b8N/PmXceoUXW8++4vsdmGYzCcZejQG3jzzW08+uhXMJlM\nCbVg3njjfYYP/zqyfICKit3s23eaBx6YysyZyzs1TrT5bMqIRXFcNBbHyZPlZGT8DACdLg2/fxbl\n5eXdJnz9KdcunLtUKYaRoktF9ZrutKyF5dpf6NfCB22tpkTU1BTfISyoeLYHiqfwifm53W60Wm1c\nAkSg6y5ZZXkxs9mMTqejsbEx7nmWTqcTr9eA0dj61qrR6NBoMvF6vaxadQ8HDvwnaWnXkJl5D5mZ\nI6mo+D0VFRVtilHHG7fbTX29h6KiUWRnj8LptFJZuYX580fH7d6Esw5dLldAGIV1CLSzNoQgDh2a\nx/nze8nIWITf70SSDpGff0eX59jT9KbIy1DWuPLlRZQHFK5tse4kunZpf3rpEPR74ROIVhvxRjyY\nNpsNnU4X13548RA+ZUSkXq/HYDCEfNvsCrG4ZEOVF0ukVZ6amsrQoWYqKnaQm/sZGhpOYzJdZvDg\nwRgMBvLyhpCbOw+9PglZ9uPzWQP7aonCYDCQk2Ogrq6MrKwRSJIWvb4+UMopUQgxlGU54t6h0uL4\n8Y9X8d3v/pyGhnfw+Wq55ZaJzJ49O6HzVGn78qJcV5QBM0rXNoR/eYmWUL/l/iZ+/V74lItyIkqL\niYg7k8mE2WyO2/jK74n1OKXgCQtPWby5J+iovJj473j/0DQaDd/5zr/w0ksbOHWqhJycFB588K5A\nxOJtt13LW2+9hiRNwu+/wGc+k0JhYWHcvj8cX/rSjbz66ntcvrwLSbJx113XkpOTk/DvDaajvcNR\no0bx5pvPcu7cOZKSkigqKgoEHwkRFQ1oE7FA9sWgmUTPuaPcw3Du0lAdSDo6j/5Gvxc+QbyEL9Qe\nnih3FG9iWUCUKQA6na5dRGQiXL7RXNuulhcTP+pYrrOYW2ZmJv/2b18PLNJKD8DSpQsoKsqnoqKK\njIxRTJkypVsW2kGDBvH976+kqakJs9ncbXUxo32xUO5HZWVlBSJUlftR775bwtNPv4bb7WfcuCE8\n9dQPycvLi6v7LVH0J0sm0suL0l0aqRGwsCCVY4jC0v0JVfiiJFLQSm9Ijg+eX1dSAOJJLOkSwVb6\nm2++zbp1W5FluOWWWTz44MqQrlrxZhvKgoTWa9TU1MT69ZsoLa0iLy+Fe++9ifz8fCRJYuzYsYwd\nOzbmc431OdDr9VE1pu1NiEXy5MmTPPXUBiyWV0hLK6C09FV++tP/4de/frLXRSt2N71l/zCcuzQ4\nulTkiYpj/H4/GzZsIDc3N+qITpfLxfLlyzl//jxarZb777+fH/3oR9TV1bFy5UrKy8spLi7mzTff\nDKRHPPnkk7zxxhvo9XqeeeYZli1b1smr0Xl6fmVMMMrotVgWpWiiNHtS+EQKgHA7dbTHmIi5hhoz\nXukSW7Z8yO9+d4b8/F8iSVo2bHie7OwSbr/9c22+6+23/8Z77x0A4HOfu47Pf/7GNguDCAp48cW3\nqaiYTHb27dTUlPPccxv5yU/u69UdCHozpaWlyPJcjMZWt3BGxgqOHPlDm/3RcMndYjEOLgwdLh82\nUS7UvijA8Zh3uEhgsZa43W62bt3K8ePHOXPmDKNHj2bSpElMmjSJVatWha3d+ZOf/ISFCxficrmY\nOXMmN910E2vWrOGOO+7gq1/9Ki+++CKPP/44a9asYceOHWzatImTJ09SU1PD/PnzOX78eMJf2vuW\n07wLdHbBF3tkVqsVj8dDcnJyWCuqJ4RPCLLVag3kvEVj5XVHPqPD4cBqtSLLrW2VkpKSoha9ffv2\n8dJLb/D736+jsbGRAwfOYDYvRa9PQadLIjX1RvbtO93mmG3bPmLjxjpyc39MTs6/sWFDFR999I/A\nfJxOJy0tLTQ3N3P+vJOcnOlIkp7MzNFYrVlcvnwZn8/XL/cyEk2rpVqKLLfW87TbT5KT09Z6Fcnd\nBoPhkwT9JCwWSyCKV5nOYrPZsNvtOJ3OQMBGX70vfVFUxYuH8Bq9+uqrPPvss3zjG99g48aN3HXX\nXXg8nrDHG41GFi5cGPjvkSNHUlNTw9atW1mxYgUA99xzDyUlJQBs2bKFu+++G0mSyMvLY8KECezZ\nsyfh56lafEHEkoeXqFSJUHNWWngajSbuSd6xoEzn6Ep5sZdffpU1a/6CRjMfi8VJScm/M2/eVNzu\ni8AsAByO8+TkpLQ57vDh86SmXo9O15pgnpw8m6NHP+baa6/B4/Gg1+tJSUn5pHarF3Cj1Zrxej3I\nchMGgwGXyxWwQkK55PraAtZdXH/99SxY8CHbt69CoxmCRrOfxx9/pMPjOgqm8fl87Up/Ccuxs8EZ\n/ZHudKM2NTWRmZnJ+PHjGT9+fEDAOqKmpobdu3fzyiuvUFdXFwgkS0tLo76+HmitCDRu3LjAMTk5\nOVRXV8fxbELT74VPIEQk3APTlcTzRFpRysR4ZZJ3UlJSTH0FExHd6vf7A+kcse4tbtr0AT/5yR+B\nO4ALZGV5aW7OZ/ToC2RnH6eyshrQkZV1hpUrv9/m2OzsZA4frgLGAjItLRdJSmot5mwwGNDpdEiS\nhNFo5M47Z7Bu3e+BkXg8F1iyJI9hw4a1OZfg6ifQ9RDxvkpVVRVlZRcwGrWMHz++XZCDVqvl6adX\nc/DgQaxWK8OG3cnQoUMpLS3lyJEjpKens3DhwqhfzjpyvwFhgzOUghgtvWUfrrPjJpJQwtfZqi1O\np5O77rqLn/3sZ6SlpbV7CRYVmoCI/5YoBpTwhco3i0ellUS7OoWFB13vHB/P6FYxr66mc/h8Pn7x\nizfQan+IXr8Qr9fPpUvfxmAws3mzxIgRGh56qIiMjAwmTVpBampqm+NvvnkRhw+/THn5Zfx+L/n5\nldx22yqSkpKw2WxtPjtnziwKCgZ9Uq9zUpumsOEW3eAQcWVtTJ/Px5UrV9BqtTH1K+vNlJeX89JL\nHyHLk/H77Qwa9Ce+/vXb24mfRqMJVHCx2+188MHfWb36d/j9i4CDTJ/+Ab/+9VNdrreq0+na3Rtx\nT5S1MLsSut+X6K7zsVqtnUqxcblc3HnnnSxfvpwvfelLQKuVJ6JDrVZrIFc1Ly+P2trawLG1tbXk\n5+fH9wRC0O+FLzjCT2lB9ebSYuJHLayOeHeO78q8lJanxWIJuF1j4cqVK1RVVWGzecjPH0VFxTk8\nniz8/ixMpoOMG/cijY1HuXjxMn6/np/97DVSUkzcc89iRo4ciSy3Vnz57ne/SHl5OWazmXHj7mwT\nrBJ8b4YPH86QIUPweDwdXs9ILrnm5mZ+//tN1NSk4fe7KSzcw513LgFIyKLrcrmorq5GkiTy8/PR\n6/UcO3aSo0cvYjTqmD17QlzFd/Pmj7FYlpCRMRSACxfgxIkTXHfddRGP+9nPXsJk+h9MppHIsp+P\nP/4Gu3btYv78+XGbG3T8ohIpdF+Zf9gXLb5ErgOhLL4RI0ZEdazdbue2225j8eLF/OAHPwj8/aJF\ni1i/fj0PPPAA69atY8mS1t/J4sWLefzxx1m1ahU1NTUcOHCAGTNmxPeEQtDvhU+J2IvyeDy9trQY\nfFrGy+fzodFoSE1NjduD3pW5BpcXE0LscrliGm/t2j/yv/+7EY1mEJWVl8jOfoshQ27n7NkS9Ppt\nzJr1cyyWAhyOavbsKWHnTolBg75IY2M9Tz21gUcf/UIgWnTQoEEUFBSEPN9EUFdXx5//vImysiIm\nTFiEJEmcP7+DI0dOMHfuZ8IuusERjNHS0tLCunVbqKvLArwMHnyEceMGs2nTFTIyrsXjcVJWtpMH\nHlgYt9QIh8ODwZAc+P8ajQWXyx7xGJ/PR0uLPSCWkqRBkoq4ePEiZ86coaioKKEVcaIJ3Relv5Sh\n+8qUi3i8qPTlgJxgOtOZYe/evWzfvp2LFy/y2muvAXD77bfzzDPPsHLlSp5++mmGDx/O2rVrAZg/\nfz6LFi1i/PjxaLVann/++W6JsO73wqesBCLLMi0tLb2ytBi0htzb7Xb8fj9msxlJknA6nXFdvGOZ\na7jyYl0Z8/Tp0/zv/75HWtqL6PUZwD+pqfkuhYX7mDTJgyxfQ1raKOz2Kmy2Evx+F4WFn6O29gRX\nrpynpcXF7t27ue2222K2hGO9Z2fOnGH9+kMcO9ZMc7MWr/ckU6aMw2TKo7HxDDqdLuSiKwI2jh07\nwbZtJ/B4/EydOoQ5c64LNJ0Nt+ju2XOExsbRFBa29gS8fHk/p0/voqBgJcnJ2Z/8XRPnzl2ISvii\nKQZw3XXF/OUvO8jNnYfHY0OjOcKIEUsiHqPRaJg1awq7dz9HevpXcTpPU1//Dr/4RRJJSf8kK8vB\nb37zU4YMGdLhHIPn25XfgdI6FPuNwusj/l1ZBzN4PzfWBsB90eID2ll80e7xLViwAKfTGfLfNm/e\nHPLvV69ezerVqzs/yS7Q74VPhLMnsrRYV4VPKSwmkwmj0Rj4Ifbkm2NH5cW6wuXLl5GkCZ+IHmRm\nfgaPZxAlJS/h9XrZunUH77zzLAAPPTSPbduMHD36Fyoq9BgMM7FaZd59dx+33HJLm+aubrcbu90e\niOIMRyzn4ff7qaqq4qWX3kWvX0529iWcTj+XLrkpKLiCzXaKIUPa74UoF92KigpKSi6QmnoDyckW\ndu/ejcFwiBkzrglYh6GsQqvVSVLSp/0ATaZs6uq8+HzewN/5fB602k/FzG63c/XqVYxGI4MGhW5z\nFInZs68D9rFv399ISdGzYsX1Ue2//Od/PsITTzzLnj23odVKmEyZ5OSsR6tN4sqVP/Poo8/y2mv/\n3en5xBtxbZViCOETu5V7h/01yCmUqPa3XnwwQITP6/UmvLRYLAIlBC8RwhKOaOba2fJisZx/UVER\nfv/ruN11GAxZWK17yM1tvUcbN27CbveyatWtzJgxHb/fT3KymT//+TnM5qfweiE/fyySpOHs2bNM\nmtRqBR0+fJQ33tiGz5dEZqaPr33tVlJTU+Nmjf/pTx/w8cctlJScx2SqoKAgD49nHx7PLqqqkrjp\npmsYP35cxHEOHTrOwYN+TKZq9HovY8YM59y5o8yf3/oyFtyaRkSV5uUlc+zYMczmTCQJWlpOccMN\nE9m7dydO52Q8Hgfp6WWMGnUD0BpK/oc/fITLNQifr4np01NZunROp54vjUbDnDkzmTNnZqeuVXp6\nOmvW/AcAa9eu5Ze/lNFqW91XKSkLOXPm5U6N193EEuQUqt9hX9s7DDd2f+vFBwNA+MQ+HnRP8nY0\nD2S0wpKoKivh5tqd3dhHjhzJd7/7Odas+TqSlIPF0sDjj3+Lxx77P2pqpmEy5bF9+4fcd18tc+Z8\nhmnTpjJt2jDAjcmURGHhNKqqzgTO4erVq/z2t7vIyroPszmD2tpSXn31Hb7znX8JfKfP56O5uTmw\nP9kZTp4s5eTJZFpaisnK0tPcLOF06jAYJjNyZD0/+ckXSU9Pj5jc6/V62bXrBH7/NNLTp+Fy2di/\n/wNuv/3T+xDcmkaWWzt/XHfdVGy23ezfvx5Z9jNzZhGzZk1j+PAaysouYzLpmDx5ceBZLynZg1Y7\nh4KCQvx+P/v2bWLMmIsMHTq0U+fdVYqKitBo/ojPtxKtNomWlu2MH1/U6XF6OlCko7zDUGW/oDUg\nKd7WYaKFLxi73R54rvoL/V74IHEdGpTjh0qVCCZY8CwWS9wtqVjoanmxWOe5YsUdLF26gMbGRvLz\n8/n444+5cmUMBQWfBcBmG8Rf/vICy5cvQ6PRsGLFfDZu3ENy8kyqqrZRWHiVkSNHAq3CJ8tDMJtb\nXTI5OWO5cGETTqcTo9FIfX09r732V2prtUiSg5tvnsTEiZGtMyVWqw2DYRBOp4ehQ5dQVbWdhobf\nkZlpYtKkwqjeiG02Gykpw8nPb6aubhsajRmf7whTp97S4bF6vZ6lS+eyeHHbgIyhQ4cyZMiQQEi/\nzWZDo9FQU9NETk4Ofr+MJGnQaLKx2yMHpsSD4N/AnDlzuPvuQ2zYsBKNJoPMzGaeeOI/2xyzY8dH\nvPvuRyQlGVi58taE9kCMN+GsQ7FfKElSh9Zhb0u1CDWXvtYZoyMGhPAJRFRnosYOt/j7fL5AE9ho\nBC+aMbuCclyx/xnPbuydIbjivyxL+P0+JEmD0ZiE260NzOnWW5eRnb2bEycOkZOTwtKlX8Zkaq3W\nkpaWhixX4/E40WoNXLlyFqOx9QXD7/fzxz9+QGPjDAoLx+F229m4cQPZ2RkUFxdHNc/Bg3Nwu0+S\nnT2Gs2evfBJ8lIok5VJePog//GETt9++MOK+Ymv3BS+TJ8/DZmvA5WrB7y/sVKCH8v5EskCKi7M4\nc+Y4eXkTcTpbcLvLSEqagdvtDoTxd8dLlSRJ/OAH3+SWW5by5pt/5coVH7/5zV+4//4bGDNmDO+/\n/wGPProBne7L+HxWtm17gt/+9j8DRQX6IuK+iAIKgnAFEjq7d9idrs7uek66mwEhfMpw5UQ0o1V+\nh5J4uQ4T8aALCy/W8mJKonmhuHz5Mlu2bEWWZZYsWdym151Ihi8qKsJi+Ts1NTlYLHk0N/+de+/9\nNGdMo9Ewd+5s5s5t3wA1Pz+fW28dzYYNL3LqVCN2ew0TJxbyzjsfcOONC7h4sZG8vDEAGAxJaDRF\nNDQ0hJ1vbW0tdXV1mM1mioqKKC4uZtmyBv7+9z1kZFRw+XIZFssNXH/9fPLz87h0aR/Hj59i0qTw\nVqTBYOCWW65l48Zt+P0Z6PUNLF9+XVRuJBGc1VFglrBAli+fxzvvbOf8+dPodF5uv30ygwcPbrPg\nirD+7uia8P77e2lomM/QodfT0lLF88+v49FHs3n99fcwm79HcnJrIYGammY2bdrCqlUPBo7tDdsT\n8Rg32r1DkQbTE4E04a5Hb7JI48GAED5BIl2HyrHjJXiR9uNiQQiMcMV0V+uic+fOce+9j9DUtAyQ\nePHFb/PGG/9FcXFxIDdQkiQKCwt56qmHWL++hKamo1x//QQWLYo+6XnRorlcuFCJz1fAqFH/il5v\nZufOtxk27CR5eSk0Nl4kM3MYXq8bn6+S5OTJIccpLT3Nn/50DFkuwu8/z4wZ57nhhnnMnHkt06df\ng8/n489/3k59/TRSU1ujJY3GTJqaLnU4x+HDh/G1r+XQ1NQUKHweCb/fz86d+zl1qhmQGDcunUWL\nZnV43ywWC1/4wk2BRsTBLzZOp5Pm5maOHTuD0+ll1KjBAWEMteB2xRPg9XopLa1lyJAHkSSJlJTB\nWK0jqKioCPF7DP8b7W+LL0S/d6jMCRXHeDyehAuieDHqb6jCF8ex/X4/drsdl8sVN9dhPAVPVFjR\naDQkJSV1Wx7jyy+vw2ZbSW7uPQDU1WXzwgtv8u///u12yfD5+fl89asr0Gq1ATemEq/Xy9WrV8P2\nsGts9DJ8+A0Yja1WlNFYTHV1NXffvYiXXy6hoiIDv9/K0qVDQ3ZYb22seoDs7M9jMqV8EhjyF6ZM\nqSEvLy/wxj5iRA5lZSewWDLx+bw4HKcoKhoW1fWyWCxRN/YsLT3DoUNQXHwLkqTh2LG9ZGYeZ/r0\nKR0fDCGvIUBzczPr1u3A45mMTmfiyJEj3HmnhuLi4VGF8ncm0bs1b1aHzXaF5ORB+P0+fL4rWCyj\n+eIXb+A//uNZvN4H8fmaMJv/zA03PBHVucWDng6aCUco6xA+3Y8Xe4fKFk/xKK4ejzqdfYEBIXzi\nRiZK+ISLwmazxT0asitzDlVeTKfT0dzcHNfr0NEcm5sd6HQij0xGo8mhvr4Jo9HYLhn+1KlTbNmy\nD71ey8yZE9ix4zAXLtQzfHg2y5fPYd26v1NZqUeWncybV8Add9zU5vjCwkz27z+DxZKN3+/D7S4n\nJyefvLw8vvWtO2loaMBkMpGenh64Lkq8Xi8uF5hMrZZY6yLf/rPTpk3GZtvL/v1vodFILFs2mpEj\nR8RcxSYc1dWNJCUNQ6NpXQDT0oZRWXm8y+OWlZVjt4+mqKjVNdvUZGHPnn2MGFHcoTsuUqI3hH5Z\nu//+G/jNb9bS2DgKn6+auXPTKC4uZsSIEZhMRv761xKSkozcd9/qqMtjDUSULx7KRPxw1mFwtaCO\nrMPgwgZWq7Vdbdz+wIAQPkG8hU+ZHC9JUqDXWDyJdc7hyot1ZcxYWbZsNtu3v0pLSx4g4/G8yq23\n3t6udNWJEyf5xS82o9XOx+fz8NJLa5gw4U6GDr2T48ePsXXrf2MwTKe5Wcbr1XLp0iFGjSpsU2j6\nxhvnUl39Fy5ePIssu5g9O4uJEycArdaP6LYebk/SYDAwbFgyly4dJi9vIk1NNej1VeTkXNPmcxqN\nhvnzZzFvXmuOm3gDjzeZmUk0N1/E5xuGVqvDZqth7Ni2z1gk66Kuro7t2w/T2OiguDib2bOnYjAY\nPon2/FTcWve/Q1+TaNxxYr8QCESWKhfccePG8uij2Z8UBx/BiBEjAnNevHgRixcvCnsNuqNSSbzp\nzgCUSNZhqL1DcS+jaQDc1NREenp6Qs6jJxkQwhfvBV8peCI4xOVyJeRB7+ycg8ueBVtUiSDSHP1+\nPwsWzOPb377C+vWPI0kS3/72zdx8803tPvv++/tISrqJtLSRtLS0YLcvxun0YTAkU1Awi3/84wV0\nuqtkZq5Eo9Fz/vwb7Nixu43wJScn89BDK6ivr0eSJOrr6ykvL2fkyJGBhbsja/zzn19ISclOysoO\nkpGRxJ13Xh82ACWR19bhcHDuXDXl5cc4cuRjRozI4Zprcrn22nkAnD1bxubNB2lqsjFxYgHLls1v\nk59os9nYsOEfwHVYLBkcPHgSl2svn/3sHIYPL2Lv3n9y5YoFvd5EU9Mhbr01ughXgXLB1ev1gZxD\ns9kcSK9QWh8Wi4WxY8ei0WgCe4mhrp9wySeypqegr4pqNITam+3IOhRji3JuVqtVdXX2dcQCHevD\nHkrwxFtWd6QeRCK4vJgoe9aVMbuC8loZDAa+/OV7efDB+0J+1uv1cvDgQc6eLaOpaQLp6RI6nRZZ\n9uL3tyaE+3xu/P4W/P6xmEytQRg63Thqao7h8/mora1Fp9ORlZWFVqslIyODNWteo6TkKi6XlsLC\nP7B69b0MHjy4zY88VICAxWLhrrs+G9N5u1wuLl26hNvtZfDgvIh1M2W5tbFquL3W7ds/prp6OIsW\nLcBub6G2dgdz507CZDJ9UpllL5cupSBJQzh8+DhW6zv8y7/cETi+trYWhyOPgoLWvczBg6dRWrqB\npUv9pKens2LFbA4dOovb7WP8+BGBnMiuEm7BFWIYLnLR4/Hw1FPP8eGHh5EkP/fcs5iHH34wzLf0\nbhItqLGOHc46FPfH5XIhyzKlpaUsWbKE3Nxc0tLSMBqNTJ48mcmTJ1NcXNzp7y8pKeGHP/whHo+H\n++67jx/96EcxzT9eDDjhiwXx9uNwOMI2W01kjmAkOlteDOIvfMrxlNcqmlQJn8/Hc8+9zsGDJhob\nh1Na+iJlZYtoanJjt2/k6tUxXLiQi99/mhtvnMDu3VVYrfuQZS+FhR6GDMnjN79Zz+XLOvx+N9dd\nl8ntt3+WXbt28ec/Oxg06BvodGZqanbwm9+8zS9/+cM2P/JwycWxNDV1uVy8885OTp2Sqa5uQqu9\nwoMPXs+sWe1Lfp05c5atW0/g9WoYPjyVxYtntrNwLl1qJCdnFj4fZGXl4nSOobm5mby8PHbv3sf2\n7RXk5NzF4MFDSUqawt///gK33NIU2JPR6/X4/Z8mrXs8DvT6T88pOzubZcvatzHy+/1cuXIFr9dL\nTk5OVJbXyZOneO+9A9TWNpCRoWH8+NFMmDCc4cOHA63PSPBvJtj6ePnl3/PBB3pycv4AuFm79jGG\nDSth2bLYXkI6oq/mpyVCVMX9EUUsJk+eTEVFBS+++CJlZWW43W5eeeUVSktLKS0t7VRgnM1m46GH\nHmLv3r1kZWWxcOFCli1bxtSpU+N6Dp1hQAif8iERbpZoQnTFIi5aGEUK/+9ui687y4tFg1LwNBpN\n1KkSZ860Ri0WFNyD1XoWj8fG8eP/y+TJy1m48D+prNzI9OmlzJkzG5PJRHn581y54iU7O5Pi4qto\ntamcPz+aIUNm4vf72b37r4wYcYRTp84CxRiNycgy5OZO49y5dwECguZyuQJRj6H2qzq7H3LhwgVO\nnPBSW5tJauoS7PYGXnxxI0VFQxg8eHDgc7W1tbz3Xjm5ucswGpMoLz/Gzp0HWLz4M23Gy8pKoqHh\n6ieBOn58vquYTEPZunUHW7ZcoqXFhNE4CLu9ksGDLZjNWdjt9oDw5efnM2rUaU6f/gitNhO//zzL\nl0+IuGj6fD7+9rdt7N9fhyxrycvzs3Ll0oj7PJWVlfzxj0exWJZSVlZGfX0lp0/XsW9fI/fc42L8\n+LEhjwu2Pg4fLic19Wvo9UZk2Yhe/1kOHNjPokULkWUZu93epReTcCQqqrOvVzsRcQFLlizhnnvu\niXmcvXv3Mm3aNHJzcwG48847KSkpUYWvO4lGoILD/y0WS4e1HbtL+LpaXizUmF1FuLCcTmdU10qJ\n3W6nutrJrl1baGqSkOUpyPJhysrOk5NzkIKCWzAYzlBYWMizz64nL+9WLJartLQcY+7cazl3zkp6\nevEn5wVabSHl5ZcZMmQwcAS/fzFgoKFhN8OGhc+ZC96vgk+jGZX7VcGVNhwOB7t2HaayshmHo47q\nahepqQswGjPQaMxYraMpK6toI3z19fVoNEMwGluDVHJyRlFevqndnBYsuIaNG/dQVWVBp/MwebKZ\nQ4fKeOutY+j1C5Ckt2hpOQBYSEo6yowZ5jZ5gRqNhptumse4ceU4HE5ycqZ02Kj2zJkzvPPOWVyu\nUWi1yZw+fQzYyN13LycrKyvks1ZZWYUkjcFm8+J05jN48DQcjnfIylrEtm1bwgpfMAUFWZw5c4Lk\n5AmAjM9XytCheZhMpkDpuXAvJsFi2Nf27TpDdwbONDY2djm4pbKyMiB6ADk5OZw5c6ZLY3aVASF8\nwWRmtd0AACAASURBVBFQ4Rb9WAQv+Ph4o9yXjFd5sXgJnzKQRpKksA1z/X4/77yziS1bjmAy6Rg7\nNpvS0npaa00auXTpAA7HRAyGSdTXv4FWa0Kj+TwnT/4Th+MqS5aMpaysjMbGYoqLWxPanc6l7N+/\nlqlTh/GPf5zCaEzH5XLicJxlxIhRTJ48iYMHz7J58+P4fCYKCz1tClZHe52CoxmVof0+n4+Skn9w\n5cowMjKm09BQTmXly/j9l9FqU2lqukBurgGjse3PzGQy4fNVBBaZlpY6MjLaV2TJzMzkC19YQFVV\nFWlpadTU1HLsmJPMzDEYDGMZN+5erl59H0nyMn68hbvuWtYuP1Cr1XZq7+706TKuXs1l2LBl+Hwe\nLl5sZv3693G7ixg+XGb58nntfhNmswmv9yqSlI0kaXG760lONqHR6MNGigZz+PBhRo/O45///B11\ndUeRZQdjxrRw550/bROWH+rFJFy39Y7C+LtTQOI5bqIINXZzc3OXg1vES6USt9vdpTG7yoAQPiWh\nFv1w+W6deXATGTAiOsbHo7xYPFDuK4pUiaamprDXq6TkA9544wK5uQ9y5swe3n77XebN+x4ZGRls\n2PBThgyZh8ezFat1KyZTDpI0CI/nAlCA3b6TBQu+zLlz59pcX7GwzJ9/HRcuvMOFC6VoNH6WLBnC\n5MmT0Gg0/Nu/Pcxtt52ioaGBcePGYbFYAgvlrl372bPnLKmpFhYuHB91YWSlGDqdTurrdRQVTf4k\nbWQi06bNorLyT1y9eoacHDPDhjkpLp4QqJGp1WopKipi4sQKTpzYikZjwWi8woIFoVv/iF56FouF\ns2cvYjRmM3KkhaNHd6PXDyE/fxizZvm4++7FUSfFi+sXCovFhN/f2uevtvYSNls2eXljKCy8gXPn\n9nL8eCnXXDOpzTFjxoxh9Ogyjh79GIejEq/Xx7hxc6mp2cby5cNoamqKWDDh//7vNV56aTuSNBWf\nz8hNN7m59dabmTJlCkajMZAmEeleBDf+DRVIE5zk3d1pPfGkuwJn4pHOkJeXR21tbeD/X7lyJaq+\njolkQAtfsOAF57t1dtx4IvbMRJpEPMuLxRqIo9xXVBbbDh6rsbGRuro6cnJySE1NZfv2Y2RnfwGL\nJQ+7vQWd7m6sVh/NzbuprvbgdG5l0aJ/Zf/+Rqqrq7FYyigoSGL48BmMHeskNTUVi8WC3/8ep07p\nyMwsxGrdw803D0ej0bBq1QpsNhtarbbN26lGo2HkyJE4HA5SU1MDb5n79h1ixw4nWVm3ADJvv72N\nL33J0sYdGQ2tz4obr9eNTmcAZHJzU3nooftpampBkmDIkEKSkpLaVUH5zGeuYfToOnw+Hzk546LK\n/8zLy2TPnnIGD56DTmegtHQX06bpufXWpZ1uswShn9mJEycycmQJtbU7qa21YjbLjB/fajGazXnU\n119sd4xOp2PFipuYObOcixfNVFU1AxfJyTGyY8cpNm0qJynJwxe+MI8hQ4YEGuSazWa8Xi8vv1xC\nSsqb6HRpeL0NbN78Rb773YdjTmeIJpBGuK2BNhWN4lUCrLdWhOns2FartcvCN2PGDB588EFqa2vJ\nyMjg7bff5sknn+zSmF1lQAhfsKtTLELxEDzluPHKEVS6W0V193jW1OzsXDvaV1SO99FHu/jFL97G\n4TBx5cpxZs6ciM3WglZbT0rKEAwGIz5fLdXVZ2lpycRg+AYazX727v0NY8eOx2DYQX7+NPx+mdLS\nVzAYhvHtb/+Ys2d1eDxpuFxrmTAhhy984SZmzJgeyFMMt0gq5yb+++TJKnJy5uH3y3i9TrzeAi5e\nrOy08BmNRubMGc62bR+i0RTg9dYwZUpqxJ53Svdcbm5uYCEOlfQd7MoeOnQoCxa08I9/lCDLcOut\nw9HrtaxfvweACRMymT372i4FVQwaNIivfe16Nm8+wrlzldhsZiZOvB+/34fNVk5+fnbI43Q6HcXF\nxRQUFJCUlITL5eJXv9qAXr+MwsJ8mpqqWbt2EytWXM8bb2zDbs/G729k9GgZrTYPnS4Nn89GQ8OH\nNDX5efXVt/j6178YtxyyUGH8rVV6XJ9Ev0ZuLitKtPVnQglfPCy+5ORknnvuORYuXIjH4+Hee+9l\n7ty5XRqzqwwI4YNPFz3xtgfENcG7q8IXzt3qdrsjNjdNJJHyFkNRX1/PL37xNkbjQ5w+/Tuczod5\n//0Ghg49i8/3FA7H/UhSE2bzRs6eTUKSHkarPcPChXPwei3cdpuHG254kU2bNvHWW5dYtuy/qK+/\nyltvrSEt7fM4nQbgGpqb/8q8ebUxWwTJyQZOnjzDqVPnkaRsGhuPMWbMYGbNmt7psaZMmcCgQVlY\nrVZMpmER8/YgNveceBnSarVMmjSeiRPHIcsyp0+XsXVrE4WFNwJw+PA+0tNPM3FidMEk4Rg7djRj\nxozC5XKxY8d+TpzYBMjMmDGIMWOicwk3NzfjcCSTldXq0kpNzePy5RRef70EjebzFBYOxefzcPz4\nWjSaC1itW7HZymhqMmE230Z5+Uh+/es/8sgj9weuWyLoyDqMNZCmr1p8wbjd7jatlWJl+fLlLF++\nvMvjxIsBI3wejwe73R5IGI4m360zdCU5vrvLi3U0ptLq7CiNQ4wHohlsHk5nDW73RFJSlmO376Ww\ncAE225Pcd58Pg6GAP/1pIh9+eAW93kxy8gJOnjzE6NEtjBkzmaysLJKSMikqGkdm5iD27DmE0XgN\njY0OcnIW4Xbb0OvL+OijKubOraCgoCDq825paeHixYvk5ZlZt24jPt8dmM1pFBRYKCu7SENDAxkZ\nGdFfyE/Iy8sjLy8v4AqOhXALsLBKRI1M5QJ8+fJVLJYRgeNTU4dSVVXGxIkxTaHdfEwmEzfcMId5\n85wRrepQWCwWtNpmnM4mTKZUnM5mtForjY0ehg1r7T+o1eoxGofy4x9/leee+xWVlS5SU+9nwoRr\n8fszuHixlJqaGgYNGtTBt8VOqN9qpAjfcIE0wdZ6okj0nqTyeig9Jf2NASN8wk0nHtxEJIB2lmjK\ni3Wn8CmtTkmSOhXV2lpe6xxW60G02iJk2YfH04xW68Zg0CFJFpYvX4bT6eQPf9jH3Lmr2LlzHefP\ne/F4mjGbm8jJWQxAWloSLlcVXq8Hm81Dc/NxvF4bbrcTj6cco9GG2TwCh8PB2bNnsVqtZGSEbyor\nyzINDQ389rebaW4eiscDfr+Oa65JITXVQk7OMKqrHbS0tMQkfIlCLMBChKBtikVqqonS0moslixA\nprGxkpEjtXFvVxOuw0MkzGYzd955HW+99WdkORtJusodd0xn586jVFScYNCgibhczfj957nuuiW8\n9dZ8vvrV/+by5SFcuZJPVZUdn+8oBw5ko9ebyMvLYerUqVRWVrJ9+0EcDi/TphW3C7RJFJ211KF1\nzYkm/zOWuSSCcC/tqvD1YVJSUgJ7e+GixLqKEJSOHpTeUF4seMxIVmdHNDY28sgj/0VtbTFO5yQu\nXXoW0OF2n2fixNlUVKzhuuuSeOedEsaOHcn586VUV9fR0HCJlJRb0OtzGDMmjVdeeYfHHnuIqVMn\ns2fPeo4ceYUrVy4iSbVI0nkqKo6TlZXNtGm3odMd4KWXjnP8uJvMzGEMHpzE8uVXmDt3Vpu5iXP4\n5z8P43Zfw5Aho5FlmWPHjlFfX8Xo0aNxOJrQaK6Slha6P19vQrkAT506kZqaf1BZuRdZliksdDFx\n4nUh96qCF+BEEPzsjxs3hu98Jz9Q4T8tLY3Bg/N4/fUSLl/eh0bjZMWK6wK5hRqNFY/nKFqtHlk+\ni91+lf/P3nnHR1Vm//9979TMpBdSCSH0QEINJSCgKCCoiAqKDcS2uLrF/cm6uq5r19V13V3Lrn3X\n5YvKLoooIEWK9F5DQktIL6TMZGYy7d77+yPccYiTniCCn9eLfyaXe5/73Huf85xzPudzPvywhNjY\n4Xi9B7jyyjyOHLEiiuPR64NYtGgLsiwxbNiQpobUpvG2B4E8dbU9mVar/Z4eZuMcblufx/kmt1yM\nRg8uIcOnoispzC2duz3yYl0B/2t6vV7q6+uRJKndOc8lS76gpGQ0BkMSp0+/jN1uIDIylqSkQ6Sl\nOdm1K5+VK8ewdm0J8B9iYq5Fr49FUTzU1W1iwoTr6N07i/z8byksLGTNmq0UFdWQnb0NtzsMvX48\nen13YCt6fS4xMYewWu3s2NGTmJhJVFUdwWx2smbNMYYPzwjIkLTZPBiNob77z8jIoqJiFcXFNej1\nbq6/fuiPrv2KXq9n+vTLqK6uBhrq/hq3E1I9kUB5Q4/Hc45x7AqEhoaeM68RERE89NAcbDYbBoPh\nnPBpSkpvwsP74nSeAUzs3ZtGXNz1JCYm4vUOZsmS35KaehspKf0A0GgMbNmytt2Gr6ugfj/+0RL/\nUOmPhUjjdDrb5e3/GHDJGL6uzJn5X6Oz5cW6KtQpyzI2m81Xi9cRI1xebsXlMrJ//zO43Q8gCOHU\n1LxMr14z2LBhGfn5VyCKl6MoLrzeDYSF9WbixL5s2JCDIGQRHi5TXX0avd7N6tVbWLGimLy8SoqL\nu1NfX0By8hUoSgImU3+6dfuSrKzefPFFNaGh/TGZ4gkKiqWo6H0iInS43e6Ahq9//wSysw9gMIQg\nyxKCUMzdd19Njx7JmEymdpUDXAjQaDTExMQE/FsgJqO6+DqdToCAajT+i29XLMCiKAbcZIwf35/P\nPy8iIeFyyssPotM5iY6OOnufBkCH1/td4bMse9Bq22+w1e9KzZ92BomjKQQSQ1DH0FLjX38izflW\nbbkYOzPAJWT4VJxPw3chyoupY1J3mh3V+Dxx4gSFhSc5dmwPsvwLRHEyYEAQXJw6tZSamkr0+iGY\nTIMBhTNnIsnPP0xW1mgGDYplx47/cfiwl/BwmV/84mpefHEJBQXp2GyjUZQSZDmF8vJ3CA+/F43m\nBMnJMWi1WoxGLSaTk4qKfNxuhdra41xxRZ/vLajq/KWnp2Gz2dmx4ytEUeDaa/uRmtqDoKCgH72m\nYlugGkNo8Eg0Gs33vJHGjWbb0si0I5gy5XL0+s3s3r2cmBgNwcFBWCw5hIQkUVKymdRUMxrNXoqK\nTGi1JtzuXdxwQ2aHrvnVV6v4298W43JJZGb255ln/l+H6fttMU5NbU6aItKoBrSz87jqdf2/hYu1\n+zpcQobvfHp8F6K8WOPSBKDDTXOPHz/O/Pl/5MyZZLzeetzuSkTxDDpdLF6vh9raciTJjcezHq+3\n39l8iANR/Jxly0qxWouRpGwiI2cRHz+Av/1tGSdPhlBfn4HROAKnMx+j8Uu0Wi863Tf06RNMdHQ5\nhYWh1NcfxmCwUFS0i/r6EpKSJOx26Zy6I/VZQMM8jhw5jOHDB/veBbvd3qH7/7HizJkz7N59FK1W\nx8CBPXzNedvTSqgzQ3OiKDJp0nguv3wcOTk5FBUVsWfPRgoKKsjPr8DlGo3Xe5pBg75h2LAhpKVl\n+bo/tAeHDh3i5Ze/JCzsn4SGxrJr1z958cU3efHFxzp8Lx1Bc0Qa1VNvb2PZtuAnj+8iQkfKDloD\nt9uN3W7vdHmx9o5XVYDxbxMkimKnaOW9//7HHDvmRhRHoNPF4Ha/jV6vwe0GUXyP7t3HIMtJFBSc\nRpY/QlFchIZWk5ISSVhYGocPx1FRkcWRI8dRlFGcODEAQShElmuxWg8jCMfRak8SFuYiI+MA/fsn\nU1ERzcmTaZjN3cnO/ieDB4+ib99biY8fQHHxPg4dOsq4caPZsWMvmzblIkkKGRnduPrqSU3ehyzL\nZ3vouYmJibkoO06rqKqqYunSfUhSHwwGA8ePZzNjhhKweL+lGrfGoTn12/J6ve1efBVFYfHiL9i2\nzY0oJuFweMnLyyEh4WGSksYjSU5yc19l7tzeJCcnd2gucnJykOUrMBgaag0jIm5h1657OnRO9R66\nYm1R57NxmUVTjWXbSqRpPO6fPL6LCF1VVOpyufB4PK2qe2sL/BeUtrK//BVg/MfkL9nWkfnYvz8X\nr3cKJlMaOt0kFEWDyfRPzOYYBg/+MzExY6ioKKSiYh5u92mCgw3ccUcWFRVpOBwZuN1lhIT0R5Yr\nyctzIkmhGI02JKmM6uptgIAs1yIIbgoLe5GTc5qoqOFERgaRnNyHgwfHExkZQUJCGgCiqMfjsXP0\naC6rV1eSmDgLQRDYvHkVCQmHSUvr973O37Iss3r1FnJztWg0oYjiVmbOHNym+sAfCzweD/v3ZyPL\nqURFJaHX67FYNBw+fKrVqjXNhebcbnfAGjdo8FBMJlOLi29hYSGbNpWj0w2lqiqfY8dqKCrqSU1N\nNnV15QwYMAtRTKCsrIzu3bt36P0NDw9HEHaiKDKCIOJw5BIff+GUs7QGgZ4HcI4xbK233ng96Ay5\nsgsVl4zh83+gnZUkDiQvptFoOlVerD1Qi/WBgLV4nWX8NRoFp/NLXK4ioACdrgcTJowlISGJ7Gwr\n2dk7KC09gSybGTfuLmJielNa+glQRU1NHZGRPSgtPYyi1CDLdpzOLxkwoA8HDmwiKOhaNJoYjMa7\nqK5+j1697qC29j8oSjf27y8gPj6O+PgIbLZDWCxDz3ZoP0D//hPYt+84wcED0OkaGIMN3uURX+G0\nuiArikJ+fj45ORqSk8cjCAI2WzLr1m3lzjsvLsN35swZVq7cx9GjZygtLSIzUyQhoVennNvfE4Hv\n6v5kWebrr9fy4YdrcbsVMjISeOCBWwkJCQlI3FDHeeTIMUQxjeLiOgQhHJ2uG4JwFcXFK5Hl9zl1\najl//nNfBgzYwUMP3dqiWk5TGD9+PJmZW9i791cIQjx6/R4ef3xhh+fjfJccBEIgpm5LRBp/pRqN\nRoPFYvnJ47uYoLIa25t3CyQvptPpfHVwnY3W5vn8C+JVpmJL9YHt/UCrqqooK/NiNP4CSeqOLFuB\nXzFnzu8YOTKTa655AJstCkXREx29kBMnNpCSMg6LJYXMTC3Ll3+BxRKNTncUnc6CzXYQszmJggIP\nXq9CRMSIs+17wqmvT0CW7URFDcZm2wD0oahoP8nJFVx++Thyc3eg1YpMmJBFQkICeXlF1NdXAz3P\nbkyqCQ9vYK6qDEaV5NNA9DH7xMA1miBqaxvKO7qSyHE+0WCA9qHRZJKebqCm5jDbtm1n9Ggvonia\njIxOkHoJgNzcXN59dw+xsU+h14eRnf0ZH3/8FQ8+OLdJObC8vCI8njRCQoYgCCKSFEJ4+DeYzQWU\nlR2ntvYYo0e/QHLyAAoKNvGPf3zK448vaNf4dDodL7/8BAcPHsRutzNw4JwuVYnpDHRkfWkNkUaS\nJNasWcN9991Hz549SUhIoL6+nsGDB5ORkXFOv8dAmD17Nnv27EGr1TJlyhT+9re/AQ0CF/Pnz2fv\n3r1ER0ezaNEiUlJSAHj//fd55ZVXAFi4cCHz5s1r9z22FpeM4fNfwNTdfnvQkrxYe7oetIS21Ae2\nVBDf2nO2hDNnzmA0JmA0/o+6OhdgJyoqlAED+qMoCgkJvZCkG6irE7FauyFJX7N37z9xOvMYO3YS\nDz00lKef/g92+xjs9gL0+mHMnHkHVVVn+OqrFzAY9hIWdjlFRfsxGErwesFohORkMxrNNkaOHM9l\nl11NTEwMY8eeO7ahQwdx8OCXHDtWjkajIzS0hAkTZpzznNQQT0JCAgbDdjyenhiNoZSVHWHAgEif\nTJh6bOMQ0Y8JTqcTu11DQkKDwPT48YPYvfskCQmnyMoa0mWLfV5ePoKQicHQEC6LibmCgwdfbLbh\nb0VFFXFx0Vgs+9DpLEiSBa22gpCQAxiNxYSF3UhERBK5uSeAOPbvP9WhTaxWq2XUqMAtodqLrvT4\noHPTNY3LLIxGI9dddx0TJkzgueeeQ6/Xs2/fPj788ENEUWT79u3Nnm/evHl8+umnyLLMNddcwxdf\nfMF1113Hyy+/TGpqKosXL2b16tX88pe/ZNmyZeTn5/OnP/2Jffv2IcsymZmZTJ8+vckSnc7CJWP4\n/NGeRf+Hkhdr7rxNtQk6H4iLi6OwcDeS9ATR0dNxuU5itd5LWVkZGRkZKIoFq7WO2NgxVFQU4HQe\nJzc3iTFj7mbHDjd2+3LGjFlIREQa27cvxmodRXFxJUOGpFFffxM5OR8C24mLqyE5OZba2n8RHS0y\nevRQbr314YDhLdUTd7vdzJp1BTU1NYiiSFDQAEJCQnxtaPwRFhbGzJmDWbduG7W1HgYPjuGyy7LQ\n6/XnLMhNdWBvLFbc1VqK7YHRaCQoyIvNVk1wcCR6vYbU1BAmTRrTqUX7jRf8iIhwZPmwL4dWV3eK\n7t2/HzpT527Xrr3s3l1NSUkZijIGs9lBbe0GioqCqKhwEhxcQ3T0Ho4dSwFS8XgK0GrzKC4upnv3\n7h0e748BXSl+7Y+wsDAkSWLevHkMHTo04DGBMG3aNKDBuUhLS6O8vByAb775hr///e8ATJ48mblz\n5wKwfv16pk+fTlBQQyPmqVOnsnr1am677bbOubEm8JPhawGqsskPKS92IdYHmkwmoqOjKSuLxmLZ\njqJYiIkZid1uJzg4mKuuGk5u7mdYLEuRpFIEwUZExEiGDWvooL5x4wbCwuowmczExydTWXkYj2cg\nHo+TsDALf/nLL0hPT8doNOLxeNBqtRgMhibvM1CYNzq6wcNRlU2aQmJiYsCcXqCi45bEigEfyamr\nCsDbClEUmTJlCCtXbsdqNaPROJg4MZXg4OAuvW5mZiajRx9g166XEcVITKYT3Hff/IDHyrLMZ5/t\npE+fn1NdvYYtW5bjdmcjy30wGKYRFBSGLCeSl/cKBoOWkJAhGAynSEy8ieXL1zF37qxzPPMfUv3k\nx2hQVTQmt/jn+NpyTw6Hg2XLlrFixQoASkpK6Natm+/voaGhVFVVUVpaeo53FxMTQ1lZWUduoVW4\nZAxfIHJLc2iPvFhX7vgvtPpAjUZD9+6xVFQcxO3ehqI4KCoq5M0387nyyiuZNGkcixZtRZbHERd3\nLfn5u5GkHEpLdxMfP4LoaDMu1w6qq3sQHd2dyMhlGAy5lJWFMmNGBgMHDiQsLAxBEJqVTVJ1EdsS\n5u0ImqqxUg2hy+X6wQrAm0O3bt2YM2ciNpuNoKCgLhFqbwytVsv/+3/3kZubi9PppGfP65pkCTZI\neCnk5BSybVsVgvAoirIAQZiBJI3FYrEhSdmIYjx6fTA9eyaTlDQdq/UEgnAYo9F4DqXf6XQ265lD\n13c66Ap0pcfX+LxN9eK76qqrOHPmzPd+X7FiBfHx8SiKwvz587nzzjvp0+e7NlaNmadqSVVTv3cl\nLhnDB+cSOpp66RvLizVQnluvwtBVH5OaW9RoNJ1aH9geeL1eSkpKqKoqpLJyI3A9EIkoOlm37iT/\n+c8i7rjjdvr1i+fw4UQEIY/u3Q2Ul4ezefNn9Omzn0mT4rjiikzWr98GwPz5C0hNTUUURXQ6HTU1\nNQE/xrq6OvR6PVarlaKiIrRaLb169Wp2E9BZLN7moC6qLpfLF7ZpTQF4Y1ZjV0Kv1xMZGQk0tGg6\nHxBFkQEDBrR4nE6nIz5ey6ZNG1EUAVEsBPTATiQpBkHQIgiHCAsLQaNxUFBQQ2RkGW73V4wfP6NN\n6ifqvKvHdPa7cb7CkZ197sZjttlsAUPha9asafY8999/P5GRkTzxxBO+3+Pi4qioqPBFYWpra+nW\nrRtxcXHk5OT4jquoqGDw4MEdvZ0WcUkZPhWBDNSFED5sDDVn5fV6EYS2tQlqCe0Zq78X/MEH/+X0\n6W4IQgKKogFqkOVf4/Ec4sknX+fqq6eSmTkAQQglJGQQmzcfQa8vx2yux+U6zMiRcxg4cCADBw5s\n1bUPHjzIXXc9yPHjxwCF9PTLuOyyB9Bqaxk3roqpUyeelzlo6/nb0uT0QgnV/VC4/PLhbNy4lsrK\nbVitqxHFECTJjCD8BwhHry8nM/NeBEEgL++fpKRkce210wK+Q0155v6bEbUcyeVyXbBC0YFwvoyq\nWgTfWkiSxPz58wkNDfXl81RMmjSJjz/+mKeffpqvv/6aQYMGodFomDhxIq+88gpPPfUUkiSxatUq\nfvWrX3X4flrCJWX4/Hf+KvvyQgof+sOfParVas9hwXUG2jLWQCSaAwdOYrUKKEoc8DXwDWBCFHsj\nSafYvHkzN998NadPf8ju3euw22XS0rozcuRvsVgK2LhxHaNGNa2z6D++devWcf318/B4rgbWAbUc\nPnwj6elnGDZsFlu3LmXw4FLi4+M7Oi1dDn9KeVPqG43rqzqqhnK+0BFPJycnl8OHT6HT1RIfn4ko\nDsBiOYFWe4To6BAk6RCxsb3Q64NwuXL49a9nM3v2dW2+jv9mRA2Pq+tBU/PfVimwxpqXnYXzyRZt\nzzpWWFjIf/7zH/r16+fz8keNGsWHH37oK1Po168f0dHRfPTRRwCkpqby8MMPM3z4cBRF4ZFHHqFH\njx6dc0PN4JIyfCr867j8pbw6Gj7sDMMXqE2QKip9vtHUpqCqqooDBw4iSf2BAqAWOAlE0RDl82C3\n24mKiuKpp37Ohx/+Hxs2hDNgwI0IgoiiSGg0rV8Y7rvv/+HxRAO/Acw09Pq7jRMndjNixC1oNBHt\n7nx+IaC5+iqv1/u9UF0gz/BCNYatwd69+/noo8MEBY0kKMhCZeUekpKuYsiQfgwYEMvWrU8jinGc\nOhXE8eOv0K1bBbfd9kinXb+5+fdn9HZWT70LEU0Z1bbcV0pKSkDmNDQ0Jv7kk08C/u2ee+7hnns6\nLhXXFlxyhk9dTDweD0Cnyov5X6OtH0LjWjx/Mk1X1Ac2Z6T9FWkC5RSPHDlCaOg4amoO4PX2QVEu\nA55EEK7H46nE6dzNV18JTJo0ibi4OK6/fhpHjiyitHQnGo0Rp3M9U6ZM8l3r3XffY8mSlcTEhPHS\nS0+TlJSEIAhIkoTT6aSqqhRRzEKWtwPpgIAobiYycigWSylabSkxMa3zHn8sUI2ZVqv1vRP+/X9j\nNwAAIABJREFUeasfsotCZ+Prr/cTE3M9ZnMM4eE9OHnyNAMHhtO7dzqVlQXU1Djo1u1nGAyhREQ8\nisPxPH/96zqSkxM7lA9q7jsNxOiF70uBBeqpJ8tyl+Tgz6ciTEdqI38MuKQMn9vtxmaz+V7ollQI\n2gr/Wq7WvqAdIdN0BE0ZA9XgNZdTNJlMCEINWm0K4eHPoChgs72GRvMRqakjGDHic6qrD/DZZ6tZ\nsOBO4uLi+N3v5rBx4y7cbokxY6bSt29fAH7zm0d56621KMrDCEIuK1ZcRnb2VoxGI2VlZeTk5NCn\nTxrHjqXicr0ErAJOEx1dR69eWWi133DnneM7/VleiGhqMVY3Kg6Hw9dTzn8xPh/d1zuCmhoLJSV5\naLVn6N69G/369cdmW0xBwT4OHfoGi6WeysoSwsNT0WhC0GiikKR+ZGfnnhcihD9akgJTPUSXy4Xb\n7e5U8YPzuXmzWq1dXu7yQ+KSMnzqYi6KInV1dV12jda8oG3JLZ4Pj6UtcmdDhw4lNraao0cLgJ1o\nNBAVNRmv18bAgfMJCuqG0RiLxXLM938SEhKYM2fG98719tv/h6JsRBD6A+B0FvPEE0+wYMECbr75\nHurrk/B4rBgMyxAEG7COe++dx7PPPtOubvHnE06nk127DlNSUkdERBCjR6d1SZf36upq1qw5gN2u\nwWDwcOWVg4iNjQ3Yfd1/8ZUk6QcncZSWllJaWsnJk3sIChrLsWNrGDashIUL5/Pee4uw2bohCEE4\nnUcpKztNdPRwgoMlNJpKIiLarzXamd9T47ytugHxzx12VsPf8+XxWa3WLnlXLxRcUobPYDD4WHRd\nZUhaMlKK8v02QS2FRbrC8KnnbI/cWUFBAVVVOmJirqGubhcwEIdjFWFhxzAYwqmvr6SubmWz5BVF\nUdizZx+S5AFC/X4PxWYr5be/fZaqqgfRahegKB5EcTZPPjmae+65p83enXqvjTcWXb2h2LBhDyUl\ncURFDaa8/Axff72H668f16kkJUmSWL36ABrNMBISonA4LKxevYObb47AYDAE7L7uHyZtisTRHs+k\nPaSOvXuziY6eSXS0QHl5Dh6PndTUaJKTk9m2LRet9kaczmUIgozHswGr9RMSE6eQng6XX97xvFBX\nGZLm8oZNhapb8s67OtTp/+wu5s4MABdvELcZqAteVxabB/rN5XJhsVjweDyEhIQQHBzcqlxAVy3Q\nHo8Hq9WKKIqEh4djNBpb9WGdOHECQRjGwIF/oHfvEcTHlxMSspXHHpuForyO1/sq99yTxsSJlzV5\njq+//oZ33z1KcHAccBeKsgVFeR9BWMKNN95Ifn4Ronjl2aMFbLZannjieZKT+3PbbfficrnOOZ//\n/LRmrtavX88ddyzgjjt+xrZt21o8vq2or6+nuNhDfHxf9Hoj0dFJ1NWFYLFYOvU6DocDh0NHSEiD\nhJvJFIbHExywTk9djNWctslkwmw2ExQUhFar9ZXPOBwO7HY79fX1voL8rtgsut1uNm3ayc6dJ8jO\nhtDQoaSlXU5YWENrIJ1O5PTpxej1fyEs7DnM5lcJC0vkwQcH8tJLj2IwGDp1PJ2F5ogianmFXq8n\nKCgIs9mM2Wz2qRKpIgh2ux2Hw4HT6cTtduP1es9rqPNi7swAl5jH508W6cprNF6EA3Vy6Mg5OwI1\nxKq2UmpP+Ua3bt2Q5VycThtOZwZOpw6328OXX+6ib98kfvGL25vt7ybLMitWHCAu7n7mzh3Hv/89\nk7q6mxBFmV/+cj6zZs3i//7vCzZu/DeK8jRu95+RZRmt9jSCYGD16jt5/vlXeOqpxyksLOTttz+j\nstJO797RREdHUlJST0iInhkzRgdsVrp27Vpuu20B9fXPABLr19/OZ599RFZWVluns0lotVoEwYvX\n60ar1Z/d6dd3OunBaDSi07lwOm0YjcG43fWIoh2TydSq/x8ob9ia4u/OINFs2LCNurq+hIRYABOH\nDh3D4TjE7bdfh8fjYcyYPuzY8Q2yLKHR5GMyScTHD6VHjx6+XGZ7cSHJijXlHQYqsQB8324gNZr2\nIlCo82L2+C4pw+ePrlLz8D9fW/JmLZ2zo4avMVNTla1qT0grIyODa67pzWuvTcfl6oEsZ6PVuqmp\nGcOxYz34/e9f5803/xBQakxRFBwOBydPHuHbb3+DTmfgllvexeHI5qGH0n1khVde+SO33no/+fkD\nkKRaRPFv6HQNH6LHcz+bNv0Fq9XKwoVvU109FZMphW3bVhAXd4j4+ES++up5/vAHO3fcMZsnn3z0\nnPl79dX3qK//M9AghFtfD3/72/udavh0Oh2jRnVny5btaDTxSFIV6elmIiI6t9GpTqdj0qQ01q7d\nRm1tCGBj4sRePvWY9qA1xd+BGI1q2LS139WpU5UkJo4nMRHy8w9QU1PI2LHRpKam8tZbizh1qjfh\n4Tupq/svERFXEhJSjdO5F5drPDab7YIlX3TGuhLIGKoybBqNptM3JI3H/JPHd5Giq8KHKg2/rq4O\nSZIwGo1drh/ZEgI1plXDJ+2BIAiUlxfjdNYAwUACipLBwYP/ZNaszZSVbaa4uJhevb4jH/gb3rVr\n17Fz5wFcrt8BTo4fn8stt8ygb98bfcd369aNjRu/pLy8nBde+AuffroLmH32+jvo0SOeAwcOUFGR\nTErKeEDh9OnxnDjxB7Zt+x8ezxIghI8+uoeQkNf54x8f83VucLmcgL/XrcfrDVx/1NZ5Ue9VEAQG\nDuxHdHQ4tbUWzOb4Tu/qrj7DhIR4Zs+OwG5v8PRa6+21Fc0p0agkGrVUqDWybBqNi5ycnSQmjmTg\nwCkUFa1l0CAzeXl5HDyokJJyK9HRE1mz5ikKC9+hqioYrTae++9/kyFDEnn22QdIOdvT7UJBVysB\nqc+guQ1Je6TxGo/barWSlJTUZffyQ+OSMnz+D11lXHVm6Mk/Yd24Fq8jaK+RDlQM31F1BoCTJ0+y\ncuVx4F202iw8nm3I8hu4XAouVy2SVHuOx+GvQmM2m3n11XdxOpNQlM/Qaq9CUR5ElnPO+T/qR96j\nRw+effb3bN58DWfOTEcQdISEnODZZ7+goKAAqEeWvYiiFo1GwmLJx+P5DYIwFFBwu59n+fJfs3Dh\nrzh9+jRz5tzL6dPHgP2AAHgJCnqc++57vcWdusViobS0DI1GpHv37s2KZ6uIjY3tkn53hw7lsGtX\nEbKsJT5ew6RJmVitdWzceARFgSFDkujdu3M6rDcHf89EkiR0Oh0ajeacMF2g3oaHDh3h0KF6ysuL\nOXkyj7CwOmbO7EVm5jhOnTqFKDa02AoJSSQpaSS1tb3R66diMg2mvv5jCgtLeO21Rbz22uPtGvf5\nVEHpLDRFHmpuQ9JUw99AJJrGHl9r5QR/jLikDJ8/VCmozoC/zqcoimf7n7U/1NQYbTV8jTsWBDLA\nHfkwCwsLMRoHoSjv4/G8DMSgKIdRFDtbt97KbbeNJT4+3scYVVs66fV6cnJyOHz4OB7PcwhCErL8\nAnp9PDpdZJPXi46OZvv2tSxZsoQdO3bQq9ccFEVh0KBBpKauo6DgP+j1PdDpNhEVpcHhOAkoCAIo\nyknCwkLRarXMn/8L8vNvQZYXAm8gig+QltaXxx57lXHjxmG325tkOFZVVbFs2R7c7hRk2UVExLdc\neeUQtFptl4ggNIeysjK2bTtDXNwVaLU6ysqO8dVXGzhzxkxU1HBAYN26A2i1Wrp3T2LPnkNkZ5eh\n02nIyupDSkqDJFRpaakvZNiZcm+tUUL5/PMdxMbOJjHRhMVSSFXVFkaPHoBWqyUxMZHQ0K8pL99L\nUFAcR458jN2uw2Y7jE73CBpNHwTBQlHRyU4b88WGxiUW0LwaDTRsUMvKyrDZbB1idS5ZsoS7774b\nq9UKXHjd1+ESM3yNPb7OyJs1rsVzuVxdyhZtzmC1RWi7I/efmJhIbe1mNJr7kKTrgMXARvT6B3G7\ng1i69FOuueYqevbs+b0GuUuXfoFW+wBe7xQUJRRZfhqP5ybmzfu02fEVFxfzxBN/wuGYhqKU8Ne/\nXsWGDV/yzDP3snjxSmpq9jFkyBBSU6/h6qtvxG6vRpbDCApaxFNPfYBGoyE7ezeKsunsWGah1a5g\n0qR+TJ8+/Rymb6DGs9u2HcLrHUBsbDKCILB79xmOHv2CxMS+hIW5uPrqzPOWE7FYrGg08Wi1DQta\nZGR3DhzYSK9e0zGZGsbgdvfl1KlT1NTUsXu3TELCFDweJ6tW7eCGG4I4fjyf/fudaDRxSNIxsrLO\nMGxYepeN2T9v2DDH4HbXsn37UpxOGUUpprKyu0884ec/v56lS9fz2WdfUFOTjCzPRVHOUFz8MJGR\no4EI+vdvf+i4qzy+86mu0lY0RWRSRTQAdu7cyXPPPUdJSQkbN25kzJgxDBkyhKysrFaJBRw/fpy/\n/OUv5/x2oXVfh0vM8PmjIwu/fy2eVqs9pxZPDaF2JlpShGlcG9gapmZH7j8mJobQ0Ag8nuF4PGtx\nu1eiKAvxesditWoRBD2LF3/BSy/94Xvj0Go16HQyRmMoDkc9slxHjx7dGTFiRMBrybLMSy+9yp/+\n9Cb19V7gQ0Chvl7LxIkzOHBgE7/+9V2+efB4PGzcuJLPPvsMRYEZM1aRmJiI2+0mPDyOmpqtKIqA\noszG7U7lH//4jJKSGt5661UA3y5Z9fhUY+jxCBgMJiRJoqamhlOnvKSnZxATM4KammI2bNjHdddN\naNd8thUmUxBeb6kvj2O1VhIdbcTj+U6v1ONxYjBoOXWqiujoTLRaHVqtDp2uJ3l5BezeXUFy8rVo\nNFokqR/bt39Nv36pmM3mLhu3LMssWvQJK1Zspbr6DFVVh4iNfQKDIRi7fTVbtx7niiuuQFEUjEYj\n99xzIy+//B4azV8RxXi8XheSlI3X+wkDB17HQw8t6LKxXojoKjKe+o0aDAZmzZrFrFmzuP3227nr\nrrsoKipiz549rWoX5HQ6mT9/Pu+//z6Zmd/V8F5o3dfhEjR8/gakrQu/f52TKnnWOMR1PlRW/Mfj\nz9Q8XyG3oKAgoqJMeDwfU1NTh6J4AD2CEI3Xq6O62oUsE9D4zp59I++8MxubLZSgoG5otX/h8cd/\n/r3j1Hl86613ee21tdTXLwO2Aq/R0KEhmqqqx7jvvof53//+dU4+MyUlhUceecRntLxeL16vlzfe\neJm7755Ffb0MvA9Mx+12snJlFuvWrWPy5Mm+HTA0FIerosT9+sWxbl0ORuMwbLZqBKGc+PgMAEJD\nu1FcvBu73Q40kE5aUuXIy8tn1648vF6ZQYPiSU8f0OpFLSkpiYyMSg4f3oAoBhEaamfy5CtYv/4I\nRUVOBEEkKKiQQYNGUFd3hIqKOkymBpEAj8eCVisCBjSahndFo9EiCEaffm170dLC/PbbH/D66zvR\n6x/Ebi/Aan2BmJiDREQkM3r0NGprF+FwOHzqSmVlZXi9IqIIOl0YiqJQX+/i6qvH8uKLv0EQBN+3\neL57GzaFC6lMorUINGa73c7kyZPbRJT6xS9+wYIFC+jfv/85v19o3dfhEjR8KtpqoPyZkc2VJnQl\nW9T/vIGYmh05X1tgMBi47rqRvPjiDhTlVWA1sAiPJwi9Phqv9w2uv/67cEdFRQXZ2dlERkaSnp7O\nqlWLef3197Fas5k9+zGmTp3S5LX++99VeL2PIwh9UZSvgHlAPCAiCL9k584p2O32cwhF8J3REgQB\nnU6HKIpMmjSJtWuXMXbsZQjCVARBBEx4vVmcPHnyHG3Fxo1Ke/fuidvt5vDhbzGb6+jXTyQkJAqN\nRoPFUkpyciQmk8n3TJoSkNZoNJSXl7N69Wmio0eh1+vYtu0AWu1x0tL6BpwDRVE4ffo0dns9ERFh\nxMfHM2bMMAYMqEWSJEJDQ9HpdMyYEUpxcTEA8fGjCA4OJjOzH8uX76W4+AyK4iIxsY60tEyys9dT\nWZlHREQiNTXFREZ6mlXEqaqqYteuo7jdEv37J9C3b58mj20KixevwmR6Hb2+JzrdcKzWXCIiihk9\nejoORzUGg+econRRFElIiKSw8HHgThSlAI1mLbfc8jQhISHNEjha6m14sRiorjqv0+kMSN5qqvv6\nwoULAbj11lsDrisXUvd1uAQNn7/H15qQZEvMyKbO39nwlxhzOBytHk9XjTMjYyDJyRJer0Jx8QgE\nIQG3+/fo9f3p3j2Eyy5rUG3ZvXs3d975GyRpEJKUz7XXDuXVV5/htdeeb9V1IiJCkeVCRHE0khQL\nLANkQEEU9xAT07CTVPNrOTk51NRYiIqKoFevXr48rMfTsKhmZGTQt+8Qjh9/G/g5ilKERrOKESPe\nxmAw+BZQNVfrH/ocPHgQGRkNTLcDB46wffsaFMVARISbrKxM3/uk9k+EwLVvJ04UIAjJaLUNveDC\nwnpz6tSRgIZPURS2bdvPqVNBaLWRSFIeWVkWBg3q/z3ygclkok+fcw1SVFQUN900hsrKSjSaEKKj\nG3bjU6aMYNeuXMrLDxEXF8yECaOaZDjX1tayePFmZHkIen0QR48e4NprJdLS+gc8vik0sD0bFHd0\nOi1BQRJW606KihKAIubNm4BGo2Hdum9Ytmwzer2WceP6sXlzKVVVLyMITm6+eQITJ04E2tfbsPGm\nprPxYzWogRDoPprqvv7yyy+zfv16Xx8+h8NBWloaBw4cuOC6r8MlaPhUtLTwN9cmqCPn7QhUhqTR\naOy0Uom2fqgN4aZ6kpKSMJkWYTbfgijGUFi4kuDgYHr2tPP226/5jn3ooT/gcj2PyTQRWXbyxRdz\nuPba9VxxxRXNXkedxyef/DU7dsxBUY4hSdXAdmAcGk0SwcEHeOutjzCZGnJvX375DXv2SGi1iUhS\nLuPHlzF8eAY6nY7g4GBf6PWjj97i+utvo7b2JSTJyu9+9xhjx44F8NU4ejwejEbjOcXC/qHPgQP7\n0adPT5/8nCAIvt2qaujU+1Dp5ur1IyJCUZSGfJwsy9hsFkJCvL6wnb+3UltbS26ui549xyMIAl5v\nD3buXEf//r1bDGtbrVbsdjvBwcGkpKSwY8c+vvzyMLIs0KOHnquvntCq0Hh+fgFOZ2+SknqdnSMj\nu3dvabPhu//+m3j22Udxue5GlksIC1tDQsJIamq2MGFCOn379mHt2m945pkVyPLNVFYex+X6B2PH\npjJixI0MH57GuHHNiww0xyj1r3NT+8apKig/ht6GXWlUO1rm9Mgjj/DII9/1SAwJCSE7Oxu48Lqv\nwyVo+PxrVgI94EDdxtvysnW24VMNjaqy0pEO8f5o6wfUmEAzaNAgXn55AU899ThBQQ6mTYvj5psf\nZuTIkWzbto2XX36dqiqZnJzjREcPP3sOHS5Xwy6wJcOnYvDgwWzYsIxly77AZhMIC/stVVVVDBgw\ngAkT/uIrm6isrGTfPis9etyALCs4nSls2PA/Ro4c6kuel5SUMGvWfI4c2YvRaOappxZyxx23nxPi\nKywsYvnyPXg8ZnQ6O9ddN4KkpO/Yg/6hNTWE6nQ6AXylLGqeyX/BBXyLbc+eyeTm7qC8XAK0mEwl\njBkz1Odx+hchN7TRMiBJaghPhyxr8Hq9zRqt48dPsm7dKQQhAqihb18DBw9q6d59+tm/7yQ29jAj\nRw5p8RmIokCDl/3dHDT81jbcfPNNREaGs3r1FiTJicVyNcnJ96LTmdixYwUxMZtZtuxbZHkOxcUy\nNtthJOlu1q0rxenMYfbs6e169wMp0aieoFar7dTehl0ZjuwqNDXmjjJIVVxo3dfhEjR8KhqHOlUD\n43K5WmwT1NJ5O+MlbWxodDoder2+U4yeiuaYov7jUAvQGwqKvyPQXHbZONasGYskSWi1WsrKynjw\nwd+zdauA09kTvX4bJlMKlZUfEhFxFxUVucBX/PnPCoJg5Fe/apqV5/98evXqxYIFP/Pl8dQ8kOpZ\nCYJwtuzAiMfjRVFkjEYzOp35nGd8yy33kp09CVhPfX02Tz01nXHjxpKR0UBScblcLF++F5PpCszm\ncOz2Gj755EtmzhxNVFSU751wu91YrVZ0Op0vrKmG2tRwpiqOoP7zZ+YajUamTh1FaWkDMzMmZpjP\n+Pp7huoiHBJyhMrKfMzmKKqr8+neveF5+eck/Z9hfX0969efJDr6CvR6Iy6Xg6+/fo8ePa5GFDUo\nikxYWA9KS78LMzWHnj1TCA7+hpISPWVleZw8uYfBg7tx6FA26elp57wrLS2WV111JVdddSUrV65j\n7dpumEyRyLJEQcFpHn74S7xeD06nHqezBre7N9ALjyeZ4uIqli1bxwMP3NmqMbcGTRV+N6eC8kP3\nNjwfOT63293hDiJqDR9ceN3X4RI2fP5U9ba2CWoO/jv99rykTTFHA6ntdzVaozXqv3isW7eOQ4ci\ncDh+jizH4fXuIyTkBTSaDygt/SuCAGFhdxAc/BB///v1TJky0ZcTCAR1M+JfJ6kaRP9QoqoIExJS\nTWVlLlFRKZSVZdOjh95HdpFlmQMHdiAIXyMIIoIwCEWZzs6dO32Gz2634/EEYzCYyc7eTm7uYU6f\nPoLFYiYmRsvUqf0JDjaxbNkeHA4zklTL5Ml9yMgYGJA84S/jpS6mqiE0GAykpqY26xmqxJwpU4Zz\n8GAeNTX5ZGQEM2zYKF8INhChw263I8sm9PoGcoLBYMJgCMZmKwV6A2CzVdK3b+tEFkJCQpgzZyLL\nlq0iO9tJVtZ8wsLCWL58IyaTkV69Ult1Hn+EhprweCoB2Lt3Efv35xMW9nfMZg/l5fchy0bgFkQx\nDSijsrKY+vqOsU790ZyX05IKimoMA5Fofoz1gY1xset0wiVo+PxfHlmWsVgsnVoK0JGXs7G0l/+u\nqytyh82Fe/2VX1qjNVpbW8u77/4fhYUjkGUJQdAAvampqUanSweMKMo92GxfERxchkYziMLCwoCG\nTzUa6s4zNDTUJ4LsbxSAs9qbLnQ6HXPnTmPdup2Ulx8lPT2cK6+c5DuuIUwcjcWyF0EYhaJ40GgO\nEBd3ue+6ZrMZjaaOffvWUVISRmFhb0SxL2VlVaSkjGHVqm8RRTda7TgSE7uhKDKbNq2jR4+k7xFN\n1AU0kKai+k/1DNVF0997U4/1eDwEBwczceJwnweoeo9NEToaOkNUU1lZTFhYDDZbFcnJEcTGusjP\nXwdoiIqyMHz45TRGVVUV+/fvx2QyMXLkSN8mMCwsDJMpmmHDMggLa1B5MZkGcepUQbsM3/DhQ/n0\n0+d47723qKgoQqt9lm7d+mA0GikvH0NtbR2i+AUaTTRQj9u9kvHjf93m63QG2kKiUY/3J9NcyHlD\nCNyZ4SfDd5HBv/YN2lcK0BJaE0L0R2uYmufD8Pkr0bSk/NIYL7zwJlVVWSjKUuAmFKUQQXgfWZbw\neCQgHXgbr/ckRUVL0GgsLFx4GBCYPPkqAI4dO8Y///kv6uoczJw5mbFjxxIcHOwzeOqcCoKAx+Px\nqdU3GKyGjhM33dR0acQ//vEqd911E3AVXu9BkpKCSEjojsfjQafTYTAYmDYtg9/+dhFa7TQUpY6B\nA8fidh/C4bBSVyehKF7690+gpqYEl6sep1OH3W5vlbxTW4yh+mxU79A/QhHIM1QXZ/U+Zs4czcqV\neygvh+BghcmTBxMeHk56ejWCIBAaGoperz/nPc3NzWXmzLtwuwcgyxUMHRrJ4sXv+FoABQfrKSiw\nEhYWj8fjYdeubRw4sI+TJ/OYPXtam/rj5efns2PHKUymRzEa/019vYXKymq6d08gOFiLTiei1w/B\nZnsfjcbKoEHac4qiOwp1E9FeNEWiUdnAauSmcdf19rYS6mpFmMZNaH8yfBcZVKNnNBqx2+1dUvDd\nWiPVmEjTHFOzK9mi6mbA4XC0O9y7d+8xunf/K6dPL8XjeQxFsRAU1BOXS0QQxiII/0OSrgWcQE80\nml9SV+diwYJf8vnncej1eqZOnYPdfi+CEMbKlU/x978/ytChQ3E6ncTHx2M2m5EkCafTiSzLGI3G\ns95N6xaEadOm8dln4bz++hIiI39OcvJonntuOcnJ35Censp1142lZ88Uxo3rhyjGc/AgaDQyHk8d\ntbUKcXE69HoDmzcvpahIQZZDcLu3MHVqtzZ3XlAUBavV6jNC6nuohpdVIob6bFRyk3/OsDljGBkZ\nyW23XeXLi/qHhFUih//mQRRFfv3rP2K1PoLBcDsgsXv3HXz88cfceWdDXm3UqEGcPLmewsJatm7d\nxZkzFQwadC9bthRz8uR7/O53d7eoUetyudi7dy/Ll3+JwzEGRdmHTqfH4fgbpaVHMRjC6dmzlAED\nerJ79y7i47thNJby6qtPtGl+fwj4e3rqZsH/+TTWx2wLieZ8hzov5l58cAkaPnX3LAgNqg9dJQPU\nnJHy96xaS6Rpbd1hW8fp8Xh84swdCffGxkZQXHyc1NSfcfr0diTpdkJDixDFw5w5sxiPJxZBuBtF\n+Q/wBbIso9PF4XDMZOPGjeTlFWO3343Z/EsAXK4Efv/7PzJ+/B1oNKGEhKxl/vwpREZGYjQaO1C/\nqGfo0AXExvZhw4YDGI0zcLuP4nCks3TpFubPn87kyRl89dUBYmLM7NnzJqGh5URFjWTmzCsoKytj\n6dIVmEzXIooKaWl38tVX35Ke3nqdS5fLxddfb6WwUAFkBgwwM358pq/NkNoRvTHF3L/9j/qvJWOo\n0+nwer2cOHGK3NwSjEYtQ4f2JSQkhKCgoHOOLSoqQaMZe/bdFXG7R5OXV4jX60UURcLDw5k7dzJH\njx5l69YcRo9+BZ3OTETEAIqLc8jJyaFfv36Eh4f7CqD9N1A2m417713IiRMmLBaJiop30evnI4pz\nkOUydLpl9O07hl/+8gGGDx9OdnY2FouFXr1uIS4urs3P+odAY+/J3xg2Pq653obnk0TTeA38yeO7\nCOEfYugqL6qp83aESNPZY/VfPNVwb0c+sMceu5cHH3wJszmd+HgLZvO/mDnzSubM+R9ziQTlAAAg\nAElEQVSzZs3lyJFioBoIRhQLUZSGDu2CkIfZPIQGJRYz0HCPsmzEalXo0WMusqxQXn6UpUs3cM89\nN/h2zY3zYq2BVqtBlp3U1zspKcmhuvowYWF2hg0bR3W1HqvVSmpqCpMmOViyZANDh/YmLGw8oliG\nVqtFp9ORnp5JTExvXwuegoINLZYX+GPPniMUFsaSmJiOLMvs37+F0NCDDBqU5qsJbIymQmutMYbH\nj59kxYpCQkIycLvryc3dyqxZo3whfnWB7du3B+vW3YSiaNFq+2IynWLw4AfO8VI0Gg29evUiODjs\nbB5XQVGgrOwYH31kJyjoOJs2fYbNVo3RqOOpp37FjBnXAvDJJ/8jO7sXkZGPAjbKy/+Fx3MSjaYS\nRRmIy5XFzp1h3HXXa7z55v2MHz/eZxA6Gz90oXlzJJrGJS3+RlN9vp059kCG7yeP7yKD/wM+X4av\nKabmDwH/8KogCL6cYkeRlpbG++8/RU5ODjt3OigqqsHtbqiP+uabL5kx4w5yc19EUcZQW3snBsPN\nOBwVxMZmEx9/NaIootP9HaczHlEMQ1Eeo3//CWfr1yAmpidW6xZCQkLOWRicTqdvQW4sMB1ocRgw\noA979qxhw4aVbN36AYpyF1ptBadOTWXevHt9up51dW5iY6cTH99AvikvP86ePdkMHdofjWYnkmTH\naIyitPQgKSlhbXqeFRV1hIam+pq26vWx1NdXt6q/nz9aawy3bz9GSMhogoMjURSFkhIr5eWVxMXF\n+Ty+2tpacnJOAfcgy6PxeD7FZNrP9OnTfQZSDddpNBquuqo/X331TwyG4dTUbEFRQujb934+/ng5\nJSW3otcH43D04oEH7qe09Az33HMHGzfupLp6Anb7GUTRi16fjla7B53uEA7H9UAekZEzqK2N4Zln\n3mHZshE/2HfSXnTEoDb3PNV8oX9vw0Ch0vaO2R9Wq7VT21RdiPhxvVWdjPNh+NScjaIozWp8tuWc\n7UGg8KqqK9lZMJlMvPPOp3z7bS0wC0GoZd2653n33UdZseJjPvzwI3Jy8omImIUkuVm0aAPFxanc\ncMPjBAXJmExeUlL+SlCQmUmTrqKgIBJFcWMwBFNYuJuhQ2N9H7g/IanxLrk5YxgcHMwdd0zmhRf+\ngCB8iiAMR1FEqqtn4/WeIiIiAq1Wi9MpodebfXOu15txODxERERw++1jWLLkc6qqJFJSwpg9+6o2\nzVNMjJm8vFPExQ06W0B9hpiYiO8dZ7PZ2LHjEGfOOEhKCiMzM6PFTUqgxdNkCsLl+i6vBLIv8qAe\nm52djdudSkzMz896d0Nxu1dTUlJCQkKCbz7V+Z8792b69t3B8eN5WCxaSkuno9HoKC4uQ6e7F4fj\nf4SG3ojbfQ2rVuVhNH5MTU0oGs0WtNobcbnqUZRPMJkUFMWKLB8gIiIdQdCi1+txu4OprGwwzj+m\n8oCuIKCppSuCIGAwGHyblUDts9pLomnM6vzJ47vI0Njj6+y8mXpeSZKw2Wx4PB5MJlO7c1L+52zP\nR+XPYtVoNN9rodSZH+q3337Lvn0ejMaFGAyX4fHUcPq0gc8/X8eDD87l5ptvwmAwEBQUxIwZc/F4\nnsBiuQxBiMbpvBeDYShVVYvZsOFdwsPD2bVrH8uWfYAsa+ndO4SsrFF88MEHCILAlClTfLvS9hhD\nj8eJTtcTUHUbexEdHeU7R+/e8axevYGtW5PweiE4+Djjxo09+7dePPpoqq9wv7VQQ919+/agvHw/\nJSXfIggy6ekh9O3b+5xjPR4Py5ZtxmrtS0hIN/bsycNi2ca0aa1vfaReb9CgBFas2I2iDEaSXERF\nFZOePgGz2eybJ71ejyRVIghuBEGHoliQZQchISHnaFv6fy+ZmcMZPXokJ06c4MMPj6Eo6ZjNJiyW\nHWfLECQgm4iIaezalU2PHrMQxV0cODADWZbp39/I1KnjOHQohy1bDmE0JmOzfY1Wu4mICBOhoaGt\nvtcLCV1tqAPlDf2fj3+YtPGGJZAsW6Byhp8M30UIdcHvzC7sKlT5I7U0oa2SZ02hPUaqNR0cOvP+\nbTYHEAyouaMgrFYXb7zxEZ988iU33DCJRx55EFmWycsrRBBGIgh6BMGEJI3E662kttbGY489T1SU\niSFD0pkzZzT9+/enrKyMadPmYLdPQlEUXnzxLVau/JiePXsGHEtLxvCKK65g1aqH8XieRlFOotMt\nYvDg93xhJINBj9dbh8FQS1CQluDgUCorLb5zBcrRNAVFUXxi51qtlqioKGbOvBKr1eoLfTdGdXU1\n1dXBJCY2iE6bTEM4efKLJlXzG0O9niiKDByYRmRkBMeOFWEwaBk0aILPqKglEKNHjyYrK4XNm+/E\n5RqN1/sOZrOWW25ZwKOP3k9WVpZv0WzcuaJnz55kZRWwZcsnjB1bz6pVf0AQRuDxLKZv32RiY3sS\nFVXBqVOFjB69gMzMuykp2UqvXkcxm/WMHDmc/v3LWLPmLbTaeCIiBBYsmEZERAQul6tVc3ypw98Y\n+r+X/rWGgUg0/ipB6jr1E7nlIkdnejz+oURRFH2eTWehLWNtbQeHzt6ZDhqURnj4ckpLP0BRBOz2\nk3g8/yUl5QVCQ0fyySdPU1KykPBwMyUlZdTXT0eW04GHgY+xWksBPZ9/fga3uxCdzk54+Dv84Q93\ns337Pqqq5iHL9yKKAl7vu/zpT2/w1luvtHp86kbH5XLx/POPk5f3EMePX4nJFMnkyU+wf38x6ekW\njh49yp13/pyKimLCwnrws5/9k4SEfpw8+Q1nGwO0Gv7lFyaT6ZxFqbnFpaGTgdu3IEmSF0GQW8zj\nyLKM0+n0sUNVw5+YmNhsyYUoivzrX2/w6aef8t57izl6NB1B+D379x/n1lt/zZtvPsm1117r61yh\njlEURSRJ4vLLxzBqVENI/+GHL+fNNz+iri6Dbt36EhFxkHnzZrFs2Tfs3/8BohiEIBxi6dJcPJ5r\niIgYgKLks2DBFFJSkomNjSU5OfmcAv/Oxo9NYaW9dYeBcn/+nqHqwTscDj7++GN27txJTU0Nubm5\nxMXFNduqyh+SJPHkk0+yZMmSs9J/y0lPT6e+vp758+ezd+9eoqOjWbRoESkpKQC8//77vPJKw/er\n6nmeLwhKVxWHXcBQdz2qSkpbmi02RuMauKCgIF/MvTO7WUuSRF1dXbMhiMZ1gUajsdmPsDPu3x8O\nh4PNm7fw/PNvU1hYjSB40WpvIDn5N8iylyNH5uF0WvB4SoFnEYRUPJ5PgH8AvYAXEIRPgY2I4lbA\nTlSUHUG4loiIMHJyfoUgXAdICMJyJk78L8uXf9SqsfkbBKPRSHV1NR98cJDExKt9xxQXL2XevJFk\nZU2mpuY5FOUGYCVG46948MH/kJpazI03Xvk9/c1AUA2s2+3GYDC0OdStKApff72ZnBw9BkMsTmcB\n48aFkJk5tMnjVRUbvV7fKrWdpjBw4Hhsto+pqTGjKMEoyp8ICfkXX3zxka+IXPUeVJKUOgZ1biRJ\nori4GEVRSExMxGAw4PV6KS0t5ejRo7z00iLy8sZjNN6EwVBNr15aIiLe4b33nj3HQ/F6vQDneCid\n0XDWbrcTFBTU6UbVZrNhMpk6/bxOp/Mc5ZjOgrpmmEwmjh07xrfffsu///1v9Ho9hw8fJjExkYUL\nF7aop/nMM89w+vRp/vGPf/jqTwVB4Omnn8blcvHcc8+xevVq3njjDZYtW0Z+fj5Tp05l3759yLJM\nZmYmGzduPKcxbVfikvT4/JVV2pvjU5magcSbvV5vlyS5mzpne+oC1XN2Vo5TDeeNGDGcFSv+RVBQ\nEG+++Q7vvNOQZ7BYNmO3KxiNN+D1HkaSBiPLFmAu8CmCMBtFeRJBmIUsH0cQglEUB6KYCIRSVlaE\nILyLomQA/0NR3keWW5bK8jcIOp3OVy7QUMNWh9frRqvV43Y7EEUnZWVleDwR6HQ34/VKKMp0JOlF\n6urWcOWVcwF8BeXA9wg00PD8nU4nWq32nHZIbcGmTZt44olnOXOmkmHDMnjmmUdJS0sLeKx/WFNV\nsVGv3x5WpNFooKysGEUZfrbExIosX81bby0iMzPT17JLLYhXr+EfShYEgfj4eN93VlZWRn19Pd26\ndWPbtpMYDOMxGOIwmZJwOKCmpgyz+TuShrrIqxGUBg+47Q1nm0JXljP82DxJdQPXr18/+vX7/+yd\nd3hUZdrGf2fmzEwmmfQOhIRI74QAAiJIEwEVFSs2xA9dV1Rsu7roqmtHXbGwwOq62GBFxIKLoPTe\nEaSZBEJ6m/SZydTz/RHPeDJM+kziGu7r4rpgmDn1fd/7fdr99GL16tVs374dp9PJ6dOnG02ostls\nfPDBBxw/ftw9FuRr3bRpE2+//TYAkydP5o47aufQ5s2bmTZtmtsrNmXKFDZs2MCsWbN8fo/e0CGJ\nT0ZLXZ2NiTf7I1vU2zGVZRKeiSttBWXyjCAIaLVa9Ho9LpeL66+fwbp1j5GXV0xV1TlUqlAMBieV\nlfupHXoCcA4wI0k/AKG4XLuBUzid6xHFgdjtXxAXJ1JaGkJ1dV8cjnHABOBe9u9fydKl/+Kee+6q\nc00ZGRkUFxcTFRXFggUvs2PHToKDQ3nllb9w1VW1NWWhoaFMnJjM999/g0oVC+Rz5ZUDiIwMx27P\nR5KKUKmikKRSVKpcZs++ktjY2DrncblcFBYWcuDASex2J9XV+WRnZxMfH8/MmTPr6Do2Z9E6ffo0\nt9zyB6zWf6BS9WLbtmeYMeMOunVL4oorxnDvvXMJCAg4z60piiJWq5WvvtrE2bMmBMHJZZf1YMiQ\ngc16pwsW/JG7774XSfoDkIdafYiAgPuwWjdQU1NTrxXrLa5qt9tZufIL1q37GZ2uC1ptPlZrFTEx\nM8nOXk5NTSccDqiq+g9XXTWqzmZMjpXL52hqw9mWkmFr4U/nWVvVHSrvQRRF+vXr1+hvsrKycDqd\nXHvttWRmZtK9e3fef/99YmJiyMvLIyYmxv3dkJAQjEYj+fn5day76OhoCgoKfHszDaBDEl9LC9g9\nm9PW507yF/HBrxNAWSbRUr3R1l6nZ/KMvFDJ7qmIiAg++eQttm/fzsaNZSxfvoH8/KNAOHA7tZ0C\nTgJvAceB5ej1pSQmJpGffx+CINGtW3cWLnyep59+nqKidcAYYBmCUI1KdSWvvDKDuXNnu5/PCy+8\nxuLFn2GxRGO3n0AUL0KvP0xFxRn++Mfb6No1AbVaza5duwgJCeHWW0dht9sJC+vh7hB9zTVX8PHH\nqUjSOGAbEycO9yqmXVZWxsqVezCZEtm+/UP27dsM3ERAwFpWr17PihX/dH/X0zJsyE26detWHI5r\nEcUpvwiGP43ZPJaioqns37+VQ4ee4o03/oRWq0Wr1dYpet++/SBnzsTSpcsQ7HYrGzZsJCoqnISE\nhCa/1xkzriYnJ5u//e1NBOFy9Pr5qFSvc9119+FyuRq0Yp1OJ4cPH6aqqoqEhASWLFnFunV56PVd\n6dGjMyEhEzEaX0CS9jB48A38/PPXiOJx5syZzPTpl+N0Ot3JM7IbVRYol48vx7uUliH8mtmoTPNX\nSrL5wkXaFLRnYXxzUR+hevts0qRJlJSUnPe9d999l06dOvH5558TFBTEokWLmDdvnrsVkedmXG7Y\nXN/nbYEOSXwymrrwN7c5rT/rA+XkAl+USbT0OpUbAPkaALcGpMPhcC8yUJvtuWpVOnb7I0hSNrAZ\nCKTW4nsSSAVqF7OxYyexenUtYdhsNjIyMrjxxvsoK+sNFAIBiKIVrTYUQdBgs1ndRdV79uxh0aLV\nmEyfIwidkKQd2Gy3YbP1QxQvQaebwnvvvc833+zF4bgWtfoA3buv5NtvV7pdLhaLhXXrNqLR/AlB\nCAAmsmPHX8nNzT0vOeTkyQzy8vScPZvG7t2fI0kHUas743AIHD48hkOHDjF27Fj3YizHxepzk8pk\nWDvW0pEkK7VKNvuAUYjifbhc09i48Xn27PmRK64Yd97ice5cKVFRKQBoNDrU6kSMxtImEZ/FYuHr\nrzdz8mQBISGRvPrqo3zxxRaczk+58857uPLK6Q1usJxOJw8+uIAtW4pRqzthNu8gOXkmQUE3YjAk\nk5b2L8LDuxIcnMC11yazffs+eveO54YbbqFv377uTZNcpA2/jlHPnobK1lTNJUP5+SvdqL7oovC/\naPF5HrehJJrvv//e6+enTp1Co9G4cxquueYa3n//fQDi4uIoKipybyrLy8uJiYkhLi6OU6d+7QdZ\nVFTEoEGDfHJPTcEF4mtgsLY0dib/1peQa3Kqq6tb1BneF5ATgqxWKzqdzp1oo2yHExwcjMtVWyBt\ntVoRBIEPPvgWk+kegoKuxumspqqqEtgGxABJQAUq1UaCggaj0agoLy8nLCwMrVbLk0++SnX1I+j1\nV1JTcwaL5QoEYQMuV38k6R0mTRqPSqXCbDYzf/4TmEwDgDgkyQwMAoKBjTidq7Fa/8m336pwuT5E\npxuOJEmkp9/Ol19+yZgxY3jllbfIyMjGZHKi1f4BQah916L4GWlpaXWIz+l0UlhYwPbthwgIuArQ\nIAhdcbmcSJIKQUikvLy8Tpq5t8XYkwxzcnJ4441/YrerkKQ5QA/gA0TxFWpJ0IUoGqipOX/HDBAZ\nGUhOTiEBAYZfzlGEwdCpSe/36683c+JEDJ07T8dkKiEjYy1vvfUMarWaQ4dO8eWXG+nduzMGgwG9\nXk9cXBwul4sfftjGrl0/c/bsCX74oQKN5g0EQU1V1RDOnl1DaOgIXC4JQehNbu4eBg0KYfr0KVx5\n5RV1zi+77tVqtXt8e+tpWF8bJ2WdYX2dK+TxKiejKWveALwl0DRnnv0vWXtwPvFVV1c3Oxu9Z8+e\nFBcXc+DAAVJTU1m3bh0XX3wxABMmTGDlypU899xzrF+/nv79+6NWqxk3bhyvvfYazz77LE6nk+++\n+46HHnrIp/fWEDok8ckvWulCUaKhou+mHt+XZRKyygaAwWDwWWZXU6/TM3NV2R9PuTMH3O4lmQR/\n3SjUtqxRqwXgAJAAHAWmASGoVBpqavL58cdejBt3My+/PJ8pUyaTl1eEVpuCRqMjODgRh+N6tNoF\nBAcbmDZtHM899wwmk4nNmzeTk6Ol1nVaDcQCnwCdAAOSNBtJehWXKwy1urv7mu32bqxYsYL58xdg\nt09DFGdjseQDfwBeB3KAvdx++0k+/XQJo0aNwmq1YjQaOXo0/5fYZjwaTTJW61MIwh+x2fYCO8jJ\nGY/FYjlvIWmIDD/9dBVm8x0EBz+EzfYhDsc+HI5y4BR2+25EcS3Dh8eTlBTp9V1ddtlQVq3aSk5O\nFpJkYeDAAJKTk93nqKysRBTF8zKOJUni5MkCOneejiRJaDQhOJ2J5OTk8MMPadjtwzGbrSxa9Am9\neiURHq5n0qRENBo1X35ZTFzczaSnv4HJ1JmoqHBEMYDq6v6Ul7/NwIFBZGRso6ZmPdHRDv7wh/l1\nFtv6SjCAVvc09EaG8phX1ry1pgBceW3+QlvF+FrSi0+lUrFixQruueceqqur6dOnD++99x7wa5lC\nr169iIqK4qOParOwk5OTefjhhxk6tLbP5GOPPUZiYqLP76c+dEjik+Ft4ZfjVoIgtCp21looE1fk\nIme5i4Kv0BTiU8bxZBUPuUhfPobsgq2pqQE4r17t5psncfz4v6muduBwbKC2N9+z1Fp8rwGLkaRq\nunT5kJCQyVitZ/jzn+9hyJBBjBgxkLVr/4UoPktAgJmIiJ9YtOglpk6d6l4stVotNTU1aDRDMBj6\nUl09EYgETgEfExSkRa3OJDAwirFjR7NhwzOI4jNYraeoqvqArVsH4HA8gCCsoaZmAPAhMAJIo5ac\nTRiNNzBlylyefvohZs6ciMlkQqsdxvDhkZw9e4TBg5/h5MknMZneIzIykTvvXIHJpGHXrkNMmDC6\nwWecn59PaWkpoaGhWK12JCkMlSoEne5+1Oq9JCScJCnpCDk5++nbtwezZo2kZ89kd4q7cjEOCwvj\n9tunYDQaUavVxMTEuN2nn322gXPn7ICD0aO7MH786Drx7uBgHeXl+ej1EYiiiEpVRXa2hZqaQSQk\nDGLDhj0EBs7BZDpG//7XsGHDp2i1JYSHX09BwXFqalzAdqzWG1CreyII67DbjRw8+B4uVwETJ0ax\nZMlrdchG3igpM24bG7ONkaHszvTWuUImS/nvMhnCr9ZefQXgsitfdgfKhKhMoPGXO9Jf8CTUlhav\nDx48mL179573uV6vd8f6PHH33Xc3WibhL3RI4vMcnPLEaShTs7nHl3eQLTlGffqe/oodeoMcx5N3\n4XIcz7MhrBz/lOvjvD23WbNuRKPRsGzZv8jIyKCk5HagCFBTG98LxOmMwuUKpbLyW7TarkhSAhkZ\nGTz++B8pKHiGffsGoVLB/fffyYQJE6iurq6zWA4bNgxBeA2dbiYazVqqqxciCGcJDPw7Gs0QBGED\nr732NBMnTuChh/7Cxo0X43Ta0Wi6IgirfylBuRGYDFwHhABPUxuPfBO4HEmKZMsWHU7nfsaOTQBE\nRoyYTlDQLnJzMxg4sD8XX/wu3bvX1tpVVRVTULCvwee8f/9hvv46DZUqAZfrFBddlIxO9xY220UI\nQgSi+AR3330DDz10v3sBVi7a9cUM4+Li6rjlN27czblzXUlISMXpdLB163ckJKTRs2dPNwFNnjyQ\nzz77DpOpB05nGUOGiISFxQKqX96znYCAsF/OpUGligPy2bPnE0ymPjgcE1CpjmO13gxE4nTm0afP\nG3Tu3A+Xy0l29t/JysoiOTnZPb4AdwlGS1EfGSrLK+QSCPk51RL7r2USnhafDG9kqIwZKtVQ5Plp\nt9vdv/P1RtXX8IzpdYTODNBBiU+GPJCqq6vdC3xrCn89j9tcNJY16mviq69EQo7jybFEwKtbU05t\n98ws9IRKpeKmm2Zy000z+e679dxyy1Ks1lHUDr+vgH7AXrKzX0SrHY0kvU9o6Fm6d/8b0dHRfPrp\nEiorK4HaRctms7kXSrvdjiiKJCYm8u9/v8b8+X+mpKSYyZOH8fbbOzl8+DBFRUUMGbKEqKgoioqK\nWLToRcxmM/fd9wrbtmkAHTabGUkKAaqA2dRmnY4DtgOh1MYijxAS0hmHIxpJMhMZmUNxcQBdunQj\nMrKaQYOmc/RoqZucKioy6d3b++65srKStWu38PHHe4iPv4FBg/ogSYNJT/+UV199jGXL3sJstjBw\nYG+s1jD++c8vmT59BKIouoUMIiIi3O+ssQSazMwSwsNTf/lMRK3uTFpaJp07d3b/vk+fPjz0UCcK\nCwvR6+NJTEykpKSErVu/pahIj05XitH4Gf36TcRiKQeySElJZN264wQGDiUoyE6XLnfgdH5IZKSW\nc+fMBAWp0eu7IAgqzOZkiouL6dSpU4sL+5sKOa6nVqvdHTdEUXR3nVc+J083aUNk6On6VEp+yYld\nvu6v11ZuTugYcmXQgYlPjitA7cIcFhbmFzdiU47pLWmkLcoklMfzjOOFhoa6LbqG4njNLdC+/PLJ\n3HnnFpYtuxVJCgAiEIQA1Op4HI4/IQjxwDg0msfrJBfodDrkrutyfFEpQA2QkpLCjh1r67i3pkyZ\nAsA333zPhx8eRaUKR6fbwh13jKN7965s3/5vHI5vEcWLcDhe+eV5HAS6AD2pzSTtAWxDEAR69eqN\ny5WHwRDIrbdO5ujRk5jNVXTvPpCuXbsSELCDQ4e+ANR066Zl1KjLznsGLpeLVas2ceCABaMxFJMJ\nzp3bTGBgFNXVZcTGhvHUU/P58MONFBf3JTFxNKWlZv72t/eIiEhGr+8KHOSaawbQt2/vJiXQREcH\ncvx4Omr1AMrLc9i2bRXZ2bHs2HGWm28exYAB/REEgcjISCIjI7FYLPz44484HA5uvHE4J0+eJSHB\nxJkzJhyOnVRU2LnttlG4XE4GDnSh1wuo1QGEhk5k/foVhIZehU7n4OTJPVgshXTqNB44RUTEJJxO\nZ4sL+5sDeV55ix0qv1NfT0NPwpLfnWfcUJl1qlKp3FqqnsdW9tdrLRn6Cp5rVEcQqIYOSnwul4uK\nigq0Wq1bV9PXA68pJKVMXGlqY1p/uDqVcU1lHM8zM66hOF5TIQgCb7zxEmPHXsyDD76ORnMbJtMG\nKitViGIUAQGQlDQEqzWJsrIyDAaDV+vAU77JarVy7tw5nE4n8fHx7oVKrVaTnZ3N5s1GunadhVot\nUl6exZo1P3D//ddhNlewZs0TmEw2+vQZSWTkcrZv/xLYDwykNg4ZgiAcZvTo29m8eS1JSbns2NEf\nlwtGjkytM3YmT76UkSOrcLlc6PV6srOzcTqddO7c2W09V1ZWsm9fOidPihQX52OzHcLhCCAlpStx\ncV04dy6K/ft34XT2IjJyBt999yEGg5bsbDMpKQLjx4/C4bDx9ddfctFF3dwEp0xY8STDqVPHUl6+\nnry8LHbu3El8/JX063cxFksFn3yyhquuqkQQatVWoqKiWLJkNZmZEeTmnsXpzOTuuydw990zEQQB\nk8lEQEAAoihSUVFBdPQW7HYjBkMn0tI+RxRDSUqaRVSUiX37DpKZ+QIGwwbmz7+RpKQkn8tueUJW\nEZLnVUPeCKVlqPy9krBky1D5XU8ylEslVCoVdru9jrUnu1WVx/ZMomlIks2fFp834lMWnP9e0SGJ\nT6VSuUmmsrLSbzV3DR1XqXbS1Ma0vh788u5V1i1sTRyvubj66quJiIjkvvuexmgchChWIYrF1NQk\nk5f3NYmJ5YSEhDRaMA21GqHvvPMpZ8/WZk8GB2cSHByFzSaRmppEbGwYkhSN3e7AbncQEBBNfn45\nsbGxvPHGkwwZ0p+8vGEcOVKEw9GDlJQAfvzRiCRdgyBE/UIg/yI+vpATJw6RmHgfVmsCn3++E4Ah\nQ+rWHwUHB2Oz2fjkk285dy4ElUqHwXCIO+6YRGRkJFqtlmPHTmG13kJc3CwKCi9hNL0AACAASURB\nVFZhMm3D6Sxg1Kg7OHYsC4cjGr1ei9F4ELO5O4GB3dDpulFeDhkZh+jV62IcjgA2bNjCwYPFSJKa\n3r1DuPbaieh0uvOeUXBwMLNnX8WpU6coLS2gV69LEUWRgAA9hw5Z+OCDYwQH98Pl2kT37nYyMrqS\nlZWF2XwxNtsoFixYwRdfrOW666YyevToX6xBJ/369eXRR2/k8883YjRuZ9QocDj6IAgCBoOBMWMu\nJjOzGx988Be/9dZTQh6r3kTBm4rmkqE8R2RXqrLWUN48KjeRMrl5U6HxJsmmvAZ/P7+Kigq6d+/e\n+Bf/x9Fhic9fPelk1HfcxuTOWnLM5kLpWoVaGaH63JpNjeO1BGPGXMLYsWM4cmQGarWBtLS/YbFk\nolY7efPNd4mMjGzSwrV+/Rb27jUQGTkag0Fiw4aT9OzZj379BrFu3Q+MHl2JKJoBKzpdCLm5B0hO\njsRqteJ0OomJMXDs2GksliCCg4OxWo8hSV1RqQYBecBAXC4BSdISG9ufhISUX4h4NAcObD+P+AB+\n+uk4mZmxJCWNAaCo6Gc2bdrP9ddPQafTodNpMJtjcbkCCA2dgMsl0qNHEsHBMTgcBwgMVDNgwFC+\n/fY/2O2pOBw5qFRFZGVFUlp6gIoKGxER59i9+yKSkmahUomcOrWTLVv2cPnldXv2yW5sq9VKt27d\niI09hMVSSnBwDEVFueTn55GauoDAwHCs1mHs2vUUen0MJlMXgoOHcfjwF1RVTSQr6yu++24ZsbHv\n0L//XARBR2XlX5g0aRhjxgxl8ODBWK1Wzpx5lezsrwkI6EZV1Q6mTBns947eynvUarUEBgb6PHTh\nSYZyTN7lcqHRaNzzCuomGiktt/rI0LPWUEmGMhHKWd2+lGTzZvGFh5/fFPn3hg5JfOAboeqmHF+G\nUv2lpUk0rSU+T9dqaGgo5eXlbstPPge0Lo7XHPTpk8DevVuIinqMAQM+pqjoRebMiWTQoEE4HA6y\nsrIwGAzuRA5PWCwWXnzxH2RlXYkonkaSdhIdPRJJikKvDyc+fiInTy6nSxcda9f+CZ1Ow6WX9uXW\nW29Ap9NhsVgYOTKVgweXk5X1I5WV79G5cyiRkTGUlW1CpQrH5VpGfHw1MTE/Ehub6n4WDocVrdb7\nc6mqqkGn+7XWLjAwkvLyY+7kpUsv7cv27efQ6w2AGoOhgtLSH1i+/L/U1FQSEyNSXZ1It24GNJpj\n9O49nrQ0PcXFh9FqS8nM3MhFF0VjNvdCra5dLCMj+5CZuanOdcguP7k8R61Wc+ut4/joo2+orAyj\nvPwsPXsmERhYu9jpdAZCQiIxm4/jcPSmpORnqqr0uFyjUalOYbc/SHb2PLp311JYeIri4ospKgpi\n69aN3HVXEVOmTGTBgnv4z3++oajoNIMGdWPGjKmtHSYNwpcZok2BJ8kq53JTEo08ybCxwnv533L3\ndTmjVKlP6hkzbI7Qhi/KGf7X0GGJT4bco83XUJY0yOovOp2uWeov3o7ZUpKuL44nCALV1dXuFG/A\nrbjSUldRczB79i0cO/YMBw/WqrKPHt2Zu+9+iNzcXObNe5aiIg0uVzlz5kzh7rtvP+/3n3yyksLC\naNTqWERxCmazkfz8w4wcOfiXe6ngzJkMKiouZ+TIGZSXZ2Ey7XMTu16vJzc3l/LySKZPf57MzCLO\nnv2BpKSf6NdvGIKgIzhYYPbsufTv34cPP/yes2d3oVbX9pQbN65ujZ6sNdm1axybNv2I1ZqIWq2j\noOAQY8aEIEkSBoOBe++dicXyJYWFFjSaGi69NITDhx3ASKKju2M0fk9+/noeeugm0tJyWb16PWp1\nHCNHJtGv3+1UVRUC31FTk4Mk1boWKytz6N/fAOBWz7Hb7ee5p5OSknj00VjKy8tRqS5m8eJvMBoz\ncDhsrF37HJWVZwkP12O17qKqahguV09Uqu/QaofjcEQhSS7OndtJaakBQRiK1WoiJmYyK1a8zOjR\nIwgICGDOnJvrLPT+gLyR83eGqBKNkWxTEo08yVBJWsrvyxtSOfTg2bnC89hKSTZvZChfm/L5eeKC\nxddB4M/aOJlsmpq40hhacq3KprSya1X+XF6EZXdKTU2N+/hqtdodpG9MVLmlkCfpwoVPYTQaEUWR\nTp06oVKpePrpNyksvJ7IyCtxOCp57735pKT0JyUlpc4xsrIK0OmmodOJmM1/R6UqQqvdDAzl3Lks\nJGk/Wm04XbtOpaoqF6vVzE8/lZOZmcnQoUMRBIEzZ7IQxUHExSURF5fEgAHJCMKXTJ48iMpKMwkJ\no0hOTsblcnH33dP46aeTWCyVJCcPJSIiArPZzJkzZ1mzZg8Wi4uePaOYOXMSM2Z047vvVlFTYyM1\ntRPjxl3mzviLi4vjkUeupaSkBI1GQ1ZWPt9/X0CXLuNRqUQCA6+lsPAfBAcH07//RXz77V4KCzNR\nqxMQRS0WSyHDhvWhtLSaY8c+R60OIDq6issuuxybzdZoUbher3crytx77zQ+/PBbli37CJPpLuz2\nVMrKfkCj+Rq9fgsazfe4XLMQhDE4na8DejIzz2GzgUYzFZtNw/HjZ4mLc7q7RMiLvOxOVroKlQki\nLYWyFVNbZYjKVl5zSdYbGULdNk7yXJDnm/x85DkoW5VNkWTzpkKjJMOGiu4vWHy/c/jT1Wm327Hb\n7e4Av7+z2LxBLteQ6/EMhl8tAc84nqxIIbttmuKqac3C5XT+2pVczg707PR8+vQ5wsImACCKIdhs\ng/n2229Rq9UMHDjQfe3Dhg3gs89WExi4lOBggerqF5gxYyIzZ0ZSU2MlKWkGr7/+Bfn5R9i3bxuQ\ngtkczKpVm+jfvz8BAQHY7RZyc/MQhDhiY2Mxm0tJTAwmJaVu01e1Wk1UVBTjxtXG7eTnVFhYyMcf\n7yUk5EqiosI4efIwK1eu4+abp5KcnIRWq63TFDgtLZ1Vq3ZgsUBiooEbbphMaWk5TmclLpeESgV2\neyVarZrCwkK+/TaTXr3mYbVmc+TIMcrK3qR/fwMaTS969uzEqFG1AsARERFuspGt9fT0dH78MZ3A\nQA0XX5zi3s2XlJRQU1NDVFQU8fHxXHbZQFasSKGmZho2WxiiOAibbTNOZzQqVRoBAWuw2T5DrdYR\nGzsWo3EQgpCHWv0tBsMcMjIWcd11Pd2JNQ0lhrSGDGUPilzrKopim1h5soKSL0nWWxsnZVG8sluB\nrGHaHLHupkiyQW24YMuWLVRXVyOLZjQV69at48knn6SmpoaEhASWL19OfHz8b7bzuowOS3wyfGnx\nKa0r2bXkS9JrbomELKzd3Hq8xnan3shQFMVGA+3KRauxXXNSUjznzu0hPHw8RmMe5859x+rVifz3\nv/9kxoxePP74/QiCwPTp0zh+PI0PPpgAqBk9eiBPP/2im+idTifjx/fihReWolLdg91ehCRVsXWr\nkeXLP2Hy5PH897+nyM0t5/TpckJDJYYPF5g69aomvQ+Xy8WmTVtJT9fQo4eD0FAdnTqlcvr0fhwO\nByqVyv285Czijz7aTVjYNURFRZKbe5SVK7/DYNBhsWxn165KoqK6Exqawdixhl/ed18iIjpxySUx\nFBbGUlDwTwoLQ/jmmwDs9izgS7TaCERRxfTpQxk5cgSCIHDs2DHee+8AOt3F2O1V7NnzGbNmXcaO\nHfvZv78MUQwnLKySP/7xGgICArDZijCZLLhc4TidRqAGQeiKKIqEhMRjMBxBFK9iyJCr2bTpZ1Sq\nAZjNL6HTrUavP8N11z1Q73NqLEuyKWQoN36WN0r+JjylK9VX2cxNgVz8bjAY3CEJZcan7Nb01tnD\nW8ywPjKUN6AajYby8nK+/PJLDhw4QFRUFEOGDCElJYXbbruNwYMHe71Op9PJnDlzOHz4MLGxsbz6\n6qs8++yzLFmyhIULF5KcnMyKFSvYsGEDDz74oLvz+quvvlqn8/q0adParPO6jA5LfEozv7XE59m2\nyGAwuCeyL9HYtTa3Hk/e3TUljue5O/VcuGpqas5TwVAuds1NlnnuuQe5//6/UVr6FWlp+4mJuZyE\nhKeRJBtffnk/U6f+xIABAxAEgT//eT4PPngvdrudkJAQ9/XJJDtlynjWrt1LcXEBZ88eISxsFvn5\nmbz66of8859rSE19nssvH4DRmEZOziYmTepFp06NdzRwuVx8/PHX7NkDRUUOysvLKCkpp2vXUKKj\ng90uI6UFXVBQgM0Wj1odSFlZGfn5KjZu3MhFFw3jhhuWcuzYV5w+/RVDhyZy++0zKS8vx+ksBmoF\nm/V6gaKiSrp3v57AwAh+/nkbu3eHctllV6PXG/joozWEhYXQt29fvvvuMOHh0wgJ6YQkSfzwwyn2\n7n2TgoIooqKmMXhwT44e3c+jj77BU0/NoVMnO3l5f8XpHECtkHgyKpWFiIgxREToGTHCRXGxhcBA\nkaAgC0bjWuLjhxEcHMDgwYPPa9vUEJpLhjJ0Ol2bEFB7uFLlOeKZMNOQbFpLyVA+hkyGN998Mzfd\ndBNTp07liy++4MiRIxw8eNBdt+sN8ka/rKyM2NhY4uLiyM3NBX67nddldFjik9Ea4lMmrni2LfJH\n7LC+YzYWx/NHPV5TFi5l7zPZ+m1qbOSiiy7i88/f5eTJk8yde5LOnZ/+5T50qNXJlJaW1vm+HLNS\nLiBKkp0+/WKWLt2LXj+B3NyzFBSsRJJUFBRUk5a2nX79yunaNZaQkP40dY0rLCzk9GkXAwbcisu1\njrNnT3D8eB5RUUHcdtvEOs9K1pKMjIxErU7H6XSwa9cJqqsDMRprXZXh4ccQxRAEIZX09AAWL97A\n7bePokePMtLTv0WtNiCK6XTpEo1OF4LNZiMv7xxBQaPIyyth9+4z2GzBvPDCv7j11gmkp58kPHwU\nWm0QOTlnyc+X6NFjGCZTMhZLZ9au3U14+ACysrbw2mvr6dEjkTNncqio2ITVWoIkhREUdBsxMddQ\nXb2MUaNSUKkkvv56Ib17S9jtRURGRtO/fzfuumt+q8nIc0zJcTX5XcoxL7m5rNLb0JxMxoag3DC1\nlZUnz0tJkpqclaocUzKaQ4YOh8NdcK+crxUVFcTExDB58mQmT57c4DVotVqWLFnC0KFDuf7668nL\ny2PFihUAv9nO6zIuEF8LCEqekA21LWoL4vNmacqft2U9nvL65AkmxxidTqd79yoTtOdk9FSqkBEU\nFMTQoUPp0yeJs2e/ITLySiyWDAThR7p3v/G888sZd94s2WnTJnL06E98+eV+CgtPIEk3IggqJOll\nHI4izp4NxuWyIQifk5DwYJPut5bkwWq10afPRBIS8sjO/pj77ru2TuNXSZJ4883FvP/+KkBi5Mih\n5OXlUVISRni4moEDJ1FSEsepUz9gt0eh10+mc2ctWq3Ip5+u4dFHZ7lVaRISprJ+/Q42b/6SsLBB\n2O2VGI1HyMqKRae7GKu1hPLyM2zdehaDIZHS0psxGHrhdEbicOQwbNj95OVlYLGEY7F0Iji4mOjo\n7uj1o9m27S/odPeQmDiU3Nz92GzLMBhKKC1dRM+e57j00huJiIjg6qunIkmSW/DAH1BmT8ouP+Xz\n9OZtkMnAW9lAUyBbeWq1ut2tvJagOWQItWGK7777js6dOyOKIk8++SSjRo0677j1dV5fu3YtS5Ys\nYevWrRiNRp5++mlWr17N3Llz3cdX4rfQeV1GhyW+lro6lW16Gmpb5E/ia04crz0ms5z9Jmezek5m\nz8kou129xQsFQWDhwid47LGXSE9/D4NBw0sv/bGOW02SJMxmM59//hXbtx8jPNzA3Lk30KNHD/d3\nRFHkgQf+j9zc1/j5ZzWwCUlKBsYCx3E4/o3N1pnoaEOT7lNWlImPN1FQsJ/Q0CSqq9O47LK+53U7\n//TT//Duu7vQ6VYDAps3P8hVV6np0yeWnj2nIggBbN++k5KS0wiCjm7dbCQl9UClUpGdXeve69Wr\nl3vhEkWJ3NztnDy5G4cjF4fDjCBMRxB+RKXaTUlJLMHBLxIQEEhNzTfY7Z8RHj4Xq3ULZ84cZsCA\nkaxb9ypVVVFIUiRW63ACAtIRxXh69x7IuXO5REcbqKqKpGvXo/Tr14VHH32K2NjYNomrNZY92Rxv\ngzfXu7fxqEyYaYtktJZYeS2BkgzltUBWmHG5XOzYsYPt27eTnp5OcnIyNpuNt99+m9tuu82t2Vlf\n5/UDBw4giiKpqbXi54mJiVx//fXMnTv3N9t5XUaHJT4ZTc3qVLoTZXmvhhYBf5VJSJJERUUFco++\n+uJ4DVk//oK8e1WpVA1OZm8704aSZyIiIvj3v99wF/8r653kc3722RqWLTuB0zkDu72YvXuf5dNP\nX6ZLly7uc4SGhjJ//q2sXTuPsrLZCMKVSNJxIAGr9TC5uYPIzv6Qt976J2+++ZLX9+tZO3bvvTew\nZcseCgr2MnJkJGPGXHHebzZs2I3LdTOgQa2ORBDuJTv7A/r3r6KsLBOdLpikpBxuuGEUu3YV0rlz\nLGq1mry8A/ToEYVOp6O8vJxTp05htVrZvr2QSy55BZVKQ15eBtu3v4BG8yMuVxAQisuVjEolUFlp\nQq2+GFH8iB49UsjO1nLmzMP07KkhKqqaoKCuBAVdB+g4eXIh3bpJREVp6do1Bau1jIKCOJ57bhbJ\nycltQgatyZ5sKRnK77Op/QBbi9aURbTmnPKYVRJ7WloaaWlp3Hnnndx///2cPHmSQ4cOcfDgQXe/\nzYaQkJDA8ePHycrKomvXruzfv58+ffoAv93O6zI6LPF51rDUp4PnzZ3YlIHqa+JzOp2YTCaANovj\nNefalOUJLVkkvSXPeJZVOBwOd7G9TO5Qa3mvXr2V/Py7cDgSgWQKCn5izZovmTfv/jrn6dmzJ5Mm\npbBhg43q6oNIUiFOZwUulxWrNQO1OobPP9/HbbcddO9kZSiJXbkwT5s2od77kiSJsrIyKit/wGIp\nRRQFRLGGTp1i+eMfr2bbtgOYzXYGDRrEgAH9GTbsZ1auXE1WloPu3SO47rqJpKenM2fO4xQXh2K3\nlxMSEsCNN/4BtVokLi4Jp9OF3W7Fas3EYjHidG5GFK+gqkqHw/EpISHdKSsrx2g8TkCAmW3b1pCb\na0UUc4iN/Q+dO/cmJqYLt97ag3Xr3sFojMPlymHOnHH07NmzTRZmf8TVGiJDuYRHmfAhe0Za4iZt\nClwuVx1vkb8VZsD7ZsLpdPLee++xevVqFi9ezMCBAwFITU09b8w3hNjYWBYtWsQVV1yBJEkkJyf/\n5juvyxAkf1Vv/8YhqxwAlJWVnaeo4ulOVFoaTT1+RUVFq1UQPKXOzGYzYWFh7gmsnJzyrk6j0dSp\nG/MXmlOe4KvzeWaQysr248bNIjv7KQIDa2vsqqtfZsyYA6xZ8/F5x9m6dQeLFh0mNHQ6giCxatVj\nQAyiOJKAgEk4nf/gqaeimTp1Kps27cflkhgxog8XXXRRs4n9yJEjvPHGIbZsEbDZknE4jhEc/Amb\nN69w1zV5g9VqJT8/n6KiIp5//m327r0EnW42TqcZi+URxo8fyYgR93LgwHp2734Vp/M2RFFHXFwA\nFRUfUVx8BpUqBLu9Bp0uAZerJ6KYSUCAltLSYQhCd9TqYCTpPUaOvIPIyC28+urd2Gw2jEYjnTp1\nIjY2trmvqNlQlijILaf8CaWXQJ4nUNfjIP9pipu0qedsTytPuZnIzs5m3rx5XHzxxSxYsMCvcdrf\nMjq8xSf/XeZ/eWKYzeZ6E1eaevzW7Cnqi+NZLBb3QvGrZuSvcby20ipsKy1P5TmVscOgoKA6RbyD\nB3fl3Ll3sVrNSFIhWu0+dLoId9NaZfLMmDGjqKys5p13/kp6eh6SVIwgzEaluhyL5TCiCC4XPP/8\nagRhIiCwc+d6/vznK+nVq1ed66qpqXFvnLwV/hYUGAkPH8zs2f3IyMigpmYI3bs76yU9+b0fOHCQ\n5ct3Iwjd2LXrNKL4V7TaECAEq3UMOTmrMRgKSUs7QUzMEGy2ZHJysqmqOofT6aJ375e55JJRlJXV\nsGHDn6ipOUxo6A2UlGxBFOcgCCdQq3VYrWFkZDzHY4/9Bb1eT1hYGF26dPH7+5STnxrqleePc9bX\nucGXMUPPc7aHlSfrs8pz0+Vy8dFHH7F8+XLefPNNRowY4ffr+C2jwxKfEvICKndOkAPOvpiM9blQ\nG/q+J/EqG6/qdDq3m0ZJrPJO0t8Lli968rXknJ5CyzJkd9bs2Tdz4MDbOBy70GhCEcWuTJzYD4fD\ngdVqPS+T1Gg0Ul7eCY3mHgICjNTULMbh0CEIGuLjs7FYorDZhhMd3Y3AwEiOHDnA3Xe/TLduXRk7\ntjezZ99IenoG77zzNTU1IWg05fTvH0F+vg2DQcvMmZfRo0cPYmMjsNnS0OtTGDRoIDk5O+nTJ8Hr\nfZpMJr7+ej3nzpWwbduP9O37LHp9FGr1Mszmb1GruxMQIAHfEBCg4cSJPeTklCGKBioq5iMIYwET\nKpWR7GwTZrMLk8mMShVHaGgUgYHXY7evRxAy0esDCQvrTXm5hSlTUkhNHeouF7BarXUWeHmT5Qsr\nxdPiaqu4mjJ7simdG1qbQAO0i5Xn7ZwFBQU89NBDdO/enU2bNrlr6DoyOqyrUx4kUKtPJ8eMAgMD\nfTZIvblQG4JnyyKtVut273nG8WQXo+zCUCa4NEdNpalQ7tDbsr6pOef84ouvee+9r7DbnVx99SXc\ne++ddSSblJmkN900H5NpAaWlesrLAzGZPiUo6HuCgjozfXoYWVlFHDgAOl0kQUEuysp0qFSpmEwO\n7PYfGDvWhNMZSlnZVQQHd8LhMJKR8S8mTHgSSXJgta7h2WdvIT4+nlWrvmXHjjwEQUdCgot77pnp\nLrSH2ve+e/duli9fQ0FBf+LjU9i06QMEYRJ2uwur9SfM5h8QhEBEsQJBcNGt27NkZtZgs21Crb4I\nqzUVQXgDUfwDovg1KpWFUaNu59y508AZIiK6UFhYQ1nZSaqrM9HrL0cQsoiLO8Xatf88L0vW0+3X\n1BKUxt6nbHHJcmP+hqeV52uLy5MM5T/wa+2qRqPxS8xQCWX5R2BgoFt8/4svvuDtt99m4cKFXHrp\npX6fs/8r6LAWn5JAZImxsLAwnw6Mpro7vbUsAtwLjkx4UBv7qa9UQE4IkdPeG1JTaep9eroY2zrz\nrTl1h9deexXXXutdakyZSarT6TAYAjGbLcTGdqGqKhe12kJsbCJ9+gSQnNyZr75Ko6xMi1ptpqjI\nBkiIYiBBQRPQaIayefMtiGIy8fGDKC21UlLyM+Hh/RBFLUZjJjt37uXHH3dz551TuO++/2PCBCM/\n//yzOyvX6XTywQefsWPHISoqSrDZkjl16hhOZyZa7WbMZhFJykOvH4xanYxef5DAQC01NdnExj5M\nSMgoNBojgjAIs3kBKtUdSBKEhvbF6SxGFN+kW7fNaDS5iOKNdOlyGeXlaWRnw+jRCUAVISGJ3Hrr\nX4iMjKz3WSnfiXLj4M2Kro8MPd+nr3vleUNbxdWUlqF8TqfT6fa+KNcYX8UMlajvPo1GI48++ihh\nYWFs3LjxPC3cjo4OS3ySJFFZWYkois1SFGkOGiM+b8ovDdXjNVYqIBOkMmCt3JEqM9masmA1tTzB\nl1BKRfnznHPnzuDJJ18DZhIWVkBExAb++MebmDRpAn/4w9OYzeOIjr6d6uqzmM2voFIVo9H0QxBE\nnM4srFaJmppcsrM3EhU1BIcjCIvlFLm5e9m06S2cznE4HL149dVd2GzvEhfXmTVr0lGpkrDZ1lFV\nlcaRI04cjkhstioEYTeCcAsu1/VYreuAt4E0zOaVBAb2R5LCCAycg9W6jJKSXGJjNYAJURQICNCh\nVh/GarXhcBzC6fyY+fNv4JFHHiQrK4tnn11OTk4FLpeJXr0qmTv3/4iKimrWs20pGQqC4FZaaesY\nF7R9XA3OL7gH38UMlfAWP5QkiXXr1vHyyy/z3HPPMWXKlAtWnhd0WFcn4J6QJpMJtVrtzvDyFSor\nK70G7j3jeLJrwpPwPOvxWloq4AlPV5bD4UCSpDquUbkdiq/O2Rhkq1euk2wL1f0DBw6wceMuAgJE\nZs68mk6dOiEIApdccgsFBc8SHNwfECgpWYRW+x7V1dPQ6frgdH5PVZVAQMCNCMJ+HI4iAgIKiIoy\nkp1twWrVAz3RaiEwMIbo6AO4XFHYbHcSGAiVlcspKDgF3IxaPRiHowxYCvQD7ga0wOuoVJOAzahU\npwgKep7w8ChiYkpJT19AePgMIJz8/PeIiwvCai2na9du6PVaZs+ezLXXXu2+z6KiIo4ePQrUpqzL\nGyx/wHNxV6qEKFVVlF4MX8GzxrI942pN/W1LsknrU3yprKzkiSeewOFwsGjRonqbN19AB7b44Ncm\ntE0tYm8uvFl83hJoGovj+XoS11dArty1y9+TXTe+jBcqoVys2toN1rNnT/r163de6UePHomYTFmY\nzU4kSSAw8DTPP/84y5Z9RmFhPuXlRgIDryEoqCuiOBCzeRORkZ8QEhJNTo4euBNRHIvDcQiz+XPy\n8s6i06USHDyGnJznsdkuQZJAEKbicJQjCH2RpDzgZ+B74BrAiCCEolJNQpK2Ex1tpmtXLYmJQ9Hr\nb6BXr+N06ZJESsrjJCUlERMT47WOUq6NGzVqVJuUC8gbOFkHMigoCKBecQJPr0NL0Zri99acszWW\nZUsSaFQqFQ6HA5fLVcfK27ZtG0899RSPP/44M2fOvGDlNYIOTXwyMclFnf46PrQ8jtdWMTXZlSqK\nYp1SAV/GCz1RX0G4P9FQhqiMBx64geee+w/V1f1wufIYNaoT11xzDVOnTuXw4cOsWrWO06ej0eli\nKS6uICCgihkzRrNnjxGDwYLNlojLZQO0OJ0GQkO1aDROHI5MXK5y4BpE8RAOx1HgYsAKpAPhCMIu\nJGk/anV3NBoDBsMBhg0biM32I5GRSRiNBwkNPcWf/jSfuLi4eu+zodR9lhHxegAAIABJREFUf6Eh\n6a/mdCRvDhnWV6/mT/gzflgfGcrPyWq1uufm1VdfTVRUFFVVVVgsFj777DO6devmk+swm8089thj\nbNiwAZvNxtGjR3E4HMyaNYuzZ8+SnJzMp59+6q5TfuGFF/joo4/QaDQsXLiQKVOm+OQ6/IUO7eqU\nXTFWqxW73e4WefYVTCaTe+LW1NSg0+nc1kVjcbyAgIA2i6nJ5QlyU9j64BkvbGm2ny+UXpqL5maI\n5uTk8PPPP2MwGEhJSanzXAoLC3nkkYUYjX0AF3Fx6bzyyiM8+ODLHDump7w8hZqacbhcB+jUaSVB\nQZVERj7D2bNrKC7ejcMxjUGDRnH8+CtYLJ3QaCSSknpRUWFEpdqC1WrD6exNly6d6NOnmtdf/xM7\nd+5n584ThITomTXrCpKTk71et2ciSWuFj5sKuRC9peIJnmQojy8lEcjuUuV8kePBzRWYaCmUVp5e\nr2+TOapMkJHDAC6Xi88//5zPPvsMu91OWVkZJ06c4KKLLuKrr76qd3w0FXPmzCEhIYFnnnnG/dld\nd93FyJEj+b//+z+WLVvG8ePHWbRoEdu2beMvf/kL27Zto7CwkLFjx3L8+PE22Wy1FB2a+OTJJS8U\nvsx8kiSJqqoqt5uwsTjeb50I6kNj8UIlGbZ3DMaXijYVFRUcPXoUQRAYPHgwBoOBtLQ0/vznNzl6\nNAOzWaBr1zDmzbsWm83Bxx+fQJKGU1Ozk5qaE0RFjcBiycViOUNo6BACAsLo1s3CDTfUyp85HA6C\ngoLo16+f213YGNprUfZXiUJ9MTBlOKCt6lfbQ30FvG8orFYrL774IidOnGDp0qVuPVqbzcZPP/1E\nv3793B6llqCgoICJEydy7NixOveYlJTEsWPHCA4OpqKigtTUVNLS0vjrX/9KVFQU8+bNA+Daa6/l\nkUceYfTo0a27eT/it0vJbYjWqqx4Qo7jyaQXHBzc5nG8+uDr8oT64oXe3FiyW7mtXFJKa9bX2X2h\noaGMGTOmzmc9evRgxYq/k5+fj8vlIjo6GoOhtot6//4Hycw8R2zsNFJSniIrKwu9Xk98fDxnzpzB\n6XSSkJCAWq12L+7y5sHhcDToUvaX1mVDaElReHPhze0nJ4XJrlM5Lu2PUgEZ7ZElKkmSO9lL6ao+\nevQoDz/8MLfddhuvvPJKHcLXarWkpKS0+tw//fQTgiAwfvx48vPzSU1NZenSpRiNRrdxEBoa6u6J\nmZ+f7xanhvbrsdccXCA+fEd8cnqxHONwuVxuwmsojtdW8a22Kk9QCk7LSQeSJKHT6dzEK7uo/LFY\nKd3X7RH3iY2NreNiFAThPAFg5UKh/Lt8rKamvitbzfyvJHW0BDIROByOOiLt8v/5ulRAPm57W3my\nKL7dbufNN99k+/btfPjhh3Tv3t1v5y8qKqJnz56sXLkStVrNY489xrPPPnvee1b20Wvo/36L6NDE\np1yYWqurKdfj6XQ6dx+rmpoad5akvHt3Op3uHWpb1hi1tSu1MQHr1tQXNnTOtpbDgqYlzDQHjWX7\neXYWkC1uOU7mr3tuD1c11CUCb++0oeelDGfIguZKN3x946u9yF2eM0or7/Tp0zz00ENceeWVrF+/\n3u/XEhERUUeyccaMGSxcuJCwsDBMJhNBQUFUVFS4yyXi4uIoLi52/764uJj4+Hi/XmNr0aFjfPIi\n0tJOCkrrxVs9njz55PRu2eUnW0O+SONu7Praw5WqFLBuTgp9c+KFnmiP+FZ7uxg1Go070cGX0mLe\n0B6JJN6SOlqDpkixyeUCbU3ucnhEFEX0er079r9kyRK++eYb/vGPf9CvXz+/XwfU1h8PHDiQrVu3\nkpiYyBNPPIHBYCA9PZ0xY8Zw1113sXTpUvbt28f777/P1q1beeaZZ9i4cSOFhYWMHDmSEydOeBVt\n/63ggsVH3c7mTR3kDdXjyTtLecGRyVXOmlTWzPlDysiTfNrDBdaSFPrmxAuVz8put7ephmh7WZZN\nsULkMehwONzXCC2vmfstkHtTe2A2hsbUZ+RxBHXrEX21efCG+kpAMjMzeeCBBxgzZgwbN25sEy+N\njJCQEN5//32uvvpq7HY7o0aN4rnnnqOiooJZs2bxyiuv0K1bNz755BMAxo4dy/jx4+nbty9qtZrF\nixf/pkkPOrjF11hPvvp+I8fxZCFp+XPP/njKJBKdTuf12L4qEZDRnPIEX6EtY2pKPVIlEfozuUEJ\npZJOWwktt9bFWJ+IcmNk2Na98uRrbWsha89YnkajqfPMZM+Dt7KK1owxZTsx+fm6XC6WL1/OJ598\nwltvvdWsxrAX0HRcsPgUf2+qrqYyjuetPKE5SSTK+IRMop670Kbs2tuje4K3nbm/F0c5G1ZuyyQ/\nX1/HCz3RXvEt5eLY0udbX3d7eaPl6XmQ3X1yRmFbxYT9nSXqDZ4am/LzlWOBMjyTZ+qbk00hQ+VY\nUlp5+fn5PPjgg/Tt25dNmzb5XELxAn5Fh7b45J0e1NZlBQUFnbfDVMbxZP97U+vxfKk36bkDVS5U\n8iKm1WrbpPM61LUs2yOm1hj5tCZe6Al5oVPuzP2Ntm7UqlQHsdvtdVSN/G1JK8WW23IstTZjsyWW\ntFJaTV5LJEli1apVLF68mNdff51LLrnkguSYn9GhLT4l6tPVNJlMAHVIURnHk39nsVj8mkTiuWuX\n3bRWq9X9/7Lrz9eJDUq0t2XZ1JhlS+KFnnqkSrdbW2bDtkf8ULZCXC6Xu7tAfZmRvrKk26tcoD4r\nr7moz5Kub4zJ/6fT6dzlLsXFxTz88MPExcWxadMmn6pHLVy4kA8//JBjx45hNBp/N3JjvkCHtvgA\nN3FUVVW5J588MXwVx/M16itP8Cb5BL4RA/aXAkpjUN6rP5RBlC4/+Y/8fFwul/tef69yWM0ln6Zk\nRjYl/vW/cK++OqfsHZEt6DVr1vD888/Tq1cvTp06xf3338/cuXN92k1h586dzJs3D4fDwdGjR39X\ncmO+QIcnPjlWVF1d7c64lCeGXq8HvMfxlLVbv0VXn4yGXKRNdV+11722Z80Y4I4d+qtEQEZ73auv\nyMfb5gG8b7h+C/cqlx35G/URbWlpKQsWLMBkMhETE8OxY8c4fPgwEydOZM2aNa0+b0lJCdOmTeOd\nd97hrrvu4tixY78ruTFf4PdN602E7NKRi2RDQkLaJY7X0PW1tDzBmzvG0+VX38IuE60cZ2qre20P\nNZKG0vY9LWl5996SeKEnlPVxbXmvvuxoIAgCGo2mjiv4tyJb91sgWvm9SpLE5s2beeaZZ3jyySeZ\nMWOG+1qcTiclJSWtPq8kSdx5550sXLiQmJgY9+e/J7kxX6DDE5/D4aC6utrt1lL2D2vrOF591ycn\nkfiivUx9KheeGWuyI0BO6PBXeYASyk1FW7bSaSym5ot4oSfaOnlFhi+yRJsC5YZL3lTYbDY32flb\ntg58F8trDuqz8kwmE0899RRGo5H//ve/REdH1/mdWq0mNja21ef/+9//zqhRo7j00kvJzMysc3wl\n/pflxnyBDk98VquVgIAAnE5nHaUVQRDcE0XW1WxLC6Qtk0iUC7tKpXKXYsiLlr8XqfbelUuS1Gyi\nbaxEoL7+hXKpQHskr8hal+1BtCqViuDg4Dpzpykam/KYbK7GZlv36IO62anKJrG7d+/miSee4MEH\nH+SWW27x67VkZmayYcMGPvroI+x2Ozk5OVx66aW/K7kxX6DDx/jkySbX6MkEIMd3ampq2i221Zb9\n1GRXr1Ieqj5tTaXUW2tjX8qax7aSwmoroq1PnABq9TVl2Tp/qYLI16C0aNsqKak+RZKm/K6x5JmG\nnpm8mZHnbFuNJ2UNojxna2pqeOGFF/j5559ZunQpnTp18vu1KHHu3DmmT5/OsWPHmD179u9GbswX\n6PAW39GjR0lMTESr1bo7KlRXV7tJTi5kbQsBYGUj2rYUxlUSbX2Fw425SJUu2aZkkbZHqQDUrcnz\nt/UuPzM5XuxwONDpdO5Nla/jhZ5ojy7sUFd3srnPuDFZMVnqT0mGslUo1yC2tZUnP2PlnD18+DCP\nPvoos2fPZuHChW1CwJ5QrlcLFy783ciN+QId3uJ7/PHH2bt3Ly6Xi169elFVVcWmTZvYvXs3sbGx\ndeqYlG4YeaHyxW69vvIEf8KTaH21O24si1R29dnt9naxaNuaaJsi7txYIXRj8UJPKONMbfmM29Kd\n6m2cAXWel682EN5Qn5Vnt9t57bXX2LNnD0uXLm11J/QL8A86PPFB7eK0bNkynn76afr06UPXrl3J\nyMggMjKSYcOGMXz4cFJSUtxNRZVEKO88WzLZWlKe4Au0JdEq3X2eIsBNaQ/ji/P/FkigORmxDdUX\nNhZjbY/6OPDeKdzf8IzlyZa0rzYQ9aG+rhEnT55k/vz5XHPNNTzwwANt9uwvoPm4QHxATk4Od911\nFy+99BJDhw4FaidVYWEhe/bsYc+ePRw4cACz2UyvXr3cZNirVy93iYNy9ym7a+pboDzLE9qqQLq9\nkki8xQ89nxn4ptBeifaqP/RHTK0xMXOVSuXeXAQEBLTpu/Vl66Cmwpv0lyc849LN2UDUB28E73Q6\neffdd1m3bh1Lliw5r7HwBfz2cIH4mgGHw8Hx48fdZHjq1CmCgoIYOnQow4cPZ9iwYURERJwXk1Au\nULI7BGrLE9p6MW5rom2qteW5QDVlA9HQedu6lY58D23ZWUAeZ3a7vU4Kuj/ihd7O3V5JM63J2GyM\nDOsLYcgWvCfBnzlzhgceeIAJEybwpz/96XevePJ7wQXiawUkSaKiooJ9+/axe/du9u3bh9FoJCkp\nyW0VDhgwAI1GQ0FBAUajkYSEBKBusoivXDDeoEzZb8sduTK2JbuhmoOWZJG252LcHpqTnpmTchKW\nL+OF3tAerYOgaVZeS9BYJingrkGUm8S6XC7+9a9/sXLlShYvXszgwYNbfR1Wq5Vp06aRmZmJWq3m\nzjvv5Iknnrigs+kHXCA+H8PlcpGRkcHu3bvZs2cPR44cobCwkNLSUmbNmsW8efPo3Lkz8GsHeH8k\nzrRX/NCzMNuXai+eC5Sy44LscmpJTV5r0B6dyaFurzx5MfaG1sQLvR3LW0KHv9EedXnyM5NbNgmC\nwKlTp1iwYAH9+/dn//79jBgxgjfeeMNn7YOsViu7du3isssuw2q1MmLECJYvX86iRYsu6Gz6GBeI\nz4/YuHEj99xzD7179+bWW28lOzubvXv3kpOTQ1xcHMOGDWPYsGEMGTLEXUrhbdfZnMSZ/wW3pi8h\nJ+o4HA532UBLXaTNQXu6U1sbU2ssXujNmm6vpBl/WXmNQVmSIW8sysvLWbp0Kbt27cJisZCeno7L\n5WL06NF88cUXPn//M2fOZO7cucydO/eCzqaPcWFr4EeIosi7777L5ZdfXudzSZLIyclhz549rF+/\nnpdeegmbzUa/fv1ITU1l+PDhdO/eHaCOLJa8uNe3U/cU4m1rq0cQhDarP4S6NXmyKkh9WqS+yiJV\naom2tfKK0tpqyMprDEo3u7fmx8r6QvldOp112+n4G+2lvlJf4X1RUREPP/wwXbp04auvviIwMNA9\nj0+fPu3za5MT695///0LOpt+wAXi8yPGjh3r9XNBEEhISCAhIYHrr78eqF3Ef/zxR/bs2cNrr71G\neno6YWFh7sSZ1NRUQkNDz+v3JS/qUGsNyG7N35usmrfzOp3O88oxmlpo35Ki8fYqCFduaPy1sfBW\nOK7UbVWr1dhsNmw2m99j00orr60kAsG7jqkkSXz99de88cYbvPzyy4wfP959v8p57EvU1NRw/fXX\n8+KLLxIaGnre++7oOpu+wAXi+41Ao9GQmppKamoq999/P5IkYTQa2bt3L3v27GHx4sVUVFTQo0cP\nd+JMz549+eSTT0hKSmLEiBGIotgmi5PSrdnWVo/SndpUq6cpItMNZZF6nrc+dRtfo73KT+o7b1P1\nSFs63trTypPPq7TyysrKeOyxx9Dr9fzwww+Ehob6/VqsViszZ85k2rRp3H777UCtlXdBZ9O3uBDj\n+x+C0+nk9OnT7N69m6+++opt27bRpUsXJkyYwMiRIxk+fLi7FYm3ZAZfuPraozauLc7bUJq7HDds\nq9ZM0H5JM82NqbUkXuiL8/oK3s4rSRIbN27kb3/7G08//TTTp09vk3duNpv/v71zj4qy3P74h5uK\neCEhoVaGojgyiicE1EzzkiKJWXi8VHaU1PB0Sk1L+xGaiseOOmYCxxQTrczQo2WWkuARb5WA4v2C\nWQlaoqglKiDBzPP7g/W+Z4abIMwMwvNZy7XqBd7LoO9+9rO/+7sJCQnhqaeeYubMmepx6bNZ+8jA\ndx8ya9Ys1q5dy8KFC3n22WdJT0/nwIEDpKamcvnyZdq0aaMKZx577DEaNWpUrnCmOlt91trWtJaI\nxHgMlTKlQlGNmtMWy5rPW1vZVmXq29J/3+pClmd83Vu3bhEREUF+fj7R0dG4urqa/V4U9uzZQ1BQ\nEO3atVOPDR8+nGnTpjFmzBgyMzNVn00XFxcA5s+fz/r167Gzs0On0zFkyBCL3e/9jAx89yHHjx+n\nbdu2tGjRoszXDAYDWVlZaiA8evQoBoOBrl27qsIZDw8PAJMXU0VbVoDVeuOscV0wbRUorYqtzUb7\n6lzXnFgiu6zIj1SIksG0jRs3tljQU2qmxhMchBB8//33zJo1i+nTpzN69GiL/X2TWJ56H/i+/fZb\n3nnnHe7cuUObNm345JNPeOihhygoKGD8+PEcPnwYV1dXtVYGsGbNGpYsWQKUmFiHhoZa7wFqiLKy\nPXLkiOo4k5WVVaEPaektKyipkRm/mMz9QrBW0/29NGZXtkVa1a1law2lvdfRQbV1XePBtLVhJ1aV\n65ZnNFBQUEBkZCRZWVmsWLFC1skaAPU68On1etq0acORI0dwc3Nj8eLF/PLLL6xcuZLIyEgKCwtZ\nsGABSUlJLF++nK1bt5KZmUlQUBBHjhzBYDAQEBDA3r17y0xMvp+5mw+pt7c369ato0OHDkyaNMnk\nxQRlHfBr88VkLTFHbfYgVuYEUvpzq4tZrTmpLLusrXpheZRu9VGum56ezowZMwgLCyM0NNQq44Mk\nlqdeqzqVwvUff/yBm5sb7u7u/PbbbwAkJycTExMDQGBgIOPGjQNg9+7dBAcH4+joCEBQUBBJSUmM\nGTPGOg9hBmxsbHB3d+e5557jueeeA0peSCdOnGDZsmW89dZb+Pn5kZ2dTW5urlovVOoKykvJeGJ2\nTYUzxgNpLSlhN0erQFVVpAqNGjWyaLZljUnsVanlVbe/sCp11oqyvD///JNFixZx+PBhNmzYoO72\nSBoG9TrwNWrUiJUrV+Ln58fIkSO5dOkS8fHxAFy6dElVQAK0aNGC69evk52dbZLdNZSmUHt7e9at\nW8fp06fZu3cv/v7+Jj6ka9eu5dq1a7Rr166MD2lNeuQq68kzJ5YWkdja2qoLBCXwKRPYjT8Dc45r\nMp4sYKkWFDDN8mpjMG3pRURFfqRCCPLz8wHTRc2pU6eYNm0ao0ePZsGCBTLLa4DUi8A3aNAgrl27\nZnLMxsaGbdu2sXLlSvbu3cv169d59913+eKLLwgLCwMqbv5sqE2hERERODs7q8/v7OxMYGAggYGB\ngKkPaXx8POHh4djb29O1a1c1GD7yyCMmq3TF69C4dqO0BBQVFVW7J682MN7ms1Z22axZszJ/z0pn\nN8aTxmuiIjUOrJZsvDeXYlNZRCiLpIr6C5Xv/emnn1RnpI8++oj//ve/xMXFodFoanwvdyMhIYG3\n336boqIixo0bR3h4uNmvKbk79SLw7dy5s9zjhw4dwt7eHn9/fwA8PDwYOXIkYWFhuLu7k5OTo8qV\nb9y4QevWrXF3dycjI0M9R05ODn/5y19MzqvX65kzZw6bNm2isLCQb775Bh8fn/teMKNsZVaEra0t\nXl5eeHl5MXbsWHXbLD09nZSUFCIiIkx8SP39/enWrRvNmzc3Ec7cuXNHPaeS9QghzB74rOW8UtUA\nUN3s5m511tLK2GbNmt0XWV51UQRXStuOothUzKPT09NZuXIlv/zyCw8++CDDhg0jNTUVe3t72rdv\nb7b7ysvL4x//+AdpaWm4uLjQv39/goKC8PX1Nds1JVWjXgS+imjTpg2nTp3iwoULPProoxw8eFD1\ntnvqqafYsGEDkZGRJCYm0qVLF+zs7OjXrx9Llixh3rx56PV6duzYwRtvvGFy3vfee4/Lly+rTuiK\nPkin0+Hp6Ul8fDxJSUlMnTpVFcwsXrzYRDATHBx83wtmbGxsaNq0KX369KFPnz6AqQ9pUlISCxcu\nVFfbWq2WgwcPkpOTw3/+8x91eGp1X+jVxVrOK1DzAFBedmMcDCuqs0KJ9VVdDfLmuK6xl6nyOzYY\nDBgMBlq1asWaNWsoKioiLS2N7du3k5GRwXvvvWe2e0pLS6Nbt25qSWXEiBEkJCTIwFcHqNeBz83N\njaioKJ5++mmEEHh6erJ69Wrgf1mXRqPB1dWVdevWAeDp6cn06dPx8/NDCMGMGTPUvjco2fZcu3at\nyfgP5R92QxbMKJTnQ6oICebMmYNWq8XBwYEXXnihjA8p1L5wxhI+l+VhrlaBu3mRGvtr2tjYqM33\nxp6u5sKSWZ4xFW3lXrx4kcmTJ9O9e3eSk5NVwYyySDM3pXUEDz74IOfOnbPItSWVU68DH8CoUaMY\nNWpUmeOOjo5s3Lix3J+ZOHEiEydOLPdrFy5cQK/XM3z4cDIzM+nQoQNxcXG0bt1aCmYqICEhgS+/\n/JLExER69uyJEILff/+d1NRUDhw4UMaHNCAgAK1Wi729fRnhDPxPxGBcLyyNtTIPsLyIRNkiVeqm\nyvBfJSBaIqOuC5+1spVrMBhYv349H3/8McuWLaNHjx4WuZfSKIsUYxqKXqCuU+8D371SkWBm+fLl\nPPzww2zevBknJyeioqKYPHmyGkSlYKYsw4YNY+jQoSYZsouLC0OGDFEtlox9SNesWcPp06dp3Lgx\nvr6+qnDGzc2tjHBG8Vk0DoSKwMHS4hVr1hArmgBflS1S42BY3YzaWlmeUl8uneVdvnyZadOm4enp\nSXJysrrLYg1Km0jn5OTI5vg6ggx8FVCRYCYjIwMHBwecnJwACAkJIS4uDqBGghljNm3axIQJE7h5\n8ybAfS+aUepUlWFnZ4dWq0Wr1TJhwgSEENy+fZtDhw6pKtIrV67wyCOPmPiQKnPR9Ho9eXl56nWU\nF7ixus9cWLOGWNWt3KqMa6qOitRari9QfpYnhGDLli1ER0ezePFi+vbta3XLse7duzNhwgSuXr3K\nAw88wBdffMGCBQusek+SEuq1c4s5MBgMdO7cmXXr1uHv709sbCzp6emsWrVKFcQogpnFixeza9cu\nfvnlF4YOHUp6ejp6vZ6AgAB27NhhUjtUOHfuHOPGjePkyZNq4GvILjPGGAwGLly4wIEDB0hJSVF9\nSH18fLC1tWXDhg1s2bIFX1/fcn0hzTGV3TjwWHJahblcbiry1CzdH6cMALak64txsDXO8n7//Xfe\nfPNNnJ2d0el05XrYWovt27er7Qx/+9vfmDVrlrVvSYIMfPfE0aNHmTRpErdv38bb25vVq1fj7OxM\nQUEBoaGhHD16VBXMeHp6ArB69WqWLl2qCmbGjx9f5rx37txh0KBBfPTRRwQEBHDr1i0A+vXrR0xM\nDD4+PgA89NBDZGdns3btWk6ePMn7778PoIpy6qNopjyEEBw9epSXX36Z3NxcevXqxc8//1ypD6nx\nn5pYYVnLXg0sO7KovC1SRTijtF7UdqN9eRQXF5Ofn4+9vb3a8ymEIDExkX/961/MmzePp59+2upZ\nnuT+QG513gOPPfYYqampZY7fq2BGYcqUKbz66qt06tTJ5LgUzVTMG2+8waRJkwgLC1OzEcWHdN++\nfSxdutTEh7R79+5oNBq1leJehDPWrGtZemSRskWqBHp7e3saN25s0pdpvEVaul5YUyraUr158ybh\n4eEUFRWRmJioDmeVSKqCDHwWpjzRDKAOnnzxxRcpLwmXopmy2NjYsGfPHpOXf0U+pKdPn+bAgQMs\nX76cjIwMnJyc8PPzU+uFrq6uZV7mxsIZe3t7bG1tVbsxS6sXlWBrZ2dntWBbupZXW432FVHeMwsh\n2L9/P7Nnz2bmzJmMGDFCZnmSaiMDn4WpSDSj0+nYvXu32mCfn5+PVqvl2LFjNRbNjBo1ivT0dOzt\n7Rk8eDDR0dHA/S+aAar00lNs1bp27cqkSZMQQlTZh9RgMFBcXExubq7aB6b4axYXF9f6INrSWFNE\nUp1gW51G+7upSI23kY2fOT8/n7lz53Lp0iW2bduGm5ub+R5eUq+RNb46SvPmzdUaX01FMwkJCQwZ\nMgSDwcDQoUP5+9//zrBhw6RoxghjH9KUlBSOHz+Ovb09HTp04OLFi/z222/s37+fRo0aqU325hbO\nGHuKWtLL1FzBtrJxTUowBNQpHcb1y7S0NN5++21ee+01XnrppVpfbNTnxaGkLDLw1VFatGhh0s5Q\nE9GMMW+99RYajYZXXnlFimYqwWAwsHr1av7v//6PgIAAWrRowcWLF8v4kDo6OpZpCyg9Q06pFVY1\ncFlrMC2YZnmWUGyWzgqV4cc//vgjycnJdOvWjd27d/Pjjz8SGxtLmzZtzHIfcnHYsJBbnXUUJehB\nzUUzCvn5+WzdupWEhARAimYqIysrizVr1rBz5078/PyAyn1I/f396d69Ox06dDAZ3KtYiEHZsTnl\nBUJrjQ6y1paqUrcrLCzE1tZW7YFs3LgxWVlZbNy4kfPnz9OxY0fmzZtHr1697rq4uxcUIwVbW1u0\nWi1XrlwBpA1hfUUGvnpCRaKZhIQEHnroIYQQjB8/nrFjx+Ll5aV+XYpmyqddu3YcOHCgjHCmtA9p\nUVERx44dIyUlhSVLlvDTTz/h7Oxs4kPq7OxcZjpF6XqXjY0NhYXAb0mqAAAOHElEQVSFCCEs6voC\n1hXOlOc4U1xcTGJiIhcvXuSbb77Bw8ODEydOkJqayo8//mjWe5KLw4aBDHz1hIpEM1Dygpk0aRKt\nWrVi9uzZ6vHacpoxpj7NH6tKtuXg4IC/vz/+/v68/vrr1fIhNRgMFBUVcePGDRo3bgyULDiKi4vV\nKeP1VThTejah8pxnz57ljTfeYOjQoSQlJakLMD8/PzXzvlfk4lCiIANfPUev1zN+/HhatGihbtko\n1GQ0U3nI+WPV8yHt0KEDp0+fxsHBga1bt5r0FiptE0qjeG0LZ+palqfX64mNjWXr1q2sWLGCLl26\n1Pq168riUGJ9pLilnpOZmUn79u3RaDRqf2CPHj34+OOPa1U0AyV1j5iYGL788ksAoqOjuXXrFhER\nEeZ7wPsQvV5PTEwMc+fOpW/fvgDl+pA2atSo1oUz1szyDAYD+fn5gKm9W2ZmJlOmTKF3795ERERY\n9J6g8sVhbdgQSuoeMvBJao3169ezf/9+Vq5cCUB8fDw//PBDmZdJQ+fYsWO89tprrFq1Cq1WC1Ts\nQ9q1a1f8/f0JCAigbdu2JsIZpa0CqiacsbRiU6H0kNjGjRur44M+/fRTPvvsM6KioggICLDI/ZTG\nkotDSd1ABj5JrfH555/z/fffs3z5cqAk8O3Zs4fY2Fgr31ndQ/G7rOzrhYWFHDlyhJSUFFJSUsjK\nyirXhxQwCYSlhTPGjjPWyPKMRzUpWV52djZTp07F29ub+fPn06RJE4vdk0Qia3ySWqOm88cKCwsJ\nDg4mMzMTOzs7QkNDCQ8P5/r164wZM4bz58/j6enJ559/zgMPPADAggULWLduHQ4ODuh0OoKCgmr9\nuczB3bYmbWxsaNKkCY8//jiPP/44wD35kN66dUtViNrZ2ZlkiOYWzhhneUqbghCCzZs38+GHH7Jk\nyRJ69+4tLcckFkdmfJJa4/bt2/j4+JCWlsYDDzzAgAEDWLBgAX369KnSzxcWFvLDDz/Qv39/CgsL\n6dGjB5988glRUVE8/vjjvPLKK6xatYpTp04RFRXFvn37iIiIYN++fVy5coW+ffty6tQpi7YCWBtj\nH9KUlBTVh9THx4dff/2VY8eO8cMPP9CkSRMTx5Ti4mKTAb61KZxRGvD1ej2Ojo7q7+PatWtMnz6d\n1q1bs2jRIpo3b17ja0kk94IMfJJapTbnj40YMYKwsDDCwsI4ceIEzZs3Jzc3F39/f86dO8ecOXNw\ndXVl8uTJAAwfPpw333yTJ554orYe575DCMG2bdsICwvDw8MDNzc3Ll++XKEPaW0KZ8C0Ab9JkyZq\nlrd9+3Z0Oh3//Oc/CQwMlFmexKo0nKWxxCIEBwcTHBxc4/MoW3pxcXFcv35dzQ5atmzJ77//DpTU\niRRTb5BNxFAylHXGjBnExcWp7RTGPqTx8fGEh4erxt1KMHzkkUeA/9UKSzvO3G3CghCCgoIC9Hq9\nSQN+bm4ub7/9NgBJSUnqFrVEYk1k4JPUOe7cucPIkSN57733aNmyZaWNwrKJ2BQXFxdOnTpl8rnY\n2tri5eWFl5cXY8eOVYNUeno6KSkpRERE8Ouvv5bxIVWEM4poxnjCgnEg1Ov13LlzBwcHB5o1a6Zm\neXv27GHu3LmEh4cTEhJitixv06ZNTJgwwcTbVhpLSypDBj5JnaKwsJARI0YQHBzM2LFjgZIsLy8v\nDycnJ3Jzc9Who6XFNFevXr2rmEan0/Hpp59y4sSJeimagbKLgdLY2NjQtGlT+vTpo9Zf78WH9M6d\nO6r8387Ojv3791NUVISPjw/Lli3j+vXrJCQkmNW4+dy5c3zwwQcmx3Q6HZ6ensTHx5OUlMTUqVNV\nY+nFixebGEsHBwdLY+mGiJBI6gh5eXkiMDBQLFq0yOR4aGioiIuLE0IIsXLlSjF+/HghhBB79uwR\n/fr1E3q9Xly6dEl4eHiIvLy8Cs//3XffCV9fX+Hj4yOEEOLll18Wq1atEkIIERsbK6ZMmSKEEGLv\n3r2id+/ewmAwiOzsbNGxY0dRVFRU689b1/nzzz/FwYMHRUxMjBgzZozo0aOHGDx4sHjnnXeETqcT\njz76qNi2bZu4efOmuHHjhoiJiRE9e/YUjo6Owt3dXbz00kvi3//+tzhx4oRZ7q+goED07t1bnDlz\nRjRr1kw93rdvX3H8+HH1/93d3YUQQqxZs0ZMnz5dPT5t2jTx2WefmeXeJHUbmfFJ6gxpaWns3buX\nCxcusHbtWqBEsKLT6RgzZgyLFi2iXbt2rF+/HoC+ffsyYMAAtFotdnZ2fPjhhzRt2rTccyuKwtjY\nWLXRODk5maioKABGjx6Nv78/UVFR7Nq1i1GjRqnT3Dt37kxqamqDE82U50P622+/8frrr5OcnMyg\nQYOYP38+Xl5e+Pr6cvLkSVxcXMjIyODmzZukpKSQmppKTk6OWSzIpkyZwquvvkqnTp1Mjktjacnd\nkIFPUmfo16+fKqgoTWJiYrnHZ8+ebeKtWB5CCEJDQ9HpdCYvRCmaqR42NjaEh4fj6OjI+fPncXFx\nUX1Id+zYgZOTE19//bXaH9ilS5cqj8yqiIqMpWfOnAnAiy++qG63GiONpSWVIQOfpN7zwQcf0KtX\nL5588kkyMzPV41I0U31WrFihil6g5HPSarWq9VptU5GxtE6nY/fu3eoCJT8/H61Wy7Fjx6SxtOSu\nWMasTyKxIpmZmXz66ad4e3szcOBAzp07x5NPPomzszN5eXkANRLN5Ofn89prr+Hl5YWHhwe5ublc\nv36doKAgNBoNTz/9NH/88Yf6/QsWLKBTp074+PiwY8cOMz21eTAOetZkxowZnDt3jjNnznDmzBma\nNm2qTrpQpo4AZaaObNu2jYKCAm7fvs2OHTvo37+/lZ9EYhWsXGOUSCxKZmam6NKlixCi9kQz48eP\nF3PmzDE5JoUzlqV58+bqf+fn54tRo0aJjh07il69eomff/5Z/dpHH30kvL29RadOndTfvaThIQOf\npEFx/vx5VdV59epVERgYKDp27CgGDx4srl27pn5fZGSk0Gg0QqvViu3bt1d4vuzsbNG5c2dhMBhM\njnt4eIibN28KIYS4ceOG6NChgxBCiHfffVdER0er3xcSEiK+++67Wns+iURyd2SNT9KgaNu2LceP\nHwfA1dW1RqIZgJMnT2JjY8OAAQPIzs7G39+f2NhYKZyRSOowssYnkdSAnJwcOnbsSFJSEqdPn8bN\nzY158+ZJ4YxEUoeRgU8iqQGtWrXCyckJBwcHbG1tee6558jIyKg14QzAJ598go+PDxqNhpEjR5KX\nl1dvxTMSiSWQgU8iqQG9evVi3759ZGVlAZCQkECPHj3o378/GzduBGDDhg0MHDgQgKeeeopNmzZh\nMBjIzs7m8OHDdO/evcLzX7lyhcjISFJSUjh79iytW7cmJiaGGTNm8Ne//pWzZ88SEhLC3LlzAdi3\nbx87duzgzJkz7Ny5k6lTp1JcXGzeD0Eiuc+QgU8iqQEtWrQgLi6OZ599ls6dO3Pt2jVmzpyJTqdj\n48aNaDQatmzZwuLFiwFTt5mBAwdW6jYDJdugeXl53Lp1CyjJGBs1akRycjLPP/88UOI6k5CQAFCh\n60xdQa/XM2vWLDQaDW3btuXEiRNAibH0Cy+8gEaj4YknnjDpt1yzZo3aK/jxxx9b58Yl9Qtrq2sk\nEknlLFy4UDg7O4uJEyeKZ555RhQUFJh4UwohRKtWrYQQQrzyyisiPj5ePR4WFiY2b95s0futjMjI\nSDFhwgS1hUNRw86bN0+88847QgghEhMTxbBhw4QQJSpcjUYj8vPzxe3bt4W3t7fIycmxzs1L6g0y\n45NI6jC5ubl8/fXXpKSkMHjwYM6fP8+uXbvuS/HMn3/+ydq1a4mJiVHn9Smjiowz2MDAQNLS0gDY\nvXs3wcHBODo64uTkRFBQEElJSdZ5AEm9QQY+iaQOs3PnTry9vdFoNIwYMQKdTseKFStqJJ45fPiw\niVXXvQhlDh06hK+vLxqNhqlTp5brl1maCxcuoNfrGT58ON7e3jzzzDPk5OQA0lhaYllk4JNI6jDt\n27dn//79ajA6ePAg3t7eDBgw4J7EM2+++SaBgYEmgao6Qhm9Xg/ASy+9xOeff87Zs2e5evUqX331\nlXq+QYMG4evra/KnW7duXL16lYcffpjNmzdz5swZBg4cyOTJk9Wfk8bSEkshG9glkjqMr68vr7/+\nOj179sTOzg5fX19WrVpFQUHBPY1qev/995kyZQpDhw5Vj1VnPFNKSgoPP/wwTZs2VRvxn3/+eb75\n5htCQkKAio2lMzIycHBwwMnJCYCQkBDi4uIApLG0xKLIjE8iqeNMnjyZs2fPcvr0adavX4+Tk5Pq\nOqOMBHJxcVG/f/bs2WRkZHDq1CmGDBlS5nyltyUrc5kpb5sxOzvbZFvS1dW1StuPHTt25OrVqxw6\ndAiAb7/9lp49ewJIY2mJRZEZn0TSwLkXocy9bD/a2toSHx/PpEmTuH37Nt7e3qxevRooma8XGhqK\nRqPB1dWVdevWAeDp6cn06dPx8/NDCMGMGTPw8PCo/kNKJEbIwCeRNHBatmxJXl4eTk5OVRLKlHfc\n3d29Std67LHHyu0rdHR0VGuWpZk4cWKNB9pKJMbIrU6JpIFTXaGMp6cnubm5nD17tszPSCT3Azai\nKjpkiURSL5gzZw5fffUVP/30E1qtlqVLl+Lt7c2YMWPIzMxUhTJKzXD+/PmsX78eOzs7dDqdWjM8\nePAgYWFh5OXlMXjwYKKjo9WePImkriMDn0QikUgaFHKrUyKRSCQNChn4JBKJRNKgkIFPIpFIJA0K\nGfgkEolE0qD4f8dRvT8AD1ypAAAAAElFTkSuQmCC\n", |
"text": [ |
"<matplotlib.figure.Figure at 0x7fe4581e1e50>" |
] |
} |
], |
"prompt_number": 4 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Pro lep\u0161\u00ed zobrazen\u00ed jednotliv\u00fdch zkreslen\u00ed vykresl\u00edme i 2D pr\u016fm\u011bt dat." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"plt.plot(x, y,'.')" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"metadata": {}, |
"output_type": "pyout", |
"prompt_number": 5, |
"text": [ |
"[<matplotlib.lines.Line2D at 0x7fe45330c850>]" |
] |
}, |
{ |
"metadata": {}, |
"output_type": "display_data", |
"png": "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\n", |
"text": [ |
"<matplotlib.figure.Figure at 0x7fe458176d10>" |
] |
} |
], |
"prompt_number": 5 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Z grafu je vid\u011bt, \u017ee se uplat\u0148uj\u00ed oba zn\u00e1m\u00e9 deforma\u010dn\u00ed jevy - soft-iron a hard-iron. Pokus\u00edme se je proto kompenzovat. Nejd\u0159\u00edve zkus\u00edme odstranit Hard-iron efekty zp\u016fsobuj\u00edc\u00ed offsety." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"xoffset = (min(x) + max(x))/2\n", |
"print xoffset" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"34.675\n" |
] |
} |
], |
"prompt_number": 37 |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"yoffset = (min(y) + max(y))/2\n", |
"print yoffset" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"-53.29\n" |
] |
} |
], |
"prompt_number": 39 |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"plt.plot(x-xoffset, y-yoffset,'.')" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"metadata": {}, |
"output_type": "pyout", |
"prompt_number": 41, |
"text": [ |
"[<matplotlib.lines.Line2D at 0x7f5bf860a410>]" |
] |
}, |
{ |
"metadata": {}, |
"output_type": "display_data", |
"png": "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\nDL4AAAAASUVORK5CYII=\n", |
"text": [ |
"<matplotlib.figure.Figure at 0x7f5bf86a8fd0>" |
] |
} |
], |
"prompt_number": 41 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Interaktivn\u00ed test, kter\u00fd vypisuje aktua\u00e1ln\u00ed azimut. Lze si na n\u011bm vyzkou\u0161et funkci kompasu. Je vid\u011bt, \u017ee p\u0159i vzniku v\u011bt\u0161\u00edho n\u00e1klonu, dvouos\u00fd kompas za\u010dne ukazovat p\u0159esn\u011b opa\u010dn\u00fd sm\u011br." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"try:\n", |
"\n", |
" for n in range(MEASUREMENTS):\n", |
" (x, y, z) = mag_sensor.axes()\n", |
" phi = np.arctan2(x-xoffset, y-yoffset)\n", |
" clear_output()\n", |
" print ((phi*180)/pi+180)\n", |
" time.sleep(0.2)\n", |
" sys.stdout.flush()\n", |
"except KeyboardInterrupt:\n", |
" sys.exit(0)" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"83.1246570299\n" |
] |
} |
], |
"prompt_number": 44 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Vid\u00edme, \u017ee po tomto zp\u016fsobu korekce m\u00e1 vykreslen\u00fd \u00fatvar od kru\u017enice je\u0161t\u011b v\u00fdznamn\u00e9 odchylky. Nyn\u00ed pot\u0159ebujeme kompenzovat soft-iron efekty. K tomu mus\u00edme pracovat s nam\u011b\u0159en\u00fdmi daty, jako s elipsou a naj\u00edt jej\u00ed hlavn\u00ed a vedlej\u0161\u00ed poloosu. Postup je trochu komplikovan\u011bj\u0161\u00ed, proto adoptujeme k\u00f3d z [PaparazziUAV](http://wiki.paparazziuav.org/wiki/ImuCalibration). Ten pomoc\u00ed fitov\u00e1n\u00ed elipsoindu najde korek\u010dn\u00ed parametry citlivosti pro jednotliv\u00e9 osy. Zanedb\u00e1v\u00e1 ale p\u0159\u00edpadnou rotaci elipsoidu popsanou v \u010dl\u00e1nku [Compensating for Tilt, Hard-Iron, and Soft-Iron Effects](http://www.sensorsmag.com/sensors/motion-velocity-displacement/compensating-tilt-hard-iron-and-soft-iron-effects-6475)\n", |
"Tento p\u0159\u00edstup je tak\u00e9 v\u00fdhodn\u00fd v tom, \u017ee vyu\u017e\u00edv\u00e1 v\u0161echny 3 osy magnetometru. Proto nen\u00ed pot\u0159eba pro kompenzaci n\u00e1klonu pou\u017e\u00edvat akcelerometr. Kompenzace akcererometrem by ale pozd\u011bji m\u011bla b\u00fdt vyu\u017eita ke korekci rotace os magnetometru v\u016f\u010di vn\u011bj\u0161\u00edmu pouzdru.\n", |
"\n", |
"Zpracov\u00e1n\u00ed dat 3D\n", |
"-----------\n", |
"\n", |
"K tomu pou\u017eijeme datov\u00fd set, kde jsou body rozprost\u0159en\u00e9 po cel\u00e9m povrchu koule. " |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"data = np.load('./calibration_data_3Dset.npz')\n", |
"list_meas = data['data']\n", |
"x = list_meas[:, 0]\n", |
"y = list_meas[:, 1]\n", |
"z = list_meas[:, 2]" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 1 |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"from mpl_toolkits.mplot3d.axes3d import Axes3D\n", |
"#%pylab qt ## po odkomentovani a zakomentovani nasledujiciho radku udela vystup do QT okna. \n", |
"%pylab inline\n", |
"fig = plt.figure()\n", |
"ax = Axes3D(fig)\n", |
"p = ax.scatter(x,y,z)" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"Populating the interactive namespace from numpy and matplotlib\n" |
] |
}, |
{ |
"metadata": {}, |
"output_type": "display_data", |
"png": "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\ndK1KAERdWwAAAABJRU5ErkJggg==\n", |
"text": [ |
"<matplotlib.figure.Figure at 0x7f5bf86dd450>" |
] |
} |
], |
"prompt_number": 23 |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"import scipy\n", |
"from scipy import optimize\n", |
"import calibration_utils\n", |
"\n", |
"sensor_ref = 1.\n", |
"sensor_res = 0.73\n", |
"noise_window = 10\n", |
"noise_threshold = 1000" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 3 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Uprav\u00edme strukuturu pole m\u011b\u0159en\u00fdch hodnot do sn\u00e1ze indexovateln\u00e9ho form\u00e1tu." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"measurements = np.array(list_meas)" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [], |
"prompt_number": 4 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Spo\u010d\u00edt\u00e1me medi\u00e1n magnitudy zm\u011b\u0159en\u00fdch vektor\u016f. A nastav\u00edme podle n\u011bj rozhodovac\u00ed \u00farove\u0148 pro filtraci a ofiltrujeme nam\u011b\u0159en\u00e1 kalibra\u010dn\u00ed data. " |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"meas_median=scipy.median(scipy.array([scipy.linalg.norm(v) for v in measurements]))\n", |
"noise_threshold = meas_median * 0.8\n", |
"print noise_threshold\n", |
"flt_meas, flt_idx = calibration_utils.filter_meas(measurements, noise_window, noise_threshold)\n", |
"print(\"remaining \"+str(len(flt_meas))+\" after filtering\")" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"460.895326306\n", |
"remaining 346 after filtering\n" |
] |
} |
], |
"prompt_number": 5 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Spo\u010d\u00edt\u00e1me odhad elipsoidu z nam\u011b\u0159en\u00fdch minim\u00e1ln\u00edch a maxim\u00e1ln\u00edch hodnot." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
" p0 = calibration_utils.get_min_max_guess(flt_meas, sensor_ref)\n", |
" cp0, np0 = calibration_utils.scale_measurements(flt_meas, p0)\n", |
" print(\"initial guess : avg \"+str(np0.mean())+\" std \"+str(np0.std()))\n", |
"\n", |
" def err_func(p, meas, y):\n", |
" cp, np = calibration_utils.scale_measurements(meas, p)\n", |
" err = y*scipy.ones(len(meas)) - np\n", |
" return err" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"initial guess : avg 0.999920050427 std 0.0671243703038\n" |
] |
} |
], |
"prompt_number": 6 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Optimalizujeme odhad fitov\u00e1n\u00edm elipsoidu." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
" p1, cov, info, msg, success = optimize.leastsq(err_func, p0[:], args=(flt_meas, sensor_ref), full_output=1)\n", |
" if not success in [1, 2, 3, 4]:\n", |
" print(\"Optimization error: \", msg)\n", |
" print(\"Please try to provide a clean logfile.\")\n", |
" sys.exit(1)\n", |
"\n", |
" cp1, np1 = calibration_utils.scale_measurements(flt_meas, p1)\n", |
" print(\"optimized guess : avg \"+str(np1.mean())+\" std \"+str(np1.std()))" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"optimized guess : avg 0.999137645687 std 0.0293532050592\n" |
] |
} |
], |
"prompt_number": 7 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Vykresl\u00edme v\u00fdsledek filtrace a fitov\u00e1n\u00ed. " |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"%pylab qt\n", |
"#%pylab inline\n", |
"calibration_utils.plot_results(False, measurements, flt_idx, flt_meas, cp0, np0, cp1, np1, sensor_ref)\n", |
"calibration_utils.plot_mag_3d(flt_meas, cp1, p1)" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"Populating the interactive namespace from numpy and matplotlib\n" |
] |
}, |
{ |
"output_type": "stream", |
"stream": "stderr", |
"text": [ |
"WARNING: pylab import has clobbered these variables: ['cov', 'info']\n", |
"`%pylab --no-import-all` prevents importing * from pylab and numpy\n" |
] |
} |
], |
"prompt_number": 8 |
}, |
{ |
"cell_type": "markdown", |
"metadata": {}, |
"source": [ |
"Nyn\u00ed m\u016f\u017eeme z\u00edskan\u00e9 scale faktory a offsety pou\u017e\u00edt na kompenzaci libovoln\u00e9ho m\u011b\u0159en\u00ed a n\u00e1sledn\u011b vypo\u010d\u00edtat polohov\u00e9 \u00fahly platformy ve sf\u00e9rick\u00fdch sou\u0159adnic\u00edch." |
] |
}, |
{ |
"cell_type": "code", |
"collapsed": false, |
"input": [ |
"for n in range(MEASUREMENTS):\n", |
" m = mag_sensor.axes()\n", |
" sm = (m - p1[0:3])*p1[3:6]\n", |
" r = norm(sm)\n", |
" theta = np.arccos(sm[2]/r)\n", |
" phi = np.arctan2(sm[1],sm[0])\n", |
" clear_output()\n", |
" print (r,(theta*180)/pi,(phi*180)/pi)\n", |
" sys.stdout.flush()" |
], |
"language": "python", |
"metadata": {}, |
"outputs": [ |
{ |
"output_type": "stream", |
"stream": "stdout", |
"text": [ |
"(1.0033330291141624, 159.16410600293204, 61.66914855382452)\n" |
] |
} |
], |
"prompt_number": 35 |
} |
], |
"metadata": {} |
} |
] |
} |
/Modules/Sensors/MAG01A/SW/Python/calibration_data_2Dset.npz |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/SW/Python/calibration_utils.py |
---|
0,0 → 1,282 |
# Copyright (C) 2010 Antoine Drouin |
# |
# This file is part of Paparazzi. |
# |
# Paparazzi is free software; you can redistribute it and/or modify |
# it under the terms of the GNU General Public License as published by |
# the Free Software Foundation; either version 2, or (at your option) |
# any later version. |
# |
# Paparazzi is distributed in the hope that it will be useful, |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
# GNU General Public License for more details. |
# |
# You should have received a copy of the GNU General Public License |
# along with Paparazzi; see the file COPYING. If not, write to |
# the Free Software Foundation, 59 Temple Place - Suite 330, |
# Boston, MA 02111-1307, USA. |
# |
from __future__ import print_function, division |
import re |
import numpy as np |
from numpy import sin, cos |
from scipy import linalg, stats |
import matplotlib |
import matplotlib.pyplot as plt |
from mpl_toolkits.mplot3d import Axes3D |
def get_ids_in_log(filename): |
"""Returns available ac_id from a log.""" |
f = open(filename, 'r') |
ids = [] |
pattern = re.compile("\S+ (\S+)") |
while True: |
line = f.readline().strip() |
if line == '': |
break |
m = re.match(pattern, line) |
if m: |
ac_id = m.group(1) |
if not ac_id in ids: |
ids.append(ac_id) |
return ids |
def read_log(ac_id, filename, sensor): |
"""Extracts raw sensor measurements from a log.""" |
f = open(filename, 'r') |
pattern = re.compile("(\S+) "+ac_id+" IMU_"+sensor+"_RAW (\S+) (\S+) (\S+)") |
list_meas = [] |
while True: |
line = f.readline().strip() |
if line == '': |
break |
m = re.match(pattern, line) |
if m: |
list_meas.append([float(m.group(2)), float(m.group(3)), float(m.group(4))]) |
return np.array(list_meas) |
def read_log_mag_current(ac_id, filename): |
"""Extracts raw magnetometer and current measurements from a log.""" |
f = open(filename, 'r') |
pattern = re.compile("(\S+) "+ac_id+" IMU_MAG_CURRENT_CALIBRATION (\S+) (\S+) (\S+) (\S+)") |
list_meas = [] |
while True: |
line = f.readline().strip() |
if line == '': |
break |
m = re.match(pattern, line) |
if m: |
list_meas.append([float(m.group(2)), float(m.group(3)), float(m.group(4)), float(m.group(5))]) |
return np.array(list_meas) |
def filter_meas(meas, window_size, noise_threshold): |
"""Select only non-noisy data.""" |
filtered_meas = [] |
filtered_idx = [] |
for i in range(window_size, len(meas)-window_size): |
noise = meas[i-window_size:i+window_size, :].std(axis=0) |
if linalg.norm(noise) < noise_threshold: |
filtered_meas.append(meas[i, :]) |
filtered_idx.append(i) |
return np.array(filtered_meas), filtered_idx |
def get_min_max_guess(meas, scale): |
"""Initial boundary based calibration.""" |
max_meas = meas[:, :].max(axis=0) |
min_meas = meas[:, :].min(axis=0) |
n = (max_meas + min_meas) / 2 |
sf = 2*scale/(max_meas - min_meas) |
return np.array([n[0], n[1], n[2], sf[0], sf[1], sf[2]]) |
def scale_measurements(meas, p): |
"""Scale the set of measurements.""" |
l_comp = [] |
l_norm = [] |
for m in meas[:, ]: |
sm = (m - p[0:3])*p[3:6] |
l_comp.append(sm) |
l_norm.append(linalg.norm(sm)) |
return np.array(l_comp), np.array(l_norm) |
def estimate_mag_current_relation(meas): |
"""Calculate linear coefficient of magnetometer-current relation.""" |
coefficient = [] |
for i in range(0, 3): |
gradient, intercept, r_value, p_value, std_err = stats.linregress(meas[:, 3], meas[:, i]) |
coefficient.append(gradient) |
return coefficient |
def print_xml(p, sensor, res): |
"""Print xml for airframe file.""" |
print("") |
print("<define name=\""+sensor+"_X_NEUTRAL\" value=\""+str(int(round(p[0])))+"\"/>") |
print("<define name=\""+sensor+"_Y_NEUTRAL\" value=\""+str(int(round(p[1])))+"\"/>") |
print("<define name=\""+sensor+"_Z_NEUTRAL\" value=\""+str(int(round(p[2])))+"\"/>") |
print("<define name=\""+sensor+"_X_SENS\" value=\""+str(p[3]*2**res)+"\" integer=\"16\"/>") |
print("<define name=\""+sensor+"_Y_SENS\" value=\""+str(p[4]*2**res)+"\" integer=\"16\"/>") |
print("<define name=\""+sensor+"_Z_SENS\" value=\""+str(p[5]*2**res)+"\" integer=\"16\"/>") |
def plot_results(block, measurements, flt_idx, flt_meas, cp0, np0, cp1, np1, sensor_ref): |
"""Plot calibration results in 2D graphs.""" |
plt.subplot(3, 1, 1) |
plt.plot(measurements[:, 0]) |
plt.plot(measurements[:, 1]) |
plt.plot(measurements[:, 2]) |
plt.plot(flt_idx, flt_meas[:, 0], 'ro') |
plt.plot(flt_idx, flt_meas[:, 1], 'ro') |
plt.plot(flt_idx, flt_meas[:, 2], 'ro') |
plt.xlabel('sample number') |
plt.ylabel('miligauss') |
plt.title('Raw sensors') |
plt.subplot(3, 2, 3) |
plt.plot(cp0[:, 0]) |
plt.plot(cp0[:, 1]) |
plt.plot(cp0[:, 2]) |
plt.plot(-sensor_ref*np.ones(len(flt_meas))) |
plt.plot(sensor_ref*np.ones(len(flt_meas))) |
plt.xlabel('sample number') |
plt.ylabel('-') |
plt.title('First approximation') |
plt.subplot(3, 2, 4) |
plt.plot(np0) |
plt.plot(sensor_ref*np.ones(len(flt_meas))) |
plt.xlabel('sample number') |
plt.ylabel('-') |
plt.title('magnitude') |
plt.subplot(3, 2, 5) |
plt.plot(cp1[:, 0]) |
plt.plot(cp1[:, 1]) |
plt.plot(cp1[:, 2]) |
plt.plot(-sensor_ref*np.ones(len(flt_meas))) |
plt.plot(sensor_ref*np.ones(len(flt_meas))) |
plt.xlabel('sample number') |
plt.ylabel('-') |
plt.title('separate axes') |
plt.subplot(3, 2, 6) |
plt.plot(np1) |
plt.plot(sensor_ref*np.ones(len(flt_meas))) |
plt.xlabel('sample number') |
plt.ylabel('-') |
plt.title('magnitude') |
# if we want to have another plot we only draw the figure (non-blocking) |
# also in matplotlib before 1.0.0 there is only one call to show possible |
if block: |
plt.show() |
else: |
plt.draw() |
def plot_mag_3d(measured, calibrated, p): |
"""Plot magnetometer measurements on 3D sphere.""" |
# set up points for sphere and ellipsoid wireframes |
u = np.r_[0:2 * np.pi:20j] |
v = np.r_[0:np.pi:20j] |
wx = np.outer(cos(u), sin(v)) |
wy = np.outer(sin(u), sin(v)) |
wz = np.outer(np.ones(np.size(u)), cos(v)) |
ex = p[0] * np.ones(np.size(u)) + np.outer(cos(u), sin(v)) / p[3] |
ey = p[1] * np.ones(np.size(u)) + np.outer(sin(u), sin(v)) / p[4] |
ez = p[2] * np.ones(np.size(u)) + np.outer(np.ones(np.size(u)), cos(v)) / p[5] |
# measurements |
mx = measured[:, 0] |
my = measured[:, 1] |
mz = measured[:, 2] |
# calibrated values |
cx = calibrated[:, 0] |
cy = calibrated[:, 1] |
cz = calibrated[:, 2] |
# axes size |
left = 0.02 |
bottom = 0.05 |
width = 0.46 |
height = 0.9 |
rect_l = [left, bottom, width, height] |
rect_r = [left/2+0.5, bottom, width, height] |
fig = plt.figure(figsize=plt.figaspect(0.5)) |
if matplotlib.__version__.startswith('0'): |
ax = Axes3D(fig, rect=rect_l) |
else: |
ax = fig.add_subplot(1, 2, 1, position=rect_l, projection='3d') |
# plot measurements |
ax.scatter(mx, my, mz) |
plt.hold(True) |
# plot line from center to ellipsoid center |
ax.plot([0.0, p[0]], [0.0, p[1]], [0.0, p[2]], color='black', marker='+', markersize=10) |
# plot ellipsoid |
ax.plot_wireframe(ex, ey, ez, color='grey', alpha=0.5) |
# Create cubic bounding box to simulate equal aspect ratio |
max_range = np.array([mx.max() - mx.min(), my.max() - my.min(), mz.max() - mz.min()]).max() |
Xb = 0.5 * max_range * np.mgrid[-1:2:2, -1:2:2, -1:2:2][0].flatten() + 0.5 * (mx.max() + mx.min()) |
Yb = 0.5 * max_range * np.mgrid[-1:2:2, -1:2:2, -1:2:2][1].flatten() + 0.5 * (my.max() + my.min()) |
Zb = 0.5 * max_range * np.mgrid[-1:2:2, -1:2:2, -1:2:2][2].flatten() + 0.5 * (mz.max() + mz.min()) |
# add the fake bounding box: |
for xb, yb, zb in zip(Xb, Yb, Zb): |
ax.plot([xb], [yb], [zb], 'w') |
ax.set_title('MAG raw with fitted ellipsoid and center offset') |
ax.set_xlabel('x') |
ax.set_ylabel('y') |
ax.set_zlabel('z') |
if matplotlib.__version__.startswith('0'): |
ax = Axes3D(fig, rect=rect_r) |
else: |
ax = fig.add_subplot(1, 2, 2, position=rect_r, projection='3d') |
ax.plot_wireframe(wx, wy, wz, color='grey', alpha=0.5) |
plt.hold(True) |
ax.scatter(cx, cy, cz) |
ax.set_title('MAG calibrated on unit sphere') |
ax.set_xlabel('x') |
ax.set_ylabel('y') |
ax.set_zlabel('z') |
ax.set_xlim3d(-1, 1) |
ax.set_ylim3d(-1, 1) |
ax.set_zlim3d(-1, 1) |
plt.show() |
def read_turntable_log(ac_id, tt_id, filename, _min, _max): |
""" Read a turntable log. |
return an array which first column is turnatble and next 3 are gyro |
""" |
f = open(filename, 'r') |
pattern_g = re.compile("(\S+) "+str(ac_id)+" IMU_GYRO_RAW (\S+) (\S+) (\S+)") |
pattern_t = re.compile("(\S+) "+str(tt_id)+" IMU_TURNTABLE (\S+)") |
last_tt = None |
list_tt = [] |
while True: |
line = f.readline().strip() |
if line == '': |
break |
m = re.match(pattern_t, line) |
if m: |
last_tt = float(m.group(2)) |
m = re.match(pattern_g, line) |
if m and last_tt and _min < last_tt < _max: |
list_tt.append([last_tt, float(m.group(2)), float(m.group(3)), float(m.group(4))]) |
return np.array(list_tt) |
/Modules/Sensors/MAG01A/SW/Python/calibration_data_3Dset.npz |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.c |
---|
0,0 → 1,42 |
#include "main.h" |
#include "HMC5883L.h" |
#include <math.h> |
void main() |
{ |
setup_adc_ports(NO_ANALOGS|VSS_VDD); |
setup_adc(ADC_CLOCK_DIV_2); |
setup_spi(SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_ccp1(CCP_OFF); |
setup_comparator(NC_NC_NC_NC); |
printf("Magnetometr: \r\n",); |
printf("(c)mlab.cz kaklik 2013: \r\n",); |
printf("X, Y, Z \r\n",); |
// Init the HMC5883L. Set Mode register for |
// continuous measurements. |
hmc5883l_write_reg(HMC5883L_CFG_A_REG, 0x18); // no average, maximal update range |
hmc5883l_write_reg(HMC5883L_CFG_B_REG, 0x00); // minimal range |
hmc5883l_write_reg(HMC5883L_MODE_REG, 0x00); |
// Continuously read and display the x,y,z results. |
// Wait at least 67 ms between reads, re the HMC5883L data sheet. |
while(TRUE) |
{ |
hmc5883l_read_data(); |
printf("%6Ld %6Ld %6Ld \n\r", compass.x, compass.y, compass.z); |
delay_ms(100); |
} |
} |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.cof |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.err |
---|
0,0 → 1,2 |
Memory usage: ROM=9% RAM=3% - 6% |
0 Errors, 0 Warnings. |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.esym |
---|
0,0 → 1,601 |
D G "__PCM__" 0 44 ""4.106"" |
D G "__DEVICE__" 0 44 "887" |
D G "__DATE__" 0 44 ""25-VIII-13"" |
D G "__TIME__" 0 44 ""18:55:43"" "Standard Header file for the PIC16F887 device ////////////////" |
d G "PIN_A0" 2 20 "40" |
d G "PIN_A1" 2 21 "41" |
d G "PIN_A2" 2 22 "42" |
d G "PIN_A3" 2 23 "43" |
d G "PIN_A4" 2 24 "44" |
d G "PIN_A5" 2 25 "45" |
d G "PIN_A6" 2 26 "46" |
d G "PIN_A7" 2 27 "47" |
d G "PIN_B0" 2 29 "48" |
d G "PIN_B1" 2 30 "49" |
d G "PIN_B2" 2 31 "50" |
d G "PIN_B3" 2 32 "51" |
d G "PIN_B4" 2 33 "52" |
d G "PIN_B5" 2 34 "53" |
d G "PIN_B6" 2 35 "54" |
d G "PIN_B7" 2 36 "55" |
d G "PIN_C0" 2 38 "56" |
d G "PIN_C1" 2 39 "57" |
d G "PIN_C2" 2 40 "58" |
d G "PIN_C3" 2 41 "59" |
d G "PIN_C4" 2 42 "60" |
d G "PIN_C5" 2 43 "61" |
d G "PIN_C6" 2 44 "62" |
d G "PIN_C7" 2 45 "63" |
d G "PIN_D0" 2 47 "64" |
d G "PIN_D1" 2 48 "65" |
d G "PIN_D2" 2 49 "66" |
d G "PIN_D3" 2 50 "67" |
d G "PIN_D4" 2 51 "68" |
d G "PIN_D5" 2 52 "69" |
d G "PIN_D6" 2 53 "70" |
d G "PIN_D7" 2 54 "71" |
d G "PIN_E0" 2 56 "72" |
d G "PIN_E1" 2 57 "73" |
d G "PIN_E2" 2 58 "74" |
d G "PIN_E3" 2 59 "75" |
d G "FALSE" 2 62 "0" |
d G "TRUE" 2 63 "1" |
d G "BYTE" 2 65 "int8" |
d G "BOOLEAN" 2 66 "int1" |
d G "getc" 2 68 "getch" |
d G "fgetc" 2 69 "getch" |
d G "getchar" 2 70 "getch" |
d G "putc" 2 71 "putchar" |
d G "fputc" 2 72 "putchar" |
d G "fgets" 2 73 "gets" |
d G "fputs" 2 74 "puts" |
d G "WDT_FROM_SLEEP" 2 79 "3" |
d G "WDT_TIMEOUT" 2 80 "11" |
d G "MCLR_FROM_SLEEP" 2 81 "19" |
d G "MCLR_FROM_RUN" 2 82 "27" |
d G "NORMAL_POWER_UP" 2 83 "25" |
d G "BROWNOUT_RESTART" 2 84 "26" |
d G "T0_INTERNAL" 2 91 "0" |
d G "T0_EXT_L_TO_H" 2 92 "32" |
d G "T0_EXT_H_TO_L" 2 93 "48" |
d G "T0_DIV_1" 2 95 "8" |
d G "T0_DIV_2" 2 96 "0" |
d G "T0_DIV_4" 2 97 "1" |
d G "T0_DIV_8" 2 98 "2" |
d G "T0_DIV_16" 2 99 "3" |
d G "T0_DIV_32" 2 100 "4" |
d G "T0_DIV_64" 2 101 "5" |
d G "T0_DIV_128" 2 102 "6" |
d G "T0_DIV_256" 2 103 "7" |
d G "T0_8_BIT" 2 106 "0" |
d G "RTCC_INTERNAL" 2 108 "0" "The following are provided for compatibility" |
d G "RTCC_EXT_L_TO_H" 2 109 "32" "with older compiler versions" |
d G "RTCC_EXT_H_TO_L" 2 110 "48" |
d G "RTCC_DIV_1" 2 111 "8" |
d G "RTCC_DIV_2" 2 112 "0" |
d G "RTCC_DIV_4" 2 113 "1" |
d G "RTCC_DIV_8" 2 114 "2" |
d G "RTCC_DIV_16" 2 115 "3" |
d G "RTCC_DIV_32" 2 116 "4" |
d G "RTCC_DIV_64" 2 117 "5" |
d G "RTCC_DIV_128" 2 118 "6" |
d G "RTCC_DIV_256" 2 119 "7" |
d G "RTCC_8_BIT" 2 120 "0" |
d G "WDT_18MS" 2 132 "8" |
d G "WDT_36MS" 2 133 "9" |
d G "WDT_72MS" 2 134 "10" |
d G "WDT_144MS" 2 135 "11" |
d G "WDT_288MS" 2 136 "12" |
d G "WDT_576MS" 2 137 "13" |
d G "WDT_1152MS" 2 138 "14" |
d G "WDT_2304MS" 2 139 "15" |
d G "WDT_ON" 2 143 "0x4100" |
d G "WDT_OFF" 2 144 "0" |
d G "WDT_DIV_16" 2 145 "0x100" |
d G "WDT_DIV_8" 2 146 "0x300" |
d G "WDT_DIV_4" 2 147 "0x500" |
d G "WDT_DIV_2" 2 148 "0x700" |
d G "WDT_TIMES_1" 2 149 "0x900" "Default" |
d G "WDT_TIMES_2" 2 150 "0xB00" |
d G "WDT_TIMES_4" 2 151 "0xD00" |
d G "WDT_TIMES_8" 2 152 "0xF00" |
d G "WDT_TIMES_16" 2 153 "0x1100" |
d G "WDT_TIMES_32" 2 154 "0x1300" |
d G "WDT_TIMES_64" 2 155 "0x1500" |
d G "WDT_TIMES_128" 2 156 "0x1700" |
d G "T1_DISABLED" 2 162 "0" |
d G "T1_INTERNAL" 2 163 "5" |
d G "T1_EXTERNAL" 2 164 "7" |
d G "T1_EXTERNAL_SYNC" 2 165 "3" |
d G "T1_CLK_OUT" 2 167 "8" |
d G "T1_DIV_BY_1" 2 169 "0" |
d G "T1_DIV_BY_2" 2 170 "0x10" |
d G "T1_DIV_BY_4" 2 171 "0x20" |
d G "T1_DIV_BY_8" 2 172 "0x30" |
d G "T1_GATE" 2 174 "0x40" |
d G "T1_GATE_INVERTED" 2 175 "0xC0" |
d G "T2_DISABLED" 2 180 "0" |
d G "T2_DIV_BY_1" 2 181 "4" |
d G "T2_DIV_BY_4" 2 182 "5" |
d G "T2_DIV_BY_16" 2 183 "6" |
d G "CCP_OFF" 2 189 "0" |
d G "CCP_CAPTURE_FE" 2 190 "4" |
d G "CCP_CAPTURE_RE" 2 191 "5" |
d G "CCP_CAPTURE_DIV_4" 2 192 "6" |
d G "CCP_CAPTURE_DIV_16" 2 193 "7" |
d G "CCP_COMPARE_SET_ON_MATCH" 2 194 "8" |
d G "CCP_COMPARE_CLR_ON_MATCH" 2 195 "9" |
d G "CCP_COMPARE_INT" 2 196 "0xA" |
d G "CCP_COMPARE_RESET_TIMER" 2 197 "0xB" |
d G "CCP_PWM" 2 198 "0xC" |
d G "CCP_PWM_PLUS_1" 2 199 "0x1c" |
d G "CCP_PWM_PLUS_2" 2 200 "0x2c" |
d G "CCP_PWM_PLUS_3" 2 201 "0x3c" |
d G "CCP_PWM_H_H" 2 206 "0x0c" |
d G "CCP_PWM_H_L" 2 207 "0x0d" |
d G "CCP_PWM_L_H" 2 208 "0x0e" |
d G "CCP_PWM_L_L" 2 209 "0x0f" |
d G "CCP_PWM_FULL_BRIDGE" 2 211 "0x40" |
d G "CCP_PWM_FULL_BRIDGE_REV" 2 212 "0xC0" |
d G "CCP_PWM_HALF_BRIDGE" 2 213 "0x80" |
d G "CCP_SHUTDOWN_ON_COMP1" 2 215 "0x100000" |
d G "CCP_SHUTDOWN_ON_COMP2" 2 216 "0x200000" |
d G "CCP_SHUTDOWN_ON_COMP" 2 217 "0x300000" |
d G "CCP_SHUTDOWN_ON_INT0" 2 218 "0x400000" |
d G "CCP_SHUTDOWN_ON_COMP1_INT0" 2 219 "0x500000" |
d G "CCP_SHUTDOWN_ON_COMP2_INT0" 2 220 "0x600000" |
d G "CCP_SHUTDOWN_ON_COMP_INT0" 2 221 "0x700000" |
d G "CCP_SHUTDOWN_AC_L" 2 223 "0x000000" |
d G "CCP_SHUTDOWN_AC_H" 2 224 "0x040000" |
d G "CCP_SHUTDOWN_AC_F" 2 225 "0x080000" |
d G "CCP_SHUTDOWN_BD_L" 2 227 "0x000000" |
d G "CCP_SHUTDOWN_BD_H" 2 228 "0x010000" |
d G "CCP_SHUTDOWN_BD_F" 2 229 "0x020000" |
d G "CCP_SHUTDOWN_RESTART" 2 231 "0x80000000" |
d G "CCP_PULSE_STEERING_A" 2 233 "0x01000000" |
d G "CCP_PULSE_STEERING_B" 2 234 "0x02000000" |
d G "CCP_PULSE_STEERING_C" 2 235 "0x04000000" |
d G "CCP_PULSE_STEERING_D" 2 236 "0x08000000" |
d G "CCP_PULSE_STEERING_SYNC" 2 237 "0x10000000" |
d G "SPI_MASTER" 2 245 "0x20" |
d G "SPI_SLAVE" 2 246 "0x24" |
d G "SPI_L_TO_H" 2 247 "0" |
d G "SPI_H_TO_L" 2 248 "0x10" |
d G "SPI_CLK_DIV_4" 2 249 "0" |
d G "SPI_CLK_DIV_16" 2 250 "1" |
d G "SPI_CLK_DIV_64" 2 251 "2" |
d G "SPI_CLK_T2" 2 252 "3" |
d G "SPI_SS_DISABLED" 2 253 "1" |
d G "SPI_SAMPLE_AT_END" 2 255 "0x8000" |
d G "SPI_XMIT_L_TO_H" 2 256 "0x4000" |
d G "UART_ADDRESS" 2 262 "2" |
d G "UART_DATA" 2 263 "4" |
d G "UART_AUTODETECT" 2 264 "8" |
d G "UART_AUTODETECT_NOWAIT" 2 265 "9" |
d G "UART_WAKEUP_ON_RDA" 2 266 "10" |
d G "UART_SEND_BREAK" 2 267 "13" |
d G "NC_NC_NC_NC" 2 273 "0x00" |
d G "NC_NC" 2 274 "0x00" |
d G "CP1_A0_A3" 2 277 "0x00090080" |
d G "CP1_A1_A3" 2 278 "0x000A0081" |
d G "CP1_B3_A3" 2 279 "0x00880082" |
d G "CP1_B1_A3" 2 280 "0x00280083" |
d G "CP1_A0_VREF" 2 281 "0x00010084" |
d G "CP1_A1_VREF" 2 282 "0x00020085" |
d G "CP1_B3_VREF" 2 283 "0x00800086" |
d G "CP1_B1_VREF" 2 284 "0x00200087" |
d G "CP1_OUT_ON_A4" 2 286 "0x00000020" |
d G "CP1_INVERT" 2 287 "0x00000010" |
d G "CP1_ABSOLUTE_VREF" 2 288 "0x20000000" |
d G "CP2_A0_A2" 2 291 "0x00058000" |
d G "CP2_A1_A2" 2 292 "0x00068100" |
d G "CP2_B3_A2" 2 293 "0x00848200" |
d G "CP2_B1_A2" 2 294 "0x00248300" |
d G "CP2_A0_VREF" 2 295 "0x00018400" |
d G "CP2_A1_VREF" 2 296 "0x00028500" |
d G "CP2_B3_VREF" 2 297 "0x00808600" |
d G "CP2_B1_VREF" 2 298 "0x00208700" |
d G "CP2_OUT_ON_A5" 2 300 "0x00002000" |
d G "CP2_INVERT" 2 301 "0x00001000" |
d G "CP2_ABSOLUTE_VREF" 2 302 "0x10000000" |
d G "CP2_T1_SYNC" 2 305 "0x01000000" |
d G "CP2_T1_GATE" 2 306 "0x02000000" |
d G "VREF_LOW" 2 315 "0xa0" |
d G "VREF_HIGH" 2 316 "0x80" |
d G "OSC_31KHZ" 2 322 "1" |
d G "OSC_125KHZ" 2 323 "0x11" |
d G "OSC_250KHZ" 2 324 "0x21" |
d G "OSC_500KHZ" 2 325 "0x31" |
d G "OSC_1MHZ" 2 326 "0x41" |
d G "OSC_2MHZ" 2 327 "0x51" |
d G "OSC_4MHZ" 2 328 "0x61" |
d G "OSC_8MHZ" 2 329 "0x71" |
d G "OSC_INTRC" 2 330 "1" |
d G "OSC_NORMAL" 2 331 "0" |
d G "OSC_STATE_STABLE" 2 333 "4" |
d G "OSC_31KHZ_STABLE" 2 334 "2" |
d G "ADC_OFF" 2 342 "0" "ADC Off" |
d G "ADC_CLOCK_DIV_2" 2 343 "0x100" |
d G "ADC_CLOCK_DIV_8" 2 344 "0x40" |
d G "ADC_CLOCK_DIV_32" 2 345 "0x80" |
d G "ADC_CLOCK_INTERNAL" 2 346 "0xc0" "Internal 2-6us" |
d G "sAN0" 2 350 "1" "| A0" |
d G "sAN1" 2 351 "2" "| A1" |
d G "sAN2" 2 352 "4" "| A2" |
d G "sAN3" 2 353 "8" "| A3" |
d G "sAN4" 2 354 "16" "| A5" |
d G "sAN5" 2 355 "32" "| E0" |
d G "sAN6" 2 356 "64" "| E1" |
d G "sAN7" 2 357 "128" "| E2" |
d G "sAN8" 2 358 "0x10000" "| B2" |
d G "sAN9" 2 359 "0x20000" "| B3" |
d G "sAN10" 2 360 "0x40000" "| B1" |
d G "sAN11" 2 361 "0x80000" "| B4" |
d G "sAN12" 2 362 "0x100000" "| B0" |
d G "sAN13" 2 363 "0x200000" "| B5" |
d G "NO_ANALOGS" 2 364 "0" "None" |
d G "ALL_ANALOG" 2 365 "0x1F00FF" "A0 A1 A2 A3 A5 E0 E1 E2 B0 B1 B2 B3 B4 B5" |
d G "VSS_VDD" 2 368 "0x0000" "| Range 0-Vdd" |
d G "VSS_VREF" 2 369 "0x1000" "| Range 0-Vref" |
d G "VREF_VREF" 2 370 "0x3000" "| Range Vref-Vref" |
d G "VREF_VDD" 2 371 "0x2000" "| Range Vref-Vdd" |
d G "ADC_START_AND_READ" 2 375 "7" "This is the default if nothing is specified" |
d G "ADC_START_ONLY" 2 376 "1" |
d G "ADC_READ_ONLY" 2 377 "6" |
d G "L_TO_H" 2 389 "0x40" |
d G "H_TO_L" 2 390 "0" |
d G "GLOBAL" 2 392 "0x0BC0" |
d G "INT_RTCC" 2 393 "0x000B20" |
d G "INT_RB" 2 394 "0x01FF0B08" |
d G "INT_EXT_L2H" 2 395 "0x50000B10" |
d G "INT_EXT_H2L" 2 396 "0x60000B10" |
d G "INT_EXT" 2 397 "0x000B10" |
d G "INT_AD" 2 398 "0x008C40" |
d G "INT_TBE" 2 399 "0x008C10" |
d G "INT_RDA" 2 400 "0x008C20" |
d G "INT_TIMER1" 2 401 "0x008C01" |
d G "INT_TIMER2" 2 402 "0x008C02" |
d G "INT_CCP1" 2 403 "0x008C04" |
d G "INT_CCP2" 2 404 "0x008D01" |
d G "INT_SSP" 2 405 "0x008C08" |
d G "INT_BUSCOL" 2 406 "0x008D08" |
d G "INT_EEPROM" 2 407 "0x008D10" |
d G "INT_TIMER0" 2 408 "0x000B20" |
d G "INT_OSC_FAIL" 2 409 "0x008D80" |
d G "INT_COMP" 2 410 "0x008D20" |
d G "INT_COMP2" 2 411 "0x008D40" |
d G "INT_ULPWU" 2 412 "0x008D04" |
d G "INT_RB0" 2 413 "0x0010B08" |
d G "INT_RB1" 2 414 "0x0020B08" |
d G "INT_RB2" 2 415 "0x0040B08" |
d G "INT_RB3" 2 416 "0x0080B08" |
d G "INT_RB4" 2 417 "0x0100B08" |
d G "INT_RB5" 2 418 "0x0200B08" |
d G "INT_RB6" 2 419 "0x0400B08" |
d G "INT_RB7" 2 420 "0x0800B08" |
D G "HMC5883L_WRT_ADDR" 3 2 "0x3C" |
D G "HMC5883L_READ_ADDR" 3 3 "0x3D" |
D G "HMC5883L_CFG_A_REG" 3 6 "0x00" |
D G "HMC5883L_CFG_B_REG" 3 7 "0x01" |
D G "HMC5883L_MODE_REG" 3 8 "0x02" |
D G "HMC5883L_X_MSB_REG" 3 9 "0x03" |
D G "MAG_ROZ088" 3 13 "0x00" |
D G "MAG_ROZ130" 3 14 "0x20" |
D G "MAG_ROZ190" 3 15 "0x40" |
D G "MAG_ROZ250" 3 16 "0x60" |
D G "MAG_ROZ400" 3 17 "0x80" |
D G "MAG_ROZ470" 3 18 "0xA0" |
D G "MAG_ROZ560" 3 19 "0xC0" |
D G "MAG_ROZ810" 3 20 "0xE0" |
C L "hmc5883l_write_reg" 4 2 1 "FUNCTION" |
F G "hmc5883l_write_reg" 4 4 "void(int8 reg,int8 data)" |
V L "reg" 4 4 "int8" |
V L "data" 4 4 "int8" |
F G "hmc5883l_read_reg" 4 14 "int8(int8 reg)" |
V L "reg" 4 14 "int8" |
V L "retval" 4 16 "int8" |
T G "hmc5883l_result" 4 35 "{sint16 x,sint16 y,sint16 z}" "This global structure holds the values read" |
V G "compass" 4 39 "hmc5883l_result" |
F G "hmc5883l_read_data" 4 42 "void()" |
V L "x_lsb" 4 44 "int8" |
V L "x_msb" 4 45 "int8" |
V L "y_lsb" 4 47 "int8" |
V L "y_msb" 4 48 "int8" |
V L "z_lsb" 4 50 "int8" |
V L "z_msb" 4 51 "int8" |
C L "hmc5883l_read_data" 4 2 1 "FUNCTION" |
C L "hmc5883l_read_data" 4 2 1 "FUNCTION" |
C L "hmc5883l_read_data" 4 2 1 "FUNCTION" |
D G "MATH_H" 5 21 "" |
D G "PI" 5 26 "3.1415926535897932" |
D G "SQRT2" 5 29 "1.4142135623730950" |
C L "CEIL_FLOOR" 5 2 3 "FUNCTION" |
F G "CEIL_FLOOR" 5 36 "float(float x,int8 n)" |
V L "x" 5 36 "float" |
V L "n" 5 36 "int8" |
V L "y" 5 38 "float" |
V L "res" 5 38 "float" |
V L "l" 5 39 "int16" |
V L "s" 5 40 "int1" |
C L "floor" 5 2 5 "FUNCTION" |
F G "floor" 5 192 "float(float x)" |
V L "x" 5 192 "float" |
C L "ceil" 5 2 5 "FUNCTION" |
F G "ceil" 5 218 "float(float x)" |
V L "x" 5 218 "float" |
D G "fabs" 5 244 "abs" |
C L "fmod" 5 2 6 "FUNCTION" |
F G "fmod" 5 256 "float(float x,float y)" |
V L "x" 5 256 "float" |
V L "y" 5 256 "float" |
V L "i" 5 258 "float" |
D G "LN2" 5 319 "0.6931471805599453" |
V G "pe" 5 321 "float[6]" |
F G "exp" 5 325 "float(float x)" |
V L "x" 5 325 "float" |
V L "y" 5 327 "float" |
V L "res" 5 327 "float" |
V L "r" 5 327 "float" |
V L "n" 5 331 "sint8" |
V L "s" 5 332 "int1" |
C L "exp" 5 2 1 "FUNCTION" |
V G "pl" 5 496 "float[4]" |
V G "ql" 5 497 "float[4]" |
C L "log" 5 2 3 "FUNCTION" |
F G "log" 5 505 "float(float x)" |
V L "x" 5 505 "float" |
V L "y" 5 507 "float" |
V L "res" 5 507 "float" |
V L "r" 5 507 "float" |
V L "y2" 5 507 "float" |
V L "n" 5 511 "sint8" |
C L "log" 5 2 1 "FUNCTION" |
D G "LN10" 5 729 "2.3025850929940456" |
C L "log10" 5 2 3 "FUNCTION" |
F G "log10" 5 737 "float(float x)" |
V L "x" 5 737 "float" |
V L "r" 5 739 "float" |
C L "modf" 5 2 8 "FUNCTION" |
F G "modf" 5 778 "float(float value,*float iptr)" |
V L "value" 5 778 "float" |
V L "iptr" 5 778 "*float" |
C L "pwr" 5 2 6 "FUNCTION" |
F G "pwr" 5 806 "float(float x,float y)" |
V L "x" 5 806 "float" |
V L "y" 5 806 "float" |
C L "pow" 5 2 7 "FUNCTION" |
F G "pow" 5 869 "float(float x,float y)" |
V L "x" 5 869 "float" |
V L "y" 5 869 "float" |
C L "sqrt" 5 2 5 "FUNCTION" |
F G "sqrt" 5 930 "float(float x)" |
V L "x" 5 930 "float" |
V L "y" 5 932 "float" |
V L "res" 5 932 "float" |
V L "p" 5 936 "*int8" |
D G "PI_DIV_BY_TWO" 5 1125 "1.5707963267948966" |
C L "cos" 5 2 3 "FUNCTION" |
F G "cos" 5 1136 "float(float x)" |
V L "x" 5 1136 "float" |
V L "y" 5 1138 "float" |
V L "t" 5 1138 "float" |
V L "t2" 5 1138 "float" |
V L "quad" 5 1139 "int8" |
V L "i" 5 1139 "int8" |
V L "frac" 5 1140 "float" |
V L "p" 5 1141 "float[6]" "by the series definition for cosine" |
C L "cos" 5 2 1 "FUNCTION" |
C L "cos" 5 2 2 "FUNCTION" |
C L "cos" 5 2 1 "FUNCTION" |
C L "cos" 5 2 1 "FUNCTION" |
C L "cos" 5 2 1 "FUNCTION" |
C L "cos" 5 2 1 "FUNCTION" |
C L "cos" 5 2 1 "FUNCTION" |
C L "cos" 5 2 1 "FUNCTION" |
C L "sin" 5 2 5 "FUNCTION" |
F G "sin" 5 1278 "float(float x)" |
V L "x" 5 1278 "float" |
C L "tan" 5 2 5 "FUNCTION" |
F G "tan" 5 1304 "float(float x)" |
V L "x" 5 1304 "float" |
V L "c" 5 1306 "float" |
V L "s" 5 1306 "float" |
V G "pas" 5 1344 "float[3]" |
V G "qas" 5 1345 "float[3]" |
F G "ASIN_COS" 5 1347 "float(float x,int8 n)" |
V L "x" 5 1347 "float" |
V L "n" 5 1347 "int8" |
V L "y" 5 1349 "float" |
V L "res" 5 1349 "float" |
V L "r" 5 1349 "float" |
V L "y2" 5 1349 "float" |
V L "s" 5 1350 "int1" |
C L "ASIN_COS" 5 2 1 "FUNCTION" |
C L "ASIN_COS" 5 2 1 "FUNCTION" |
C L "asin" 5 2 5 "FUNCTION" |
F G "asin" 5 1493 "float(float x)" |
V L "x" 5 1493 "float" |
V L "r" 5 1495 "float" |
C L "acos" 5 2 5 "FUNCTION" |
F G "acos" 5 1527 "float(float x)" |
V L "x" 5 1527 "float" |
V L "r" 5 1529 "float" |
V G "pat" 5 1555 "float[4]" |
V G "qat" 5 1556 "float[4]" |
C L "atan" 5 2 3 "FUNCTION" |
F G "atan" 5 1564 "float(float x)" |
V L "x" 5 1564 "float" |
V L "y" 5 1566 "float" |
V L "res" 5 1566 "float" |
V L "r" 5 1566 "float" |
V L "s" 5 1567 "int1" |
V L "flag" 5 1567 "int1" |
C L "atan" 5 2 1 "FUNCTION" |
C L "atan2" 5 2 7 "FUNCTION" |
F G "atan2" 5 1697 "float(float y,float x)" |
V L "y" 5 1697 "float" |
V L "x" 5 1697 "float" |
V L "z" 5 1699 "float" |
V L "sign" 5 1700 "int1" |
V L "quad" 5 1701 "int8" |
C L "atan2" 5 2 1 "FUNCTION" |
C L "atan2" 5 2 1 "FUNCTION" |
C L "cosh" 5 2 7 "FUNCTION" |
F G "cosh" 5 1919 "float(float x)" |
V L "x" 5 1919 "float" |
C L "sinh" 5 2 6 "FUNCTION" |
F G "sinh" 5 1946 "float(float x)" |
V L "x" 5 1946 "float" |
C L "tanh" 5 2 6 "FUNCTION" |
F G "tanh" 5 1976 "float(float x)" |
V L "x" 5 1976 "float" |
D G "LOG2" 5 2006 ".30102999566398119521" |
F G "frexp" 5 2007 "float(float x,*sint8 exp)" |
V L "x" 5 2007 "float" |
V L "exp" 5 2007 "*sint8" |
V L "res" 5 2009 "float" |
V L "sign" 5 2010 "int1" |
C L "ldexp" 5 2 6 "FUNCTION" |
F G "ldexp" 5 2152 "float(float value,sint8 exp)" |
V L "value" 5 2152 "float" |
V L "exp" 5 2152 "sint8" |
C L "MAIN" 5 2 2 "FUNCTION" |
F G "MAIN" 0 5 "void()" |
C L "MAIN" 0 21 2 "FUNCTION" |
C L "MAIN" 0 21 1 "FUNCTION" |
C L "MAIN" 0 21 1 "FUNCTION" |
C L "MAIN" 0 21 2 "FUNCTION" |
F B "reset_cpu" 0 0 |
F B "abs" 1 0 |
F B "sleep_ulpwu" 1 0 |
F B "sleep" 0 0 |
F B "delay_cycles" 1 0 |
F B "read_bank" 2 0 |
F B "write_bank" 3 0 |
F B "shift_left" 2 2 |
F B "shift_right" 2 2 |
F B "rotate_left" 2 0 |
F B "rotate_right" 2 0 |
F B "_mul" 2 0 |
F B "memset" 3 0 |
F B "isamoung" 2 0 |
F B "isamong" 2 0 |
F B "bit_set" 2 0 |
F B "bit_clear" 2 0 |
F B "bit_test" 2 0 |
F B "toupper" 1 0 |
F B "tolower" 1 0 |
F B "swap" 1 0 |
F B "printf" 1 255 |
F B "fprintf" 1 255 |
F B "sprintf" 1 255 |
F B "make8" 2 0 |
F B "make16" 2 0 |
F B "make32" 1 255 |
F B "label_address" 1 1 |
F B "goto_address" 1 0 |
F B "_va_arg" 1 0 |
F B "offsetofbit" 2 2 |
F B "enable_interrupts" 1 0 |
F B "disable_interrupts" 1 0 |
F B "interrupt_active" 1 0 |
F B "clear_interrupt" 1 0 |
F B "jump_to_isr" 1 0 |
F B "ext_int_edge" 1 2 |
F B "read_eeprom" 1 0 |
F B "write_eeprom" 2 0 |
F B "read_program_eeprom" 1 0 |
F B "write_program_eeprom" 2 0 |
F B "write_program_memory" 4 0 |
F B "write_program_memory8" 4 0 |
F B "read_program_memory" 4 0 |
F B "read_program_memory8" 4 0 |
F B "erase_program_eeprom" 1 0 |
F B "strcpy" 2 0 |
F B "memcpy" 3 0 |
F B "strstr100" 2 0 |
F B "output_high" 1 0 |
F B "output_low" 1 0 |
F B "input" 1 0 |
F B "input_state" 1 0 |
F B "output_float" 1 0 |
F B "output_drive" 1 0 |
F B "output_bit" 1 1 |
F B "output_toggle" 1 0 |
F B "output_a" 1 0 |
F B "output_b" 1 0 |
F B "output_c" 1 0 |
F B "output_d" 1 0 |
F B "output_e" 1 0 |
F B "input_a" 0 0 |
F B "input_b" 0 0 |
F B "input_c" 0 0 |
F B "input_d" 0 0 |
F B "input_e" 0 0 |
F B "set_tris_a" 1 0 |
F B "set_tris_b" 1 0 |
F B "set_tris_c" 1 0 |
F B "set_tris_d" 1 0 |
F B "set_tris_e" 1 0 |
F B "get_tris_a" 0 0 |
F B "get_tris_b" 0 0 |
F B "get_tris_c" 0 0 |
F B "get_tris_d" 0 0 |
F B "get_tris_e" 0 0 |
F B "input_change_a" 0 0 |
F B "input_change_b" 0 0 |
F B "input_change_c" 0 0 |
F B "input_change_d" 0 0 |
F B "input_change_e" 0 0 |
F B "port_b_pullups" 1 0 |
F B "setup_counters" 2 0 |
F B "setup_wdt" 1 0 |
F B "restart_cause" 0 0 |
F B "restart_wdt" 0 0 |
F B "get_rtcc" 0 0 |
F B "set_rtcc" 1 0 |
F B "get_timer0" 0 0 |
F B "set_timer0" 1 0 |
F B "setup_comparator" 1 0 |
F B "setup_port_a" 1 0 |
F B "setup_adc_ports" 1 0 |
F B "setup_adc" 1 0 |
F B "set_adc_channel" 1 0 |
F B "read_adc" 0 1 |
F B "adc_done" 0 0 |
F B "setup_timer_0" 1 0 |
F B "setup_vref" 1 0 |
F B "setup_timer_1" 1 0 |
F B "get_timer1" 0 0 |
F B "set_timer1" 1 0 |
F B "setup_timer_2" 3 0 |
F B "get_timer2" 0 0 |
F B "set_timer2" 1 0 |
F B "setup_ccp1" 1 2 |
F B "set_pwm1_duty" 1 0 |
F B "setup_ccp2" 1 0 |
F B "set_pwm2_duty" 1 0 |
F B "setup_oscillator" 1 2 |
F B "setup_spi" 1 0 |
F B "spi_read" 0 1 |
F B "spi_write" 1 0 |
F B "spi_data_is_in" 0 0 |
F B "setup_spi2" 1 0 |
F B "spi_read2" 0 1 |
F B "spi_write2" 1 0 |
F B "spi_data_is_in2" 0 0 |
F B "brownout_enable" 1 0 |
F B "delay_ms" 1 0 |
F B "delay_us" 1 0 |
F B "i2c_read" 0 2 |
F B "i2c_write" 1 2 |
F B "i2c_start" 0 2 |
F B "i2c_stop" 0 1 |
F B "i2c_isr_state" 0 1 |
F B "putchar" 1 2 |
F B "puts" 1 2 |
F B "getch" 0 1 |
F B "gets" 1 3 |
F B "kbhit" 0 1 |
F B "set_uart_speed" 1 3 |
F B "setup_uart" 1 3 |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.h |
---|
0,0 → 1,21 |
#include <16F887.h> |
#device adc=8 |
#FUSES NOWDT //No Watch Dog Timer |
#FUSES INTRC //Internal RC Osc |
#FUSES NOPUT //No Power Up Timer |
#FUSES MCLR //Master Clear pin enabled |
#FUSES NOPROTECT //Code not protected from reading |
#FUSES NOCPD //No EE protection |
#FUSES NOBROWNOUT //No brownout reset |
#FUSES IESO //Internal External Switch Over mode enabled |
#FUSES FCMEN //Fail-safe clock monitor enabled |
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O |
#FUSES NODEBUG //No Debug mode for ICD |
#FUSES NOWRT //Program memory not write protected |
#FUSES BORV40 //Brownout reset at 4.0V |
#use delay(clock=8000000) |
#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3) |
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) //rcv TXD xmit RXD |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.hex |
---|
0,0 → 1,100 |
:1000000002308A003C2A0000CD306737653AEF366F |
:10001000653A721D20100D050000A831A936EC309C |
:100020006217633DA035E135EC346B103218B1191D |
:100030003A10A0060A005816A02C2C105A100D05D4 |
:100040000001831603178C170C14000000008312A4 |
:100050000C087F39031967280313A70003170D083D |
:100060000313A80003170F080313A90027080C1E89 |
:1000700037289900280803178D0003132908031750 |
:100080008F0083168C170C140000000083120C0DD7 |
:100090000E0D7F39031967280313A70003170D08F6 |
:1000A0000313A80003170F080313A90027080C1E49 |
:1000B00057289900280803178D00031329080317F0 |
:1000C0008F008D0A03198F0A0313212803170313C6 |
:1000D00008000830F80000008711A01120088316DE |
:1000E000870000008312AD0D0712031C7D28201627 |
:1000F0002008831687008128831220122008831687 |
:10010000870000008312A015200883168700831241 |
:10011000871D8828F80B6B2800008711A011200884 |
:10012000831687000000831220162008831687009C |
:10013000000000008312A015200883168700831298 |
:10014000871DA028F8010000071A78148711A01154 |
:1001500020088316870083120712201220088316B6 |
:1001600087008312080020162008831687000000ED |
:100170008312A0152008831687000000831207123F |
:100180002012200883168700000083128711A01117 |
:100190002008831687003C308312AD0069202708B1 |
:1001A000AD0069202808AD006920201220088316C0 |
:1001B000870000008312A015200883168700831291 |
:1001C000871DE0280000E428000020162008831680 |
:1001D00087000000831208000830AE007708AF00E7 |
:1001E000201620088316870000008312A01520081F |
:1001F000831687008312871DFB28071A0314071E26 |
:100200000310F80D0000A011200883168700831248 |
:100210008711AE0BF02820162008831687000000F7 |
:10022000831207122F0803191A2920122008831697 |
:10023000870083120000A015200883168700831210 |
:10024000871D202900008711A01120088316870030 |
:1002500000008312071220122008831687008312E1 |
:100260000800201620088316870000008312A015BE |
:10027000200883168700000083120712201220082E |
:1002800083168700000083128711A01120088316AF |
:1002900087003C308312AD0069200330AD00692037 |
:1002A000201620088316870000008312A01520085E |
:1002B0008316870000008312871D5C290712201215 |
:1002C000200883168700000083128711A0112008E0 |
:1002D000831687003D308312AD0069200130F7009E |
:1002E000EC207808A8000130F700EC207808A7007F |
:1002F0000130F700EC207808AC000130F700EC206A |
:100300007808AB000130F700EC207808AA00F7016C |
:10031000EC207808A900201220088316870000002E |
:100320008312A0152008831687008312871D962943 |
:1003300000009A290000201620088316870000007C |
:1003400083122808A2002708A1002A08A40029086F |
:10035000A3002C08A6002B08A5008A110A12CC2A9B |
:10036000AF010408AE002F10831B2F14A81FC02953 |
:10037000AE172E1EAE0AA709A809A70A0319A80AD4 |
:10038000280EF038AA00AA07E23EAB00323EAD00CC |
:1003900028080F39AB07AB07AD07E93EAC00AC0747 |
:1003A000AC07270E0F39AC07AD07AC0DAD0DAD098D |
:1003B000AD0D27080F39AD07AA0D0730A9000A3087 |
:1003C000AD07AC03031CE029AC07AB03031CE42915 |
:1003D000AB07AA03031CE829AA07A903031CEC29FD |
:1003E00029308400831307302E052E1384032E0535 |
:1003F000031D012A2E1A840A2E1A012A2030F70022 |
:100400001E2A84072D30040203192E170008F70056 |
:10041000031D122A2E1B122A2E1A222AAE19122A64 |
:1004200020301D2AAE1F1A2A2D30F70084032E1308 |
:10043000AE131E2AAE152E123030F70777080C1EA9 |
:100440001F2A9900840A2E1F022A080027308400E0 |
:10045000831300080319392A0230F800F701F70B5B |
:100460002F2AF80B2E2A9730F700F70B352A800B2E |
:100470002C2A8A110A12F82A840183131F3083055B |
:10048000713083168F000F08031787110C30031388 |
:100490009900A230980090308312980083160317B9 |
:1004A0000908C039890003131F129F120030031777 |
:1004B00088008312870188018901FF300313A0009F |
:1004C000A101A201A301A401A501A601831603179E |
:1004D0000908C039890003131F129F120030031747 |
:1004E0008800831203131F139F1383169F13831215 |
:1004F0001F149412A012200883168700831220165E |
:100500002008831687008312A01120088316870015 |
:100510000130831294000030831694000108C7391B |
:1005200008388100831290010030F80092000030FA |
:1005300083169200831220152008831687008312E9 |
:10054000970183169B019C0101309D0083120317C4 |
:1005500087018801890104308D0000308F0003136A |
:1005600021200D3003178D0000308F000313212050 |
:100570001B3003178D0000308F0003132120A701CB |
:100580001830A800B3200130A700A801B320023022 |
:10059000A700A801B3203129003084002208A80058 |
:1005A0002108A700B02120300C1ED42A9900003069 |
:1005B00084002408A8002308A700B02120300C1EC6 |
:1005C000DF2A9900003084002608A8002508A7002B |
:1005D000B02120300C1EEA2A99000A300C1EEE2AA7 |
:1005E00099000D300C1EF22A99006430A700262ACB |
:0405F000CB2A6300AF |
:04400E00F52CFF3F4F |
:00000001FF |
;PIC16F887 |
;CRC=2B66 CREATED="25-VIII-13 18:55" |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.lst |
---|
0,0 → 1,2904 |
CCS PCM C Compiler, Version 4.106, 47914 25-VIII-13 18:55 |
Filename: Z:\home\kaklik\svnMLAB\Modules\Sensors\MAG01A\SW\PIC16F887\main.lst |
ROM used: 762 words (9%) |
Largest free fragment is 2048 |
RAM used: 12 (3%) at main() level |
21 (6%) worst case |
Stack: 2 locations |
* |
0000: MOVLW 02 |
0001: MOVWF 0A |
0002: GOTO 23C |
0003: NOP |
.................... #include "main.h" |
.................... #include <16F887.h> |
.................... //////// Standard Header file for the PIC16F887 device //////////////// |
.................... #device PIC16F887 |
.................... #list |
.................... |
.................... #device adc=8 |
.................... |
.................... #FUSES NOWDT //No Watch Dog Timer |
.................... #FUSES INTRC //Internal RC Osc |
.................... #FUSES NOPUT //No Power Up Timer |
.................... #FUSES MCLR //Master Clear pin enabled |
.................... #FUSES NOPROTECT //Code not protected from reading |
.................... #FUSES NOCPD //No EE protection |
.................... #FUSES NOBROWNOUT //No brownout reset |
.................... #FUSES IESO //Internal External Switch Over mode enabled |
.................... #FUSES FCMEN //Fail-safe clock monitor enabled |
.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O |
.................... #FUSES NODEBUG //No Debug mode for ICD |
.................... #FUSES NOWRT //Program memory not write protected |
.................... #FUSES BORV40 //Brownout reset at 4.0V |
.................... |
.................... #use delay(clock=8000000) |
* |
0226: MOVLW 27 |
0227: MOVWF 04 |
0228: BCF 03.7 |
0229: MOVF 00,W |
022A: BTFSC 03.2 |
022B: GOTO 239 |
022C: MOVLW 02 |
022D: MOVWF 78 |
022E: CLRF 77 |
022F: DECFSZ 77,F |
0230: GOTO 22F |
0231: DECFSZ 78,F |
0232: GOTO 22E |
0233: MOVLW 97 |
0234: MOVWF 77 |
0235: DECFSZ 77,F |
0236: GOTO 235 |
0237: DECFSZ 00,F |
0238: GOTO 22C |
0239: BCF 0A.3 |
023A: BCF 0A.4 |
023B: GOTO 2F8 (RETURN) |
.................... #use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3) |
* |
0069: MOVLW 08 |
006A: MOVWF 78 |
006B: NOP |
006C: BCF 07.3 |
006D: BCF 20.3 |
006E: MOVF 20,W |
006F: BSF 03.5 |
0070: MOVWF 07 |
0071: NOP |
0072: BCF 03.5 |
0073: RLF 2D,F |
0074: BCF 07.4 |
0075: BTFSS 03.0 |
0076: GOTO 07D |
0077: BSF 20.4 |
0078: MOVF 20,W |
0079: BSF 03.5 |
007A: MOVWF 07 |
007B: GOTO 081 |
007C: BCF 03.5 |
007D: BCF 20.4 |
007E: MOVF 20,W |
007F: BSF 03.5 |
0080: MOVWF 07 |
0081: NOP |
0082: BCF 03.5 |
0083: BSF 20.3 |
0084: MOVF 20,W |
0085: BSF 03.5 |
0086: MOVWF 07 |
0087: BCF 03.5 |
0088: BTFSS 07.3 |
0089: GOTO 088 |
008A: DECFSZ 78,F |
008B: GOTO 06B |
008C: NOP |
008D: BCF 07.3 |
008E: BCF 20.3 |
008F: MOVF 20,W |
0090: BSF 03.5 |
0091: MOVWF 07 |
0092: NOP |
0093: BCF 03.5 |
0094: BSF 20.4 |
0095: MOVF 20,W |
0096: BSF 03.5 |
0097: MOVWF 07 |
0098: NOP |
0099: NOP |
009A: BCF 03.5 |
009B: BSF 20.3 |
009C: MOVF 20,W |
009D: BSF 03.5 |
009E: MOVWF 07 |
009F: BCF 03.5 |
00A0: BTFSS 07.3 |
00A1: GOTO 0A0 |
00A2: CLRF 78 |
00A3: NOP |
00A4: BTFSC 07.4 |
00A5: BSF 78.0 |
00A6: BCF 07.3 |
00A7: BCF 20.3 |
00A8: MOVF 20,W |
00A9: BSF 03.5 |
00AA: MOVWF 07 |
00AB: BCF 03.5 |
00AC: BCF 07.4 |
00AD: BCF 20.4 |
00AE: MOVF 20,W |
00AF: BSF 03.5 |
00B0: MOVWF 07 |
00B1: BCF 03.5 |
00B2: RETURN |
* |
00EC: MOVLW 08 |
00ED: MOVWF 2E |
00EE: MOVF 77,W |
00EF: MOVWF 2F |
00F0: BSF 20.4 |
00F1: MOVF 20,W |
00F2: BSF 03.5 |
00F3: MOVWF 07 |
00F4: NOP |
00F5: BCF 03.5 |
00F6: BSF 20.3 |
00F7: MOVF 20,W |
00F8: BSF 03.5 |
00F9: MOVWF 07 |
00FA: BCF 03.5 |
00FB: BTFSS 07.3 |
00FC: GOTO 0FB |
00FD: BTFSC 07.4 |
00FE: BSF 03.0 |
00FF: BTFSS 07.4 |
0100: BCF 03.0 |
0101: RLF 78,F |
0102: NOP |
0103: BCF 20.3 |
0104: MOVF 20,W |
0105: BSF 03.5 |
0106: MOVWF 07 |
0107: BCF 03.5 |
0108: BCF 07.3 |
0109: DECFSZ 2E,F |
010A: GOTO 0F0 |
010B: BSF 20.4 |
010C: MOVF 20,W |
010D: BSF 03.5 |
010E: MOVWF 07 |
010F: NOP |
0110: BCF 03.5 |
0111: BCF 07.4 |
0112: MOVF 2F,W |
0113: BTFSC 03.2 |
0114: GOTO 11A |
0115: BCF 20.4 |
0116: MOVF 20,W |
0117: BSF 03.5 |
0118: MOVWF 07 |
0119: BCF 03.5 |
011A: NOP |
011B: BSF 20.3 |
011C: MOVF 20,W |
011D: BSF 03.5 |
011E: MOVWF 07 |
011F: BCF 03.5 |
0120: BTFSS 07.3 |
0121: GOTO 120 |
0122: NOP |
0123: BCF 07.3 |
0124: BCF 20.3 |
0125: MOVF 20,W |
0126: BSF 03.5 |
0127: MOVWF 07 |
0128: NOP |
0129: BCF 03.5 |
012A: BCF 07.4 |
012B: BCF 20.4 |
012C: MOVF 20,W |
012D: BSF 03.5 |
012E: MOVWF 07 |
012F: BCF 03.5 |
0130: RETURN |
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) //rcv TXD xmit RXD |
.................... |
.................... |
.................... #include "HMC5883L.h" |
.................... // i2c slave addresses |
.................... #define HMC5883L_WRT_ADDR 0x3C |
.................... #define HMC5883L_READ_ADDR 0x3D |
.................... |
.................... // Register addresses |
.................... #define HMC5883L_CFG_A_REG 0x00 |
.................... #define HMC5883L_CFG_B_REG 0x01 |
.................... #define HMC5883L_MODE_REG 0x02 |
.................... #define HMC5883L_X_MSB_REG 0x03 |
.................... |
.................... //Konstanty nastavujici rozsah |
.................... //pro void set_mag_roz (unsigned int8 h) |
.................... #define MAG_ROZ088 0x00 |
.................... #define MAG_ROZ130 0x20 |
.................... #define MAG_ROZ190 0x40 |
.................... #define MAG_ROZ250 0x60 |
.................... #define MAG_ROZ400 0x80 |
.................... #define MAG_ROZ470 0xA0 |
.................... #define MAG_ROZ560 0xC0 |
.................... #define MAG_ROZ810 0xE0 |
.................... |
.................... |
.................... #include "HMC5883L.c" |
.................... //------------------------------ |
.................... // Low level routines |
.................... //------------------------------ |
.................... void hmc5883l_write_reg(int8 reg, int8 data) |
.................... { |
.................... i2c_start(); |
* |
00B3: BSF 20.4 |
00B4: MOVF 20,W |
00B5: BSF 03.5 |
00B6: MOVWF 07 |
00B7: NOP |
00B8: BCF 03.5 |
00B9: BSF 20.3 |
00BA: MOVF 20,W |
00BB: BSF 03.5 |
00BC: MOVWF 07 |
00BD: NOP |
00BE: BCF 03.5 |
00BF: BCF 07.4 |
00C0: BCF 20.4 |
00C1: MOVF 20,W |
00C2: BSF 03.5 |
00C3: MOVWF 07 |
00C4: NOP |
00C5: BCF 03.5 |
00C6: BCF 07.3 |
00C7: BCF 20.3 |
00C8: MOVF 20,W |
00C9: BSF 03.5 |
00CA: MOVWF 07 |
.................... i2c_write(HMC5883L_WRT_ADDR); |
00CB: MOVLW 3C |
00CC: BCF 03.5 |
00CD: MOVWF 2D |
00CE: CALL 069 |
.................... i2c_write(reg); |
00CF: MOVF 27,W |
00D0: MOVWF 2D |
00D1: CALL 069 |
.................... i2c_write(data); |
00D2: MOVF 28,W |
00D3: MOVWF 2D |
00D4: CALL 069 |
.................... i2c_stop(); |
00D5: BCF 20.4 |
00D6: MOVF 20,W |
00D7: BSF 03.5 |
00D8: MOVWF 07 |
00D9: NOP |
00DA: BCF 03.5 |
00DB: BSF 20.3 |
00DC: MOVF 20,W |
00DD: BSF 03.5 |
00DE: MOVWF 07 |
00DF: BCF 03.5 |
00E0: BTFSS 07.3 |
00E1: GOTO 0E0 |
00E2: NOP |
00E3: GOTO 0E4 |
00E4: NOP |
00E5: BSF 20.4 |
00E6: MOVF 20,W |
00E7: BSF 03.5 |
00E8: MOVWF 07 |
00E9: NOP |
.................... } |
00EA: BCF 03.5 |
00EB: RETURN |
.................... |
.................... //------------------------------ |
.................... int8 hmc5883l_read_reg(int8 reg) |
.................... { |
.................... int8 retval; |
.................... |
.................... i2c_start(); |
.................... i2c_write(HMC5883L_WRT_ADDR); |
.................... i2c_write(reg); |
.................... i2c_start(); |
.................... i2c_write(HMC5883L_READ_ADDR); |
.................... retval = i2c_read(0); |
.................... i2c_stop(); |
.................... |
.................... return(retval); |
.................... } |
.................... |
.................... //------------------------------ |
.................... typedef struct |
.................... { |
.................... signed int16 x; |
.................... signed int16 y; |
.................... signed int16 z; |
.................... }hmc5883l_result; |
.................... |
.................... // This global structure holds the values read |
.................... // from the HMC5883L x,y,z registers. |
.................... hmc5883l_result compass = {0,0,0}; |
* |
0260: CLRF 21 |
0261: CLRF 22 |
0262: CLRF 23 |
0263: CLRF 24 |
0264: CLRF 25 |
0265: CLRF 26 |
.................... |
.................... //------------------------------ |
.................... void hmc5883l_read_data(void) |
.................... { |
.................... unsigned int8 x_lsb; |
.................... unsigned int8 x_msb; |
.................... |
.................... unsigned int8 y_lsb; |
.................... unsigned int8 y_msb; |
.................... |
.................... unsigned int8 z_lsb; |
.................... unsigned int8 z_msb; |
.................... |
.................... i2c_start(); |
* |
0131: BSF 20.4 |
0132: MOVF 20,W |
0133: BSF 03.5 |
0134: MOVWF 07 |
0135: NOP |
0136: BCF 03.5 |
0137: BSF 20.3 |
0138: MOVF 20,W |
0139: BSF 03.5 |
013A: MOVWF 07 |
013B: NOP |
013C: BCF 03.5 |
013D: BCF 07.4 |
013E: BCF 20.4 |
013F: MOVF 20,W |
0140: BSF 03.5 |
0141: MOVWF 07 |
0142: NOP |
0143: BCF 03.5 |
0144: BCF 07.3 |
0145: BCF 20.3 |
0146: MOVF 20,W |
0147: BSF 03.5 |
0148: MOVWF 07 |
.................... i2c_write(HMC5883L_WRT_ADDR); |
0149: MOVLW 3C |
014A: BCF 03.5 |
014B: MOVWF 2D |
014C: CALL 069 |
.................... i2c_write(HMC5883L_X_MSB_REG); // Point to X-msb register |
014D: MOVLW 03 |
014E: MOVWF 2D |
014F: CALL 069 |
.................... i2c_start(); |
0150: BSF 20.4 |
0151: MOVF 20,W |
0152: BSF 03.5 |
0153: MOVWF 07 |
0154: NOP |
0155: BCF 03.5 |
0156: BSF 20.3 |
0157: MOVF 20,W |
0158: BSF 03.5 |
0159: MOVWF 07 |
015A: NOP |
015B: BCF 03.5 |
015C: BTFSS 07.3 |
015D: GOTO 15C |
015E: BCF 07.4 |
015F: BCF 20.4 |
0160: MOVF 20,W |
0161: BSF 03.5 |
0162: MOVWF 07 |
0163: NOP |
0164: BCF 03.5 |
0165: BCF 07.3 |
0166: BCF 20.3 |
0167: MOVF 20,W |
0168: BSF 03.5 |
0169: MOVWF 07 |
.................... i2c_write(HMC5883L_READ_ADDR); |
016A: MOVLW 3D |
016B: BCF 03.5 |
016C: MOVWF 2D |
016D: CALL 069 |
.................... |
.................... x_msb = i2c_read(); |
016E: MOVLW 01 |
016F: MOVWF 77 |
0170: CALL 0EC |
0171: MOVF 78,W |
0172: MOVWF 28 |
.................... x_lsb = i2c_read(); |
0173: MOVLW 01 |
0174: MOVWF 77 |
0175: CALL 0EC |
0176: MOVF 78,W |
0177: MOVWF 27 |
.................... |
.................... z_msb = i2c_read(); |
0178: MOVLW 01 |
0179: MOVWF 77 |
017A: CALL 0EC |
017B: MOVF 78,W |
017C: MOVWF 2C |
.................... z_lsb = i2c_read(); |
017D: MOVLW 01 |
017E: MOVWF 77 |
017F: CALL 0EC |
0180: MOVF 78,W |
0181: MOVWF 2B |
.................... |
.................... y_msb = i2c_read(); |
0182: MOVLW 01 |
0183: MOVWF 77 |
0184: CALL 0EC |
0185: MOVF 78,W |
0186: MOVWF 2A |
.................... y_lsb = i2c_read(0); // do a NACK on last read |
0187: CLRF 77 |
0188: CALL 0EC |
0189: MOVF 78,W |
018A: MOVWF 29 |
.................... |
.................... i2c_stop(); |
018B: BCF 20.4 |
018C: MOVF 20,W |
018D: BSF 03.5 |
018E: MOVWF 07 |
018F: NOP |
0190: BCF 03.5 |
0191: BSF 20.3 |
0192: MOVF 20,W |
0193: BSF 03.5 |
0194: MOVWF 07 |
0195: BCF 03.5 |
0196: BTFSS 07.3 |
0197: GOTO 196 |
0198: NOP |
0199: GOTO 19A |
019A: NOP |
019B: BSF 20.4 |
019C: MOVF 20,W |
019D: BSF 03.5 |
019E: MOVWF 07 |
019F: NOP |
.................... |
.................... // Combine high and low bytes into 16-bit values. |
.................... compass.x = make16(x_msb, x_lsb); |
01A0: BCF 03.5 |
01A1: MOVF 28,W |
01A2: MOVWF 22 |
01A3: MOVF 27,W |
01A4: MOVWF 21 |
.................... compass.y = make16(y_msb, y_lsb); |
01A5: MOVF 2A,W |
01A6: MOVWF 24 |
01A7: MOVF 29,W |
01A8: MOVWF 23 |
.................... compass.z = make16(z_msb, z_lsb); |
01A9: MOVF 2C,W |
01AA: MOVWF 26 |
01AB: MOVF 2B,W |
01AC: MOVWF 25 |
.................... } |
01AD: BCF 0A.3 |
01AE: BCF 0A.4 |
01AF: GOTO 2CC (RETURN) |
.................... |
.................... |
.................... |
.................... |
.................... #include <math.h> |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... //// (C) Copyright 1996,2008 Custom Computer Services //// |
.................... //// This source code may only be used by licensed users of the CCS C //// |
.................... //// compiler. This source code may only be distributed to other //// |
.................... //// licensed users of the CCS C compiler. No other use, reproduction //// |
.................... //// or distribution is permitted without written permission. //// |
.................... //// Derivative programs created using this software in object code //// |
.................... //// form are not restricted in any way. //// |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... //// //// |
.................... //// History: //// |
.................... //// * 9/20/2001 : Improvments are made to sin/cos code. //// |
.................... //// The code now is small, much faster, //// |
.................... //// and more accurate. //// |
.................... //// * 2/21/2007 : Compiler handles & operator differently and does |
.................... //// not return generic (int8 *) so type cast is done //// |
.................... //// //// |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... |
.................... #ifndef MATH_H |
.................... #define MATH_H |
.................... |
.................... #ifdef PI |
.................... #undef PI |
.................... #endif |
.................... #define PI 3.1415926535897932 |
.................... |
.................... |
.................... #define SQRT2 1.4142135623730950 |
.................... |
.................... //float const ps[4] = {5.9304945, 21.125224, 8.9403076, 0.29730279}; |
.................... //float const qs[4] = {1.0000000, 15.035723, 17.764134, 2.4934718}; |
.................... |
.................... ///////////////////////////// Round Functions ////////////////////////////// |
.................... |
.................... float32 CEIL_FLOOR(float32 x, unsigned int8 n) |
.................... { |
.................... float32 y, res; |
.................... unsigned int16 l; |
.................... int1 s; |
.................... |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y <= 32768.0) |
.................... res = (float32)(unsigned int16)y; |
.................... |
.................... else if (y < 10000000.0) |
.................... { |
.................... l = (unsigned int16)(y/32768.0); |
.................... y = 32768.0*(y/32768.0 - (float32)l); |
.................... res = 32768.0*(float32)l; |
.................... res += (float32)(unsigned int16)y; |
.................... } |
.................... |
.................... else |
.................... res = y; |
.................... |
.................... y = y - (float32)(unsigned int16)y; |
.................... |
.................... if (s) |
.................... res = -res; |
.................... |
.................... if (y != 0) |
.................... { |
.................... if (s == 1 && n == 0) |
.................... res -= 1.0; |
.................... |
.................... if (s == 0 && n == 1) |
.................... res += 1.0; |
.................... } |
.................... if (x == 0) |
.................... res = 0; |
.................... |
.................... return (res); |
.................... } |
.................... |
.................... // Overloaded Functions to take care for new Data types in PCD |
.................... // Overloaded function CEIL_FLOOR() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 CEIL_FLOOR(float48 x, unsigned int8 n) |
.................... { |
.................... float48 y, res; |
.................... unsigned int16 l; |
.................... int1 s; |
.................... |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y <= 32768.0) |
.................... res = (float48)(unsigned int16)y; |
.................... |
.................... else if (y < 10000000.0) |
.................... { |
.................... l = (unsigned int16)(y/32768.0); |
.................... y = 32768.0*(y/32768.0 - (float48)l); |
.................... res = 32768.0*(float32)l; |
.................... res += (float48)(unsigned int16)y; |
.................... } |
.................... |
.................... else |
.................... res = y; |
.................... |
.................... y = y - (float48)(unsigned int16)y; |
.................... |
.................... if (s) |
.................... res = -res; |
.................... |
.................... if (y != 0) |
.................... { |
.................... if (s == 1 && n == 0) |
.................... res -= 1.0; |
.................... |
.................... if (s == 0 && n == 1) |
.................... res += 1.0; |
.................... } |
.................... if (x == 0) |
.................... res = 0; |
.................... |
.................... return (res); |
.................... } |
.................... |
.................... |
.................... // Overloaded function CEIL_FLOOR() for data type - Float64 |
.................... float64 CEIL_FLOOR(float64 x, unsigned int8 n) |
.................... { |
.................... float64 y, res; |
.................... unsigned int16 l; |
.................... int1 s; |
.................... |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y <= 32768.0) |
.................... res = (float64)(unsigned int16)y; |
.................... |
.................... else if (y < 10000000.0) |
.................... { |
.................... l = (unsigned int16)(y/32768.0); |
.................... y = 32768.0*(y/32768.0 - (float64)l); |
.................... res = 32768.0*(float64)l; |
.................... res += (float64)(unsigned int16)y; |
.................... } |
.................... |
.................... else |
.................... res = y; |
.................... |
.................... y = y - (float64)(unsigned int16)y; |
.................... |
.................... if (s) |
.................... res = -res; |
.................... |
.................... if (y != 0) |
.................... { |
.................... if (s == 1 && n == 0) |
.................... res -= 1.0; |
.................... |
.................... if (s == 0 && n == 1) |
.................... res += 1.0; |
.................... } |
.................... if (x == 0) |
.................... res = 0; |
.................... |
.................... return (res); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float floor(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : rounds down the number x. |
.................... // Date : N/A |
.................... // |
.................... float32 floor(float32 x) |
.................... { |
.................... return CEIL_FLOOR(x, 0); |
.................... } |
.................... // Following 2 functions are overloaded functions of floor() for PCD |
.................... // Overloaded function floor() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 floor(float48 x) |
.................... { |
.................... return CEIL_FLOOR(x, 0); |
.................... } |
.................... |
.................... // Overloaded function floor() for data type - Float64 |
.................... float64 floor(float64 x) |
.................... { |
.................... return CEIL_FLOOR(x, 0); |
.................... } |
.................... #endif |
.................... |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float ceil(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : rounds up the number x. |
.................... // Date : N/A |
.................... // |
.................... float32 ceil(float32 x) |
.................... { |
.................... return CEIL_FLOOR(x, 1); |
.................... } |
.................... // Following 2 functions are overloaded functions of ceil() for PCD |
.................... // Overloaded function ceil() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 ceil(float48 x) |
.................... { |
.................... return CEIL_FLOOR(x, 1); |
.................... } |
.................... |
.................... // Overloaded function ceil() for data type - Float64 |
.................... float64 ceil(float64 x) |
.................... { |
.................... return CEIL_FLOOR(x, 1); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float fabs(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : Computes the absolute value of floating point number x |
.................... // Returns : returns the absolute value of x |
.................... // Date : N/A |
.................... // |
.................... #define fabs abs |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float fmod(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : Computes the floating point remainder of x/y |
.................... // Returns : returns the value of x= i*y, for some integer i such that, if y |
.................... // is non zero, the result has the same isgn of x na dmagnitude less than the |
.................... // magnitude of y. If y is zero then a domain error occurs. |
.................... // Date : N/A |
.................... // |
.................... |
.................... float fmod(float32 x,float32 y) |
.................... { |
.................... float32 i; |
.................... if (y!=0.0) |
.................... { |
.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y); |
.................... return(x-(i*y)); |
.................... } |
.................... else |
.................... { |
.................... #ifdef _ERRNO |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... } |
.................... } |
.................... //Overloaded function for fmod() for PCD |
.................... // Overloaded function fmod() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 fmod(float48 x,float48 y) |
.................... { |
.................... float48 i; |
.................... if (y!=0.0) |
.................... { |
.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y); |
.................... return(x-(i*y)); |
.................... } |
.................... else |
.................... { |
.................... #ifdef _ERRNO |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... } |
.................... } |
.................... // Overloaded function fmod() for data type - Float64 |
.................... float64 fmod(float64 x,float64 y) |
.................... { |
.................... float64 i; |
.................... if (y!=0.0) |
.................... { |
.................... i=(x/y < 0.0)? ceil(x/y): floor(x/y); |
.................... return(x-(i*y)); |
.................... } |
.................... else |
.................... { |
.................... #ifdef _ERRNO |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... } |
.................... } |
.................... #endif |
.................... //////////////////// Exponential and logarithmic functions //////////////////// |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float exp(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the value (e^x) |
.................... // Date : N/A |
.................... // |
.................... #define LN2 0.6931471805599453 |
.................... |
.................... float const pe[6] = {0.000207455774, 0.00127100575, 0.00965065093, |
.................... 0.0554965651, 0.240227138, 0.693147172}; |
.................... |
.................... |
.................... float32 exp(float32 x) |
.................... { |
.................... float32 y, res, r; |
.................... #if defined(__PCD__) |
.................... int8 data1; |
.................... #endif |
.................... signed int8 n; |
.................... int1 s; |
.................... #ifdef _ERRNO |
.................... if(x > 88.722838) |
.................... { |
.................... errno=ERANGE; |
.................... return(0); |
.................... } |
.................... #endif |
.................... n = (signed int16)(x/LN2); |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... n = -n; |
.................... y = -y; |
.................... } |
.................... |
.................... res = 0.0; |
.................... #if !defined(__PCD__) |
.................... *((unsigned int8 *)(&res)) = n + 0x7F; |
.................... #endif |
.................... |
.................... #if defined(__PCD__) // Takes care of IEEE format for PCD |
.................... data1 = n+0x7F; |
.................... if(bit_test(data1,0)) |
.................... bit_set(*(((unsigned int8 *)(&res)+2)),7); |
.................... rotate_right(&data1,1); |
.................... bit_clear(data1,7); |
.................... *(((unsigned int8 *)(&res)+3)) = data1; |
.................... #endif |
.................... |
.................... y = y/LN2 - (float32)n; |
.................... |
.................... r = pe[0]*y + pe[1]; |
.................... r = r*y + pe[2]; |
.................... r = r*y + pe[3]; |
.................... r = r*y + pe[4]; |
.................... r = r*y + pe[5]; |
.................... |
.................... res = res*(1.0 + y*r); |
.................... |
.................... if (s) |
.................... res = 1.0/res; |
.................... return(res); |
.................... } |
.................... |
.................... |
.................... //Overloaded function for exp() for PCD |
.................... // Overloaded function exp() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 exp(float48 x) |
.................... { |
.................... float48 y, res, r; |
.................... int8 data1; |
.................... signed int8 n; |
.................... int1 s; |
.................... #ifdef _ERRNO |
.................... if(x > 88.722838) |
.................... { |
.................... errno=ERANGE; |
.................... return(0); |
.................... } |
.................... #endif |
.................... n = (signed int16)(x/LN2); |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... n = -n; |
.................... y = -y; |
.................... } |
.................... |
.................... res = 0.0; |
.................... |
.................... data1 = n+0x7F; |
.................... if(bit_test(data1,0)) |
.................... bit_set(*(((unsigned int8 *)(&res)+4)),7); |
.................... rotate_right(&data1,1); |
.................... bit_clear(data1,7); |
.................... *(((unsigned int8 *)(&res)+5)) = data1; |
.................... |
.................... y = y/LN2 - (float48)n; |
.................... |
.................... r = pe[0]*y + pe[1]; |
.................... r = r*y + pe[2]; |
.................... r = r*y + pe[3]; |
.................... r = r*y + pe[4]; |
.................... r = r*y + pe[5]; |
.................... |
.................... res = res*(1.0 + y*r); |
.................... |
.................... if (s) |
.................... res = 1.0/res; |
.................... return(res); |
.................... } |
.................... |
.................... // Overloaded function exp() for data type - Float64 |
.................... float64 exp(float64 x) |
.................... { |
.................... float64 y, res, r; |
.................... unsigned int16 data1, data2; |
.................... unsigned int16 *p; |
.................... signed int16 n; |
.................... int1 s; |
.................... #ifdef _ERRNO |
.................... if(x > 709.7827128) |
.................... { |
.................... errno=ERANGE; |
.................... return(0); |
.................... } |
.................... #endif |
.................... n = (signed int16)(x/LN2); |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... n = -n; |
.................... y = -y; |
.................... } |
.................... |
.................... res = 0.0; |
.................... |
.................... #if !defined(__PCD__) |
.................... *((unsigned int16 *)(&res)) = n + 0x7F; |
.................... #endif |
.................... p= (((unsigned int16 *)(&res))+3); |
.................... data1 = *p; |
.................... data2 = *p; |
.................... data1 = n + 0x3FF; |
.................... data1 = data1 <<4; |
.................... if(bit_test(data2,15)) |
.................... bit_set(data1,15); |
.................... data2 = data2 & 0x000F; |
.................... data1 ^= data2; |
.................... |
.................... *(((unsigned int16 *)(&res)+3)) = data1; |
.................... |
.................... |
.................... y = y/LN2 - (float64)n; |
.................... |
.................... r = pe[0]*y + pe[1]; |
.................... r = r*y + pe[2]; |
.................... r = r*y + pe[3]; |
.................... r = r*y + pe[4]; |
.................... r = r*y + pe[5]; |
.................... |
.................... res = res*(1.0 + y*r); |
.................... |
.................... if (s) |
.................... res = 1.0/res; |
.................... return(res); |
.................... } |
.................... |
.................... #ENDIF |
.................... |
.................... |
.................... /************************************************************/ |
.................... |
.................... float32 const pl[4] = {0.45145214, -9.0558803, 26.940971, -19.860189}; |
.................... float32 const ql[4] = {1.0000000, -8.1354259, 16.780517, -9.9300943}; |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float log(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the the natural log of x |
.................... // Date : N/A |
.................... // |
.................... float32 log(float32 x) |
.................... { |
.................... float32 y, res, r, y2; |
.................... #if defined(__PCD__) |
.................... unsigned int8 data1,data2; |
.................... #endif |
.................... signed int8 n; |
.................... #ifdef _ERRNO |
.................... if(x <0) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... if(x ==0) |
.................... { |
.................... errno=ERANGE; |
.................... return(0); |
.................... } |
.................... #endif |
.................... y = x; |
.................... |
.................... if (y != 1.0) |
.................... { |
.................... #if !defined(__PCD__) |
.................... *((unsigned int8 *)(&y)) = 0x7E; |
.................... #endif |
.................... |
.................... #if defined(__PCD__) // Takes care of IEEE format |
.................... data2 = *(((unsigned int8 *)(&y))+3); |
.................... *(((unsigned int8 *)(&y))+3) = 0x3F; |
.................... data1 = *(((unsigned int8 *)(&y))+2); |
.................... bit_clear(data1,7); |
.................... *(((unsigned int8 *)(&y))+2) = data1; |
.................... if(bit_test(data2,7)) |
.................... bit_set(*(((unsigned int8 *)(&y))+3),7); |
.................... #endif |
.................... |
.................... y = (y - 1.0)/(y + 1.0); |
.................... |
.................... y2=y*y; |
.................... |
.................... res = pl[0]*y2 + pl[1]; |
.................... res = res*y2 + pl[2]; |
.................... res = res*y2 + pl[3]; |
.................... |
.................... r = ql[0]*y2 + ql[1]; |
.................... r = r*y2 + ql[2]; |
.................... r = r*y2 + ql[3]; |
.................... |
.................... res = y*res/r; |
.................... #if !defined(__PCD__) |
.................... n = *((unsigned int8 *)(&x)) - 0x7E; |
.................... #endif |
.................... #if defined(__PCD__) |
.................... data1 = *(((unsigned int8 *)(&x)+3)); |
.................... rotate_left(&data1,1); |
.................... data2 = *(((unsigned int8 *)(&x)+2)); |
.................... if(bit_test (data2,7)) |
.................... bit_set(data1,0); |
.................... n = data1 - 0x7E; |
.................... #endif |
.................... |
.................... if (n<0) |
.................... r = -(float32)-n; |
.................... else |
.................... r = (float32)n; |
.................... |
.................... res += r*LN2; |
.................... } |
.................... |
.................... else |
.................... res = 0.0; |
.................... |
.................... return(res); |
.................... } |
.................... |
.................... //Overloaded function for log() for PCD |
.................... // Overloaded function log() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 log(float48 x) |
.................... { |
.................... float48 y, res, r, y2; |
.................... unsigned int8 data1,data2; |
.................... signed int8 n; |
.................... #ifdef _ERRNO |
.................... if(x <0) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... if(x ==0) |
.................... { |
.................... errno=ERANGE; |
.................... return(0); |
.................... } |
.................... #endif |
.................... y = x; |
.................... |
.................... if (y != 1.0) |
.................... { |
.................... |
.................... #if !defined(__PCD__) |
.................... *((unsigned int8 *)(&y)) = 0x7E; |
.................... #endif |
.................... data2 = *(((unsigned int8 *)(&y))+5); |
.................... *(((unsigned int8 *)(&y))+5) = 0x3F; |
.................... data1 = *(((unsigned int8 *)(&y))+4); |
.................... bit_clear(data1,7); |
.................... *(((unsigned int8 *)(&y))+4) = data1; |
.................... |
.................... if(bit_test(data2,7)) |
.................... bit_set(*(((unsigned int8 *)(&y))+4),7); |
.................... y = (y - 1.0)/(y + 1.0); |
.................... |
.................... y2=y*y; |
.................... |
.................... res = pl[0]*y2 + pl[1]; |
.................... res = res*y2 + pl[2]; |
.................... res = res*y2 + pl[3]; |
.................... |
.................... r = ql[0]*y2 + ql[1]; |
.................... r = r*y2 + ql[2]; |
.................... r = r*y2 + ql[3]; |
.................... |
.................... res = y*res/r; |
.................... |
.................... data1 = *(((unsigned int8 *)(&x)+5)); |
.................... rotate_left(&data1,1); |
.................... data2 = *(((unsigned int8 *)(&x)+4)); |
.................... if(bit_test (data2,7)) |
.................... bit_set(data1,0); |
.................... |
.................... n = data1 - 0x7E; |
.................... |
.................... if (n<0) |
.................... r = -(float48)-n; |
.................... else |
.................... r = (float48)n; |
.................... |
.................... res += r*LN2; |
.................... } |
.................... |
.................... else |
.................... res = 0.0; |
.................... |
.................... return(res); |
.................... } |
.................... |
.................... // Overloaded function log() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float32 const pl_64[4] = {0.45145214, -9.0558803, 26.940971, -19.860189}; |
.................... float32 const ql_64[4] = {1.0000000, -8.1354259, 16.780517, -9.9300943}; |
.................... #endif |
.................... float64 log(float64 x) |
.................... { |
.................... float64 y, res, r, y2; |
.................... unsigned int16 data1,data2; |
.................... unsigned int16 *p; |
.................... signed int16 n; |
.................... #ifdef _ERRNO |
.................... if(x <0) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... if(x ==0) |
.................... { |
.................... errno=ERANGE; |
.................... return(0); |
.................... } |
.................... #endif |
.................... y = x; |
.................... |
.................... if (y != 1.0) |
.................... { |
.................... #if !defined(__PCD__) |
.................... *((unsigned int8 *)(&y)) = 0x7E; |
.................... #endif |
.................... p= (((unsigned int16 *)(&y))+3); |
.................... data1 = *p; |
.................... data2 = *p; |
.................... data1 = 0x3FE; |
.................... data1 = data1 <<4; |
.................... if(bit_test (data2,15)) |
.................... bit_set(data1,15); |
.................... data2 = data2 & 0x000F; |
.................... data1 ^=data2; |
.................... |
.................... *p = data1; |
.................... |
.................... y = (y - 1.0)/(y + 1.0); |
.................... |
.................... y2=y*y; |
.................... |
.................... res = pl_64[0]*y2 + pl_64[1]; |
.................... res = res*y2 + pl_64[2]; |
.................... res = res*y2 + pl_64[3]; |
.................... |
.................... r = ql_64[0]*y2 + ql_64[1]; |
.................... r = r*y2 + ql_64[2]; |
.................... r = r*y2 + ql_64[3]; |
.................... |
.................... res = y*res/r; |
.................... |
.................... p= (((unsigned int16 *)(&x))+3); |
.................... data1 = *p; |
.................... bit_clear(data1,15); |
.................... data1 = data1 >>4; |
.................... n = data1 - 0x3FE; |
.................... |
.................... |
.................... if (n<0) |
.................... r = -(float64)-n; |
.................... else |
.................... r = (float64)n; |
.................... |
.................... res += r*LN2; |
.................... } |
.................... |
.................... else |
.................... res = 0.0; |
.................... |
.................... return(res); |
.................... } |
.................... #endif |
.................... |
.................... |
.................... #define LN10 2.3025850929940456 |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float log10(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the the log base 10 of x |
.................... // Date : N/A |
.................... // |
.................... float32 log10(float32 x) |
.................... { |
.................... float32 r; |
.................... |
.................... r = log(x); |
.................... r = r/LN10; |
.................... return(r); |
.................... } |
.................... |
.................... //Overloaded functions for log10() for PCD |
.................... // Overloaded function log10() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 log10(float48 x) |
.................... { |
.................... float48 r; |
.................... |
.................... r = log(x); |
.................... r = r/LN10; |
.................... return(r); |
.................... } |
.................... |
.................... // Overloaded function log10() for data type - Float64 |
.................... float64 log10(float64 x) |
.................... { |
.................... float64 r; |
.................... |
.................... r = log(x); |
.................... r = r/LN10; |
.................... return(r); |
.................... } |
.................... #endif |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float modf(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description :breaks the argument value int integral and fractional parts, |
.................... // ach of which have the same sign as the argument. It stores the integral part |
.................... // as a float in the object pointed to by the iptr |
.................... // Returns : returns the signed fractional part of value. |
.................... // Date : N/A |
.................... // |
.................... |
.................... float32 modf(float32 value,float32 *iptr) |
.................... { |
.................... *iptr=(value < 0.0)? ceil(value): floor(value); |
.................... return(value - *iptr); |
.................... } |
.................... //Overloaded functions for modf() for PCD |
.................... // Overloaded function modf() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 modf(float48 value,float48 *iptr) |
.................... { |
.................... *iptr=(value < 0.0)? ceil(value): floor(value); |
.................... return(value - *iptr); |
.................... } |
.................... // Overloaded function modf() for data type - Float64 |
.................... float64 modf(float64 value,float64 *iptr) |
.................... { |
.................... *iptr=(value < 0.0)? ceil(value): floor(value); |
.................... return(value - *iptr); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float pwr(float x,float y) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the value (x^y) |
.................... // Date : N/A |
.................... // Note : 0 is returned when the function will generate an imaginary number |
.................... // |
.................... float32 pwr(float32 x,float32 y) |
.................... { |
.................... if(0 > x && fmod(y, 1) == 0) { |
.................... if(fmod(y, 2) == 0) { |
.................... return (exp(log(-x) * y)); |
.................... } else { |
.................... return (-exp(log(-x) * y)); |
.................... } |
.................... } else if(0 > x && fmod(y, 1) != 0) { |
.................... return 0; |
.................... } else { |
.................... if(x != 0 || 0 >= y) { |
.................... return (exp(log(x) * y)); |
.................... } |
.................... } |
.................... } |
.................... //Overloaded functions for pwr() for PCD |
.................... // Overloaded function pwr() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 pwr(float48 x,float48 y) |
.................... { |
.................... if(0 > x && fmod(y, 1) == 0) { |
.................... if(fmod(y, 2) == 0) { |
.................... return (exp(log(-x) * y)); |
.................... } else { |
.................... return (-exp(log(-x) * y)); |
.................... } |
.................... } else if(0 > x && fmod(y, 1) != 0) { |
.................... return 0; |
.................... } else { |
.................... if(x != 0 || 0 >= y) { |
.................... return (exp(log(x) * y)); |
.................... } |
.................... } |
.................... } |
.................... // Overloaded function pwr() for data type - Float64 |
.................... float64 pwr(float64 x,float64 y) |
.................... { |
.................... if(0 > x && fmod(y, 1) == 0) { |
.................... if(fmod(y, 2) == 0) { |
.................... return (exp(log(-x) * y)); |
.................... } else { |
.................... return (-exp(log(-x) * y)); |
.................... } |
.................... } else if(0 > x && fmod(y, 1) != 0) { |
.................... return 0; |
.................... } else { |
.................... if(x != 0 || 0 >= y) { |
.................... return (exp(log(x) * y)); |
.................... } |
.................... } |
.................... } |
.................... #endif |
.................... |
.................... //////////////////// Power functions //////////////////// |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float pow(float x,float y) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the value (x^y) |
.................... // Date : N/A |
.................... // Note : 0 is returned when the function will generate an imaginary number |
.................... // |
.................... float32 pow(float32 x,float32 y) |
.................... { |
.................... if(0 > x && fmod(y, 1) == 0) { |
.................... if(fmod(y, 2) == 0) { |
.................... return (exp(log(-x) * y)); |
.................... } else { |
.................... return (-exp(log(-x) * y)); |
.................... } |
.................... } else if(0 > x && fmod(y, 1) != 0) { |
.................... return 0; |
.................... } else { |
.................... if(x != 0 || 0 >= y) { |
.................... return (exp(log(x) * y)); |
.................... } |
.................... } |
.................... } |
.................... //Overloaded functions for pow() for PCD |
.................... // Overloaded function for pow() data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 pow(float48 x,float48 y) |
.................... { |
.................... if(0 > x && fmod(y, 1) == 0) { |
.................... if(fmod(y, 2) == 0) { |
.................... return (exp(log(-x) * y)); |
.................... } else { |
.................... return (-exp(log(-x) * y)); |
.................... } |
.................... } else if(0 > x && fmod(y, 1) != 0) { |
.................... return 0; |
.................... } else { |
.................... if(x != 0 || 0 >= y) { |
.................... return (exp(log(x) * y)); |
.................... } |
.................... } |
.................... } |
.................... |
.................... // Overloaded function pow() for data type - Float64 |
.................... float64 pow(float64 x,float64 y) |
.................... { |
.................... if(0 > x && fmod(y, 1) == 0) { |
.................... if(fmod(y, 2) == 0) { |
.................... return (exp(log(-x) * y)); |
.................... } else { |
.................... return (-exp(log(-x) * y)); |
.................... } |
.................... } else if(0 > x && fmod(y, 1) != 0) { |
.................... return 0; |
.................... } else { |
.................... if(x != 0 || 0 >= y) { |
.................... return (exp(log(x) * y)); |
.................... } |
.................... } |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float sqrt(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the square root of x |
.................... // Date : N/A |
.................... // |
.................... float32 sqrt(float32 x) |
.................... { |
.................... float32 y, res; |
.................... #if defined(__PCD__) |
.................... unsigned int16 data1,data2; |
.................... #endif |
.................... BYTE *p; |
.................... |
.................... #ifdef _ERRNO |
.................... if(x < 0) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... |
.................... if( x<=0.0) |
.................... return(0.0); |
.................... |
.................... y=x; |
.................... |
.................... #if !defined(__PCD__) |
.................... p=&y; |
.................... (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1); |
.................... #endif |
.................... |
.................... #if defined(__PCD__) |
.................... p = (((unsigned int8 *)(&y))+3); |
.................... data1 = *(((unsigned int8 *)(&y))+3); |
.................... data2 = *(((unsigned int8 *)(&y))+2); |
.................... rotate_left(&data1,1); |
.................... if(bit_test(data2,7)) |
.................... bit_set(data1,0); |
.................... data1 = ((data1+127) >>1); |
.................... bit_clear(data2,7); |
.................... if(bit_test(data1,0)) |
.................... bit_set(data2,7); |
.................... data1 = data1 >>1; |
.................... *(((unsigned int8 *)(&y))+3) = data1; |
.................... *(((unsigned int8 *)(&y))+2) = data2; |
.................... |
.................... #endif |
.................... |
.................... do { |
.................... res=y; |
.................... y+=(x/y); |
.................... |
.................... #if !defined(__PCD__) |
.................... (*p)--; |
.................... #endif |
.................... |
.................... #if defined(__PCD__) |
.................... data1 = *(((unsigned int8 *)(&y))+3); |
.................... data2 = *(((unsigned int8 *)(&y))+2); |
.................... rotate_left(&data1,1); |
.................... if(bit_test(data2,7)) |
.................... bit_set(data1,0); |
.................... data1--; |
.................... bit_clear(data2,7); |
.................... if(bit_test(data1,0)) |
.................... bit_set(data2,7); |
.................... data1 = data1 >>1; |
.................... *(((unsigned int8 *)(&y))+3) = data1; |
.................... *(((unsigned int8 *)(&y))+2) = data2; |
.................... |
.................... #endif |
.................... } while(res != y); |
.................... |
.................... return(res); |
.................... } |
.................... //Overloaded functions for sqrt() for PCD |
.................... // Overloaded function sqrt() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 sqrt(float48 x) |
.................... { |
.................... float48 y, res; |
.................... unsigned int16 data1,data2; |
.................... BYTE *p; |
.................... |
.................... #ifdef _ERRNO |
.................... if(x < 0) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... |
.................... if( x<=0.0) |
.................... return(0.0); |
.................... |
.................... y=x; |
.................... |
.................... #if !defined(__PCD__) |
.................... p=&y; |
.................... (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1); |
.................... #endif |
.................... |
.................... #if defined(__PCD__) |
.................... p = (((unsigned int8 *)(&y))+5); |
.................... data1 = *(((unsigned int8 *)(&y))+5); |
.................... data2 = *(((unsigned int8 *)(&y))+4); |
.................... rotate_left(&data1,1); |
.................... if(bit_test(data2,7)) |
.................... bit_set(data1,0); |
.................... data1 = ((data1+127) >>1); |
.................... bit_clear(data2,7); |
.................... if(bit_test(data1,0)) |
.................... bit_set(data2,7); |
.................... data1 = data1 >>1; |
.................... *(((unsigned int8 *)(&y))+5) = data1; |
.................... *(((unsigned int8 *)(&y))+4) = data2; |
.................... |
.................... #endif |
.................... |
.................... do { |
.................... res=y; |
.................... y+=(x/y); |
.................... |
.................... #if !defined(__PCD__) |
.................... (*p)--; |
.................... #endif |
.................... |
.................... data1 = *(((unsigned int8 *)(&y))+5); |
.................... data2 = *(((unsigned int8 *)(&y))+4); |
.................... rotate_left(&data1,1); |
.................... if(bit_test(data2,7)) |
.................... bit_set(data1,0); |
.................... data1--; |
.................... bit_clear(data2,7); |
.................... if(bit_test(data1,0)) |
.................... bit_set(data2,7); |
.................... data1 = data1 >>1; |
.................... *(((unsigned int8 *)(&y))+5) = data1; |
.................... *(((unsigned int8 *)(&y))+4) = data2; |
.................... |
.................... } while(res != y); |
.................... |
.................... return(res); |
.................... } |
.................... |
.................... // Overloaded function sqrt() for data type - Float64 |
.................... float64 sqrt(float64 x) |
.................... { |
.................... float64 y, res; |
.................... unsigned int16 *p; |
.................... unsigned int16 temp1,temp2; |
.................... |
.................... #ifdef _ERRNO |
.................... if(x < 0) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... |
.................... if( x<=0.0) |
.................... return(0.0); |
.................... |
.................... y=x; |
.................... p= (((unsigned int16 *)(&y))+3); |
.................... temp1 = *p; |
.................... temp2 = *p; |
.................... bit_clear(temp1,15); |
.................... temp1 = (temp1>>4)+1023; |
.................... temp1 = temp1 >> 1; |
.................... temp1 = (temp1<<4) & 0xFFF0; |
.................... if(bit_test(temp2,15)) |
.................... bit_set(temp1,15); |
.................... temp2 = temp2 & 0x000F; |
.................... temp1 ^= temp2; |
.................... |
.................... (*p) = temp1; |
.................... |
.................... do { |
.................... res=y; |
.................... y+=(x/y); |
.................... temp1 = *p; |
.................... temp2 = *p; |
.................... bit_clear(temp1,15); |
.................... temp1 = (temp1>>4); |
.................... temp1--; |
.................... temp1 = (temp1<<4) & 0xFFF0; |
.................... if(bit_test(temp2,15)) |
.................... bit_set(temp1,15); |
.................... temp2 = temp2 & 0x000F; |
.................... temp1 ^= temp2; |
.................... (*p) = temp1; |
.................... |
.................... } while(res != y); |
.................... |
.................... return(res); |
.................... } |
.................... #endif |
.................... |
.................... ////////////////////////////// Trig Functions ////////////////////////////// |
.................... #ifdef PI_DIV_BY_TWO |
.................... #undef PI_DIV_BY_TWO |
.................... #endif |
.................... #define PI_DIV_BY_TWO 1.5707963267948966 |
.................... #ifdef TWOBYPI |
.................... #undef TWOBYPI |
.................... #define TWOBYPI 0.6366197723675813 |
.................... #endif |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float cos(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the cosine value of the angle x, which is in radian |
.................... // Date : 9/20/2001 |
.................... // |
.................... float32 cos(float32 x) |
.................... { |
.................... float32 y, t, t2 = 1.0; |
.................... unsigned int8 quad, i; |
.................... float32 frac; |
.................... float32 p[6] = { //by the series definition for cosine |
.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ) |
.................... 0.04166666666667, |
.................... -0.00138888888889, |
.................... 0.00002480158730, |
.................... -0.00000027557319, |
.................... 0.00000000208767, |
.................... //-0.00000000001147, |
.................... // 0.00000000000005 |
.................... }; |
.................... |
.................... if (x < 0) x = -x; // absolute value of input |
.................... |
.................... quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant |
.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input |
.................... quad = quad % 4; // quadrant (0 to 3) |
.................... |
.................... if (quad == 0 || quad == 2) |
.................... t = frac * PI_DIV_BY_TWO; |
.................... else if (quad == 1) |
.................... t = (1-frac) * PI_DIV_BY_TWO; |
.................... else // should be 3 |
.................... t = (frac-1) * PI_DIV_BY_TWO; |
.................... |
.................... y = 1.0; |
.................... t = t * t; |
.................... for (i = 0; i <= 5; i++) |
.................... { |
.................... t2 = t2 * t; |
.................... y = y + p[i] * t2; |
.................... } |
.................... |
.................... if (quad == 2 || quad == 1) |
.................... y = -y; // correct sign |
.................... |
.................... return (y); |
.................... } |
.................... |
.................... |
.................... //Overloaded functions for cos() for PCD |
.................... // Overloaded function cos() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 cos(float48 x) |
.................... { |
.................... float48 y, t, t2 = 1.0; |
.................... unsigned int8 quad, i; |
.................... float48 frac; |
.................... float48 p[6] = { //by the series definition for cosine |
.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ) |
.................... 0.04166666666667, |
.................... -0.00138888888889, |
.................... 0.00002480158730, |
.................... -0.00000027557319, |
.................... 0.00000000208767, |
.................... //-0.00000000001147, |
.................... // 0.00000000000005 |
.................... }; |
.................... |
.................... if (x < 0) x = -x; // absolute value of input |
.................... |
.................... quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant |
.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input |
.................... quad = quad % 4; // quadrant (0 to 3) |
.................... |
.................... if (quad == 0 || quad == 2) |
.................... t = frac * PI_DIV_BY_TWO; |
.................... else if (quad == 1) |
.................... t = (1-frac) * PI_DIV_BY_TWO; |
.................... else // should be 3 |
.................... t = (frac-1) * PI_DIV_BY_TWO; |
.................... |
.................... y = 0.999999999781; |
.................... t = t * t; |
.................... for (i = 0; i <= 5; i++) |
.................... { |
.................... t2 = t2 * t; |
.................... y = y + p[i] * t2; |
.................... } |
.................... |
.................... if (quad == 2 || quad == 1) |
.................... y = -y; // correct sign |
.................... |
.................... return (y); |
.................... } |
.................... |
.................... // Overloaded function cos() for data type - Float48 |
.................... float64 cos(float64 x) |
.................... { |
.................... float64 y, t, t2 = 1.0; |
.................... unsigned int8 quad, i; |
.................... float64 frac; |
.................... float64 p[6] = { //by the series definition for cosine |
.................... -0.5, // sum ( ( (-1)^n * x^2n )/(2n)! ) |
.................... 0.04166666666667, |
.................... -0.00138888888889, |
.................... 0.00002480158730, |
.................... -0.00000027557319, |
.................... 0.00000000208767, |
.................... //-0.00000000001147, |
.................... // 0.00000000000005 |
.................... }; |
.................... |
.................... if (x < 0) x = -x; // absolute value of input |
.................... |
.................... quad = (unsigned int8)(x / PI_DIV_BY_TWO); // quadrant |
.................... frac = (x / PI_DIV_BY_TWO) - quad; // fractional part of input |
.................... quad = quad % 4; // quadrant (0 to 3) |
.................... |
.................... if (quad == 0 || quad == 2) |
.................... t = frac * PI_DIV_BY_TWO; |
.................... else if (quad == 1) |
.................... t = (1-frac) * PI_DIV_BY_TWO; |
.................... else // should be 3 |
.................... t = (frac-1) * PI_DIV_BY_TWO; |
.................... |
.................... y = 0.999999999781; |
.................... t = t * t; |
.................... for (i = 0; i <= 5; i++) |
.................... { |
.................... t2 = t2 * t; |
.................... y = y + p[i] * t2; |
.................... } |
.................... |
.................... if (quad == 2 || quad == 1) |
.................... y = -y; // correct sign |
.................... |
.................... return (y); |
.................... } |
.................... |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float sin(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the sine value of the angle x, which is in radian |
.................... // Date : 9/20/2001 |
.................... // |
.................... float32 sin(float32 x) |
.................... { |
.................... return cos(x - PI_DIV_BY_TWO); |
.................... } |
.................... |
.................... //Overloaded functions for sin() for PCD |
.................... // Overloaded function sin() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 sin(float48 x) |
.................... { |
.................... return cos(x - PI_DIV_BY_TWO); |
.................... } |
.................... |
.................... // Overloaded function sin() for data type - Float48 |
.................... float64 sin(float64 x) |
.................... { |
.................... return cos(x - PI_DIV_BY_TWO); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float tan(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the tangent value of the angle x, which is in radian |
.................... // Date : 9/20/2001 |
.................... // |
.................... float32 tan(float32 x) |
.................... { |
.................... float32 c, s; |
.................... |
.................... c = cos(x); |
.................... if (c == 0.0) |
.................... return (1.0e+36); |
.................... |
.................... s = sin(x); |
.................... return(s/c); |
.................... } |
.................... //Overloaded functions for tan() for PCD |
.................... // Overloaded function tan() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 tan(float48 x) |
.................... { |
.................... float48 c, s; |
.................... |
.................... c = cos(x); |
.................... if (c == 0.0) |
.................... return (1.0e+36); |
.................... |
.................... s = sin(x); |
.................... return(s/c); |
.................... } |
.................... |
.................... // Overloaded function tan() for data type - Float48 |
.................... float64 tan(float64 x) |
.................... { |
.................... float64 c, s; |
.................... |
.................... c = cos(x); |
.................... if (c == 0.0) |
.................... return (1.0e+36); |
.................... |
.................... s = sin(x); |
.................... return(s/c); |
.................... } |
.................... #endif |
.................... |
.................... float32 const pas[3] = {0.49559947, -4.6145309, 5.6036290}; |
.................... float32 const qas[3] = {1.0000000, -5.5484666, 5.6036290}; |
.................... |
.................... float32 ASIN_COS(float32 x, unsigned int8 n) |
.................... { |
.................... float32 y, res, r, y2; |
.................... int1 s; |
.................... #ifdef _ERRNO |
.................... if(x <-1 || x > 1) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y > 0.5) |
.................... { |
.................... y = sqrt((1.0 - y)/2.0); |
.................... n += 2; |
.................... } |
.................... |
.................... y2=y*y; |
.................... |
.................... res = pas[0]*y2 + pas[1]; |
.................... res = res*y2 + pas[2]; |
.................... |
.................... r = qas[0]*y2 + qas[1]; |
.................... r = r*y2 + qas[2]; |
.................... |
.................... res = y*res/r; |
.................... |
.................... if (n & 2) // |x| > 0.5 |
.................... res = PI_DIV_BY_TWO - 2.0*res; |
.................... if (s) |
.................... res = -res; |
.................... if (n & 1) // take arccos |
.................... res = PI_DIV_BY_TWO - res; |
.................... |
.................... return(res); |
.................... } |
.................... |
.................... //Overloaded functions for ASIN_COS() for PCD |
.................... // Overloaded function ASIN_COS() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 ASIN_COS(float48 x, unsigned int8 n) |
.................... { |
.................... float48 y, res, r, y2; |
.................... int1 s; |
.................... #ifdef _ERRNO |
.................... if(x <-1 || x > 1) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y > 0.5) |
.................... { |
.................... y = sqrt((1.0 - y)/2.0); |
.................... n += 2; |
.................... } |
.................... |
.................... y2=y*y; |
.................... |
.................... res = pas[0]*y2 + pas[1]; |
.................... res = res*y2 + pas[2]; |
.................... |
.................... r = qas[0]*y2 + qas[1]; |
.................... r = r*y2 + qas[2]; |
.................... |
.................... res = y*res/r; |
.................... |
.................... if (n & 2) // |x| > 0.5 |
.................... res = PI_DIV_BY_TWO - 2.0*res; |
.................... if (s) |
.................... res = -res; |
.................... if (n & 1) // take arccos |
.................... res = PI_DIV_BY_TWO - res; |
.................... |
.................... return(res); |
.................... } |
.................... |
.................... // Overloaded function ASIN_COS() for data type - Float64 |
.................... float64 ASIN_COS(float64 x, unsigned int8 n) |
.................... { |
.................... float64 y, res, r, y2; |
.................... int1 s; |
.................... #ifdef _ERRNO |
.................... if(x <-1 || x > 1) |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... s = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y > 0.5) |
.................... { |
.................... y = sqrt((1.0 - y)/2.0); |
.................... n += 2; |
.................... } |
.................... |
.................... y2=y*y; |
.................... |
.................... res = pas[0]*y2 + pas[1]; |
.................... res = res*y2 + pas[2]; |
.................... |
.................... r = qas[0]*y2 + qas[1]; |
.................... r = r*y2 + qas[2]; |
.................... |
.................... res = y*res/r; |
.................... |
.................... if (n & 2) // |x| > 0.5 |
.................... res = PI_DIV_BY_TWO - 2.0*res; |
.................... if (s) |
.................... res = -res; |
.................... if (n & 1) // take arccos |
.................... res = PI_DIV_BY_TWO - res; |
.................... |
.................... return(res); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float asin(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the arcsine value of the value x. |
.................... // Date : N/A |
.................... // |
.................... float32 asin(float32 x) |
.................... { |
.................... float32 r; |
.................... |
.................... r = ASIN_COS(x, 0); |
.................... return(r); |
.................... } |
.................... //Overloaded functions for asin() for PCD |
.................... // Overloaded function asin() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 asin(float48 x) |
.................... { |
.................... float48 r; |
.................... |
.................... r = ASIN_COS(x, 0); |
.................... return(r); |
.................... } |
.................... |
.................... // Overloaded function asin() for data type - Float64 |
.................... float64 asin(float64 x) |
.................... { |
.................... float64 r; |
.................... |
.................... r = ASIN_COS(x, 0); |
.................... return(r); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float acos(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the arccosine value of the value x. |
.................... // Date : N/A |
.................... // |
.................... float32 acos(float32 x) |
.................... { |
.................... float32 r; |
.................... |
.................... r = ASIN_COS(x, 1); |
.................... return(r); |
.................... } |
.................... //Overloaded functions for acos() for PCD |
.................... // Overloaded function acos() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 acos(float48 x) |
.................... { |
.................... float48 r; |
.................... |
.................... r = ASIN_COS(x, 1); |
.................... return(r); |
.................... } |
.................... |
.................... // Overloaded function acos() for data type - Float64 |
.................... float64 acos(float64 x) |
.................... { |
.................... float64 r; |
.................... |
.................... r = ASIN_COS(x, 1); |
.................... return(r); |
.................... } |
.................... #endif |
.................... |
.................... float32 const pat[4] = {0.17630401, 5.6710795, 22.376096, 19.818457}; |
.................... float32 const qat[4] = {1.0000000, 11.368190, 28.982246, 19.818457}; |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float atan(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : returns the arctangent value of the value x. |
.................... // Date : N/A |
.................... // |
.................... float32 atan(float32 x) |
.................... { |
.................... float32 y, res, r; |
.................... int1 s, flag; |
.................... |
.................... s = 0; |
.................... flag = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y > 1.0) |
.................... { |
.................... y = 1.0/y; |
.................... flag = 1; |
.................... } |
.................... |
.................... res = pat[0]*y*y + pat[1]; |
.................... res = res*y*y + pat[2]; |
.................... res = res*y*y + pat[3]; |
.................... |
.................... r = qat[0]*y*y + qat[1]; |
.................... r = r*y*y + qat[2]; |
.................... r = r*y*y + qat[3]; |
.................... |
.................... res = y*res/r; |
.................... |
.................... |
.................... if (flag) // for |x| > 1 |
.................... res = PI_DIV_BY_TWO - res; |
.................... if (s) |
.................... res = -res; |
.................... |
.................... return(res); |
.................... } |
.................... //Overloaded functions for atan() for PCD |
.................... // Overloaded function atan() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 atan(float48 x) |
.................... { |
.................... float48 y, res, r; |
.................... int1 s, flag; |
.................... |
.................... s = 0; |
.................... flag = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y > 1.0) |
.................... { |
.................... y = 1.0/y; |
.................... flag = 1; |
.................... } |
.................... |
.................... res = pat[0]*y*y + pat[1]; |
.................... res = res*y*y + pat[2]; |
.................... res = res*y*y + pat[3]; |
.................... |
.................... r = qat[0]*y*y + qat[1]; |
.................... r = r*y*y + qat[2]; |
.................... r = r*y*y + qat[3]; |
.................... |
.................... res = y*res/r; |
.................... |
.................... |
.................... if (flag) // for |x| > 1 |
.................... res = PI_DIV_BY_TWO - res; |
.................... if (s) |
.................... res = -res; |
.................... |
.................... return(res); |
.................... } |
.................... |
.................... // Overloaded function atan() for data type - Float64 |
.................... float64 atan(float64 x) |
.................... { |
.................... float64 y, res, r; |
.................... int1 s, flag; |
.................... |
.................... s = 0; |
.................... flag = 0; |
.................... y = x; |
.................... |
.................... if (x < 0) |
.................... { |
.................... s = 1; |
.................... y = -y; |
.................... } |
.................... |
.................... if (y > 1.0) |
.................... { |
.................... y = 1.0/y; |
.................... flag = 1; |
.................... } |
.................... |
.................... res = pat[0]*y*y + pat[1]; |
.................... res = res*y*y + pat[2]; |
.................... res = res*y*y + pat[3]; |
.................... |
.................... r = qat[0]*y*y + qat[1]; |
.................... r = r*y*y + qat[2]; |
.................... r = r*y*y + qat[3]; |
.................... |
.................... res = y*res/r; |
.................... |
.................... |
.................... if (flag) // for |x| > 1 |
.................... res = PI_DIV_BY_TWO - res; |
.................... if (s) |
.................... res = -res; |
.................... |
.................... return(res); |
.................... } |
.................... #endif |
.................... |
.................... ///////////////////////////////////////////////////////////////////////////// |
.................... // float atan2(float y, float x) |
.................... ///////////////////////////////////////////////////////////////////////////// |
.................... // Description :computes the principal value of arc tangent of y/x, using the |
.................... // signs of both the arguments to determine the quadrant of the return value |
.................... // Returns : returns the arc tangent of y/x. |
.................... // Date : N/A |
.................... // |
.................... |
.................... float32 atan2(float32 y,float32 x) |
.................... { |
.................... float32 z; |
.................... int1 sign; |
.................... unsigned int8 quad; |
.................... sign=0; |
.................... quad=0; //quadrant |
.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); |
.................... if(y<0.0) |
.................... { |
.................... sign=1; |
.................... y=-y; |
.................... } |
.................... if(x<0.0) |
.................... { |
.................... x=-x; |
.................... } |
.................... if (x==0.0) |
.................... { |
.................... if(y==0.0) |
.................... { |
.................... #ifdef _ERRNO |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... } |
.................... else |
.................... { |
.................... if(sign) |
.................... { |
.................... return (-(PI_DIV_BY_TWO)); |
.................... } |
.................... else |
.................... { |
.................... return (PI_DIV_BY_TWO); |
.................... } |
.................... } |
.................... } |
.................... else |
.................... { |
.................... z=y/x; |
.................... switch(quad) |
.................... { |
.................... case 1: |
.................... { |
.................... return atan(z); |
.................... break; |
.................... } |
.................... case 2: |
.................... { |
.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122 |
.................... return (PI-atan(z)); |
.................... break; |
.................... } |
.................... case 3: |
.................... { |
.................... return (atan(z)-PI); |
.................... break; |
.................... } |
.................... case 4: |
.................... { |
.................... return (-atan(z)); |
.................... break; |
.................... } |
.................... } |
.................... } |
.................... } |
.................... |
.................... //Overloaded functions for atan2() for PCD |
.................... // Overloaded function atan2() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 atan2(float48 y,float48 x) |
.................... { |
.................... float48 z; |
.................... int1 sign; |
.................... unsigned int8 quad; |
.................... sign=0; |
.................... quad=0; //quadrant |
.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); |
.................... if(y<0.0) |
.................... { |
.................... sign=1; |
.................... y=-y; |
.................... } |
.................... if(x<0.0) |
.................... { |
.................... x=-x; |
.................... } |
.................... if (x==0.0) |
.................... { |
.................... if(y==0.0) |
.................... { |
.................... #ifdef _ERRNO |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... } |
.................... else |
.................... { |
.................... if(sign) |
.................... { |
.................... return (-(PI_DIV_BY_TWO)); |
.................... } |
.................... else |
.................... { |
.................... return (PI_DIV_BY_TWO); |
.................... } |
.................... } |
.................... } |
.................... else |
.................... { |
.................... z=y/x; |
.................... switch(quad) |
.................... { |
.................... case 1: |
.................... { |
.................... return atan(z); |
.................... break; |
.................... } |
.................... case 2: |
.................... { |
.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122 |
.................... return (PI-atan(z)); |
.................... break; |
.................... } |
.................... case 3: |
.................... { |
.................... return (atan(z)-PI); |
.................... break; |
.................... } |
.................... case 4: |
.................... { |
.................... return (-atan(z)); |
.................... break; |
.................... } |
.................... } |
.................... } |
.................... } |
.................... |
.................... // Overloaded function atan2() for data type - Float64 |
.................... float64 atan2(float64 y,float64 x) |
.................... { |
.................... float64 z; |
.................... int1 sign; |
.................... unsigned int8 quad; |
.................... sign=0; |
.................... quad=0; //quadrant |
.................... quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); |
.................... if(y<0.0) |
.................... { |
.................... sign=1; |
.................... y=-y; |
.................... } |
.................... if(x<0.0) |
.................... { |
.................... x=-x; |
.................... } |
.................... if (x==0.0) |
.................... { |
.................... if(y==0.0) |
.................... { |
.................... #ifdef _ERRNO |
.................... { |
.................... errno=EDOM; |
.................... } |
.................... #endif |
.................... } |
.................... else |
.................... { |
.................... if(sign) |
.................... { |
.................... return (-(PI_DIV_BY_TWO)); |
.................... } |
.................... else |
.................... { |
.................... return (PI_DIV_BY_TWO); |
.................... } |
.................... } |
.................... } |
.................... else |
.................... { |
.................... z=y/x; |
.................... switch(quad) |
.................... { |
.................... case 1: |
.................... { |
.................... return atan(z); |
.................... break; |
.................... } |
.................... case 2: |
.................... { |
.................... // return (atan(z)+PI_DIV_BY_TWO); //2L3122 |
.................... return (PI-atan(z)); |
.................... break; |
.................... } |
.................... case 3: |
.................... { |
.................... return (atan(z)-PI); |
.................... break; |
.................... } |
.................... case 4: |
.................... { |
.................... return (-atan(z)); |
.................... break; |
.................... } |
.................... } |
.................... } |
.................... } |
.................... #endif |
.................... |
.................... //////////////////// Hyperbolic functions //////////////////// |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float cosh(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : Computes the hyperbolic cosine value of x |
.................... // Returns : returns the hyperbolic cosine value of x |
.................... // Date : N/A |
.................... // |
.................... |
.................... float32 cosh(float32 x) |
.................... { |
.................... return ((exp(x)+exp(-x))/2); |
.................... } |
.................... //Overloaded functions for cosh() for PCD |
.................... // Overloaded function cosh() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 cosh(float48 x) |
.................... { |
.................... return ((exp(x)+exp(-x))/2); |
.................... } |
.................... |
.................... // Overloaded function cosh() for data type - Float64 |
.................... float64 cosh(float64 x) |
.................... { |
.................... return ((exp(x)+exp(-x))/2); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float sinh(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : Computes the hyperbolic sine value of x |
.................... // Returns : returns the hyperbolic sine value of x |
.................... // Date : N/A |
.................... // |
.................... |
.................... float32 sinh(float32 x) |
.................... { |
.................... |
.................... return ((exp(x) - exp(-x))/2); |
.................... } |
.................... //Overloaded functions for sinh() for PCD |
.................... // Overloaded function sinh() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 sinh(float48 x) |
.................... { |
.................... |
.................... return ((exp(x) - exp(-x))/2); |
.................... } |
.................... |
.................... // Overloaded function sinh() for data type - Float48 |
.................... float64 sinh(float64 x) |
.................... { |
.................... |
.................... return ((exp(x) - exp(-x))/2); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float tanh(float x) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : Computes the hyperbolic tangent value of x |
.................... // Returns : returns the hyperbolic tangent value of x |
.................... // Date : N/A |
.................... // |
.................... |
.................... float32 tanh(float32 x) |
.................... { |
.................... return(sinh(x)/cosh(x)); |
.................... } |
.................... //Overloaded functions for tanh() for PCD |
.................... // Overloaded function tanh() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 tanh(float48 x) |
.................... { |
.................... return(sinh(x)/cosh(x)); |
.................... } |
.................... |
.................... // Overloaded function tanh() for data type - Float64 |
.................... float64 tanh(float64 x) |
.................... { |
.................... return(sinh(x)/cosh(x)); |
.................... } |
.................... #endif |
.................... |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // float frexp(float x, signed int *exp) |
.................... //////////////////////////////////////////////////////////////////////////// |
.................... // Description : breaks a floating point number into a normalized fraction and an integral |
.................... // power of 2. It stores the integer in the signed int object pointed to by exp. |
.................... // Returns : returns the value x, such that x is a double with magnitude in the interval |
.................... // [1/2,1) or zero, and value equals x times 2 raised to the power *exp.If value is zero, |
.................... // both parts of the result are zero. |
.................... // Date : N/A |
.................... // |
.................... |
.................... #define LOG2 .30102999566398119521 |
.................... float32 frexp(float32 x, signed int8 *exp) |
.................... { |
.................... float32 res; |
.................... int1 sign = 0; |
.................... if(x == 0.0) |
.................... { |
.................... *exp=0; |
.................... return (0.0); |
.................... } |
.................... if(x < 0.0) |
.................... { |
.................... x=-x; |
.................... sign=1; |
.................... } |
.................... if (x > 1.0) |
.................... { |
.................... *exp=(ceil(log10(x)/LOG2)); |
.................... res=x/(pow(2, *exp)); |
.................... if (res == 1) |
.................... { |
.................... *exp=*exp+1; |
.................... res=.5; |
.................... } |
.................... } |
.................... else |
.................... { |
.................... if(x < 0.5) |
.................... { |
.................... *exp=-1; |
.................... res=x*2; |
.................... } |
.................... else |
.................... { |
.................... *exp=0; |
.................... res=x; |
.................... } |
.................... } |
.................... if(sign) |
.................... { |
.................... res=-res; |
.................... } |
.................... return res; |
.................... } |
.................... |
.................... //Overloaded functions for frexp() for PCD |
.................... // Overloaded function frexp() for data type - Float48 |
.................... #if defined(__PCD__) |
.................... float48 frexp(float48 x, signed int8 *exp) |
.................... { |
.................... float48 res; |
.................... int1 sign = 0; |
.................... if(x == 0.0) |
.................... { |
.................... *exp=0; |
.................... return (0.0); |
.................... } |
.................... if(x < 0.0) |
.................... { |
.................... x=-x; |
.................... sign=1; |
.................... } |
.................... if (x > 1.0) |
.................... { |
.................... *exp=(ceil(log10(x)/LOG2)); |
.................... res=x/(pow(2, *exp)); |
.................... if (res == 1) |
.................... { |
.................... *exp=*exp+1; |
.................... res=.5; |
.................... } |
.................... } |
.................... else |
.................... { |
.................... if(x < 0.5) |
.................... { |
.................... *exp=-1; |
.................... res=x*2; |
.................... } |
.................... else |
.................... { |
.................... *exp=0; |
.................... res=x; |
.................... } |
.................... } |
.................... if(sign) |
.................... { |
.................... res=-res; |
.................... } |
.................... return res; |
.................... } |
.................... |
.................... // Overloaded function frexp() for data type - Float64 |
.................... float64 frexp(float64 x, signed int8 *exp) |
.................... { |
.................... float64 res; |
.................... int1 sign = 0; |
.................... if(x == 0.0) |
.................... { |
.................... *exp=0; |
.................... return (0.0); |
.................... } |
.................... if(x < 0.0) |
.................... { |
.................... x=-x; |
.................... sign=1; |
.................... } |
.................... if (x > 1.0) |
.................... { |
.................... *exp=(ceil(log10(x)/LOG2)); |
.................... res=x/(pow(2, *exp)); |
.................... if (res == 1) |
.................... { |
.................... *exp=*exp+1; |
.................... res=.5; |
.................... } |
.................... } |
.................... else |
.................... { |
.................... if(x < 0.5) |
.................... { |
.................... *exp=-1; |
.................... res=x*2; |
.................... } |
.................... else |
.................... { |
.................... *exp=0; |
.................... res=x; |
.................... } |
.................... } |
.................... if(sign) |
.................... { |
.................... res=-res; |
.................... } |
.................... return res; |
.................... } |
.................... #endif |
.................... |
.................... ////////////////////////////////////////////////////////////////////////////// |
.................... // float ldexp(float x, signed int *exp) |
.................... ////////////////////////////////////////////////////////////////////////////// |
.................... // Description : multiplies a floating point number by an integral power of 2. |
.................... // Returns : returns the value of x times 2 raised to the power exp. |
.................... // Date : N/A |
.................... // |
.................... |
.................... float32 ldexp(float32 value, signed int8 exp) |
.................... { |
.................... return (value * pow(2,exp)); |
.................... } |
.................... //Overloaded functions for ldexp() for PCD |
.................... // Overloaded function ldexp() for data type - Float48 |
.................... |
.................... #if defined(__PCD__) |
.................... float48 ldexp(float48 value, signed int8 exp) |
.................... { |
.................... return (value * pow(2,exp)); |
.................... } |
.................... // Overloaded function ldexp() for data type - Float64 |
.................... float64 ldexp(float64 value, signed int8 exp) |
.................... { |
.................... return (value * pow(2,exp)); |
.................... } |
.................... #endif |
.................... |
.................... #endif |
.................... |
.................... |
.................... void main() |
.................... { |
* |
023C: CLRF 04 |
023D: BCF 03.7 |
023E: MOVLW 1F |
023F: ANDWF 03,F |
0240: MOVLW 71 |
0241: BSF 03.5 |
0242: MOVWF 0F |
0243: MOVF 0F,W |
0244: BSF 03.6 |
0245: BCF 07.3 |
0246: MOVLW 0C |
0247: BCF 03.6 |
0248: MOVWF 19 |
0249: MOVLW A2 |
024A: MOVWF 18 |
024B: MOVLW 90 |
024C: BCF 03.5 |
024D: MOVWF 18 |
024E: BSF 03.5 |
024F: BSF 03.6 |
0250: MOVF 09,W |
0251: ANDLW C0 |
0252: MOVWF 09 |
0253: BCF 03.6 |
0254: BCF 1F.4 |
0255: BCF 1F.5 |
0256: MOVLW 00 |
0257: BSF 03.6 |
0258: MOVWF 08 |
0259: BCF 03.5 |
025A: CLRF 07 |
025B: CLRF 08 |
025C: CLRF 09 |
.................... setup_adc_ports(NO_ANALOGS|VSS_VDD); |
* |
0266: BSF 03.5 |
0267: BSF 03.6 |
0268: MOVF 09,W |
0269: ANDLW C0 |
026A: MOVWF 09 |
026B: BCF 03.6 |
026C: BCF 1F.4 |
026D: BCF 1F.5 |
026E: MOVLW 00 |
026F: BSF 03.6 |
0270: MOVWF 08 |
.................... setup_adc(ADC_CLOCK_DIV_2); |
0271: BCF 03.5 |
0272: BCF 03.6 |
0273: BCF 1F.6 |
0274: BCF 1F.7 |
0275: BSF 03.5 |
0276: BCF 1F.7 |
0277: BCF 03.5 |
0278: BSF 1F.0 |
.................... setup_spi(SPI_SS_DISABLED); |
0279: BCF 14.5 |
027A: BCF 20.5 |
027B: MOVF 20,W |
027C: BSF 03.5 |
027D: MOVWF 07 |
027E: BCF 03.5 |
027F: BSF 20.4 |
0280: MOVF 20,W |
0281: BSF 03.5 |
0282: MOVWF 07 |
0283: BCF 03.5 |
0284: BCF 20.3 |
0285: MOVF 20,W |
0286: BSF 03.5 |
0287: MOVWF 07 |
0288: MOVLW 01 |
0289: BCF 03.5 |
028A: MOVWF 14 |
028B: MOVLW 00 |
028C: BSF 03.5 |
028D: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
028E: MOVF 01,W |
028F: ANDLW C7 |
0290: IORLW 08 |
0291: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
0292: BCF 03.5 |
0293: CLRF 10 |
.................... setup_timer_2(T2_DISABLED,0,1); |
0294: MOVLW 00 |
0295: MOVWF 78 |
0296: MOVWF 12 |
0297: MOVLW 00 |
0298: BSF 03.5 |
0299: MOVWF 12 |
.................... setup_ccp1(CCP_OFF); |
029A: BCF 03.5 |
029B: BSF 20.2 |
029C: MOVF 20,W |
029D: BSF 03.5 |
029E: MOVWF 07 |
029F: BCF 03.5 |
02A0: CLRF 17 |
02A1: BSF 03.5 |
02A2: CLRF 1B |
02A3: CLRF 1C |
02A4: MOVLW 01 |
02A5: MOVWF 1D |
.................... setup_comparator(NC_NC_NC_NC); |
02A6: BCF 03.5 |
02A7: BSF 03.6 |
02A8: CLRF 07 |
02A9: CLRF 08 |
02AA: CLRF 09 |
.................... |
.................... printf("Magnetometr: \r\n",); |
02AB: MOVLW 04 |
02AC: MOVWF 0D |
02AD: MOVLW 00 |
02AE: MOVWF 0F |
02AF: BCF 03.6 |
02B0: CALL 021 |
.................... printf("(c)mlab.cz kaklik 2013: \r\n",); |
02B1: MOVLW 0D |
02B2: BSF 03.6 |
02B3: MOVWF 0D |
02B4: MOVLW 00 |
02B5: MOVWF 0F |
02B6: BCF 03.6 |
02B7: CALL 021 |
.................... printf("X, Y, Z \r\n",); |
02B8: MOVLW 1B |
02B9: BSF 03.6 |
02BA: MOVWF 0D |
02BB: MOVLW 00 |
02BC: MOVWF 0F |
02BD: BCF 03.6 |
02BE: CALL 021 |
.................... |
.................... |
.................... // Init the HMC5883L. Set Mode register for |
.................... // continuous measurements. |
.................... hmc5883l_write_reg(HMC5883L_CFG_A_REG, 0x18); // no average, maximal update range |
02BF: CLRF 27 |
02C0: MOVLW 18 |
02C1: MOVWF 28 |
02C2: CALL 0B3 |
.................... hmc5883l_write_reg(HMC5883L_CFG_B_REG, 0x00); // minimal range |
02C3: MOVLW 01 |
02C4: MOVWF 27 |
02C5: CLRF 28 |
02C6: CALL 0B3 |
.................... hmc5883l_write_reg(HMC5883L_MODE_REG, 0x00); |
02C7: MOVLW 02 |
02C8: MOVWF 27 |
02C9: CLRF 28 |
02CA: CALL 0B3 |
.................... |
.................... // Continuously read and display the x,y,z results. |
.................... // Wait at least 67 ms between reads, re the HMC5883L data sheet. |
.................... |
.................... |
.................... while(TRUE) |
.................... { |
.................... |
.................... hmc5883l_read_data(); |
02CB: GOTO 131 |
.................... printf("%6Ld %6Ld %6Ld \n\r", compass.x, compass.y, compass.z); |
02CC: MOVLW 00 |
02CD: MOVWF 04 |
02CE: MOVF 22,W |
02CF: MOVWF 28 |
02D0: MOVF 21,W |
02D1: MOVWF 27 |
02D2: CALL 1B0 |
02D3: MOVLW 20 |
02D4: BTFSS 0C.4 |
02D5: GOTO 2D4 |
02D6: MOVWF 19 |
02D7: MOVLW 00 |
02D8: MOVWF 04 |
02D9: MOVF 24,W |
02DA: MOVWF 28 |
02DB: MOVF 23,W |
02DC: MOVWF 27 |
02DD: CALL 1B0 |
02DE: MOVLW 20 |
02DF: BTFSS 0C.4 |
02E0: GOTO 2DF |
02E1: MOVWF 19 |
02E2: MOVLW 00 |
02E3: MOVWF 04 |
02E4: MOVF 26,W |
02E5: MOVWF 28 |
02E6: MOVF 25,W |
02E7: MOVWF 27 |
02E8: CALL 1B0 |
02E9: MOVLW 20 |
02EA: BTFSS 0C.4 |
02EB: GOTO 2EA |
02EC: MOVWF 19 |
02ED: MOVLW 0A |
02EE: BTFSS 0C.4 |
02EF: GOTO 2EE |
02F0: MOVWF 19 |
02F1: MOVLW 0D |
02F2: BTFSS 0C.4 |
02F3: GOTO 2F2 |
02F4: MOVWF 19 |
.................... delay_ms(100); |
02F5: MOVLW 64 |
02F6: MOVWF 27 |
02F7: GOTO 226 |
.................... } |
02F8: GOTO 2CB |
.................... |
.................... } |
.................... |
.................... |
.................... |
02F9: SLEEP |
Configuration Fuses: |
Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUG |
Word 2: 3FFF NOWRT BORV40 |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.pjt |
---|
0,0 → 1,31 |
[PROJECT] |
Target=main.hex |
Development_Mode= |
Processor_Text=PIC16F887 |
ToolSuite=CCS |
Processor=0x887F |
[main] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=main.c |
[Windows] |
0=0000 %S 0 0 796 451 3 0 |
[Opened Files] |
1=main.c |
2=main.h |
3=C:\Program Files (x86)\PICC\devices\16F887.h |
4=HMC5883L.h |
5=HMC5883L.c |
6=C:\Program Files (x86)\PICC\drivers\math.h |
7= |
[Target Data] |
OptionString=-p +FM |
FileList=Z:\home\kaklik\svnMLAB\Modules\Sensors\MAG01A\SW\PIC16F887\main.c |
[Units] |
Count=1 |
1=main (main) |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.sta |
---|
0,0 → 1,59 |
ROM used: 762 (9%) |
762 (9%) including unused fragments |
0 Average locations per line |
2 Average locations per statement |
RAM used: 12 (3%) at main() level |
21 (6%) worst case |
Stack used: 2 worst case (out of 8 total available) |
Lines Stmts % Files |
----- ----- --- ----- |
43 19 6 main.c |
22 0 0 main.h |
423 0 0 C:\Program Files (x86)\PICC\devices\16F887.h |
25 0 0 HMC5883L.h |
76 28 9 HMC5883L.c |
2172 260 85 C:\Program Files (x86)\PICC\drivers\math.h |
----- ----- |
2761 307 Total |
Page ROM % RAM Vol Diff Functions: |
---- --- --- --- --- ---- ---------- |
0 22 3 1 @delay_ms1 |
0 69 9 3 @I2C_READ_1 |
0 74 10 1 @I2C_WRITE_1 |
0 57 7 2 102 1.8 hmc5883l_write_reg |
0 127 17 6 636 3.3 hmc5883l_read_data |
0 190 25 0 595 3.3 MAIN |
0 9 1 0 78 2.7 @const229 |
0 72 9 3 722 3.9 @PSTRINGC7_9600_62_63 |
0 14 2 0 @const231 |
0 6 1 0 @const232 |
0 118 15 9 @PRINTF_LD_9600_62_63 |
Program metrics: |
Functions 5 |
Statements 307 |
Comments 356 |
Volume (V) 2913 |
Difficilty (D) 14.9 |
Effort to implement (E) 43483 |
Time to implement (T) 40 minutes |
Est Delivered Bugs (B) 0 |
Cyclomatic Complexity 1 |
Maintainability (MI) 95 |
Segment Used Free |
----------- ---- ---- |
00000-00003 4 0 |
00004-007FF 758 1286 |
00800-00FFF 0 2048 |
01000-017FF 0 2048 |
01800-01FFF 0 2048 |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.sym |
---|
0,0 → 1,95 |
004-005 @READ_PROGRAM_MEMORY8.P1 |
004 @WRITE_PROGRAM_MEMORY8.P2 |
015 CCP_1 |
015 CCP_1_LOW |
016 CCP_1_HIGH |
01B CCP_2_LOW |
01B CCP_2 |
01C CCP_2_HIGH |
020 @TRIS_C |
021-026 compass |
027 hmc5883l_write_reg.reg |
027 @delay_ms1.P1 |
027 hmc5883l_read_data.x_lsb |
027-028 @PRINTF_LD_9600_62_63.P1 |
027 @PSTRINGC7_9600_62_63.@SCRATCH1 |
028 hmc5883l_write_reg.data |
028 hmc5883l_read_data.x_msb |
028 @PSTRINGC7_9600_62_63.@SCRATCH2 |
029 hmc5883l_read_data.y_lsb |
029 @PSTRINGC7_9600_62_63.@SCRATCH3 |
029 @PRINTF_LD_9600_62_63.@SCRATCH1 |
02A hmc5883l_read_data.y_msb |
02A @PRINTF_LD_9600_62_63.@SCRATCH2 |
02B hmc5883l_read_data.z_lsb |
02B @PRINTF_LD_9600_62_63.@SCRATCH3 |
02C hmc5883l_read_data.z_msb |
02C @PRINTF_LD_9600_62_63.@SCRATCH4 |
02D @I2C_READ_1.P1 |
02D @I2C_WRITE_1.P2 |
02D @PRINTF_LD_9600_62_63.@SCRATCH5 |
02E @I2C_READ_1.@SCRATCH1 |
02E @PRINTF_LD_9600_62_63.@SCRATCH6 |
02F @I2C_READ_1.@SCRATCH2 |
02F @PRINTF_LD_9600_62_63.@SCRATCH7 |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
107.6 C1OUT |
108.6 C2OUT |
10D-10E @WRITE_PROGRAM_MEMORY8.P1 |
10D-10E @READ_PROGRAM_MEMORY8.P2 |
ROM Allocation: |
0226 @delay_ms1 |
00EC @I2C_READ_1 |
0069 @I2C_WRITE_1 |
00B3 hmc5883l_write_reg |
0131 hmc5883l_read_data |
023C MAIN |
0004 @const229 |
0021 @PSTRINGC7_9600_62_63 |
000D @const231 |
001B @const232 |
01B0 @PRINTF_LD_9600_62_63 |
023C @cinit |
User Memory space: |
User Memory space: |
Project Directory: |
Z:\home\kaklik\svnMLAB\Modules\Sensors\MAG01A\SW\PIC16F887\ |
Project Files: |
main.c |
main.h |
C:\Program Files (x86)\PICC\devices\16F887.h |
HMC5883L.h |
HMC5883L.c |
C:\Program Files (x86)\PICC\drivers\math.h |
Units: |
Z:\home\kaklik\svnMLAB\Modules\Sensors\MAG01A\SW\PIC16F887\main (main) |
Compiler Settings: |
Processor: PIC16F887 |
Pointer Size: 16 |
ADC Range: 0-255 |
Opt Level: 9 |
Short,Int,Long: UNSIGNED: 1,8,16 |
Float,Double: 32,32 |
Output Files: |
Errors: main.err |
Ext Symbols: main.esym |
INHX8: main.hex |
Symbols: main.sym |
List: main.lst |
Debug/COFF: main.cof |
Project: main.PJT |
Call Tree: main.tre |
Statistics: main.sta |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.tre |
---|
0,0 → 1,32 |
ÀÄmain |
ÀÄMAIN 0/190 Ram=0 |
ÃÄ??0?? |
ÃÄ@PSTRINGC7_9600_62_63 0/72 Ram=3 |
ÃÄ@PSTRINGC7_9600_62_63 0/72 Ram=3 |
ÃÄ@PSTRINGC7_9600_62_63 0/72 Ram=3 |
ÃÄhmc5883l_write_reg 0/57 Ram=2 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÀÄ@I2C_WRITE_1 0/74 Ram=1 |
ÃÄhmc5883l_write_reg 0/57 Ram=2 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÀÄ@I2C_WRITE_1 0/74 Ram=1 |
ÃÄhmc5883l_write_reg 0/57 Ram=2 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÀÄ@I2C_WRITE_1 0/74 Ram=1 |
ÃÄhmc5883l_read_data 0/127 Ram=6 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÃÄ@I2C_WRITE_1 0/74 Ram=1 |
³ ÃÄ@I2C_READ_1 0/69 Ram=3 |
³ ÃÄ@I2C_READ_1 0/69 Ram=3 |
³ ÃÄ@I2C_READ_1 0/69 Ram=3 |
³ ÃÄ@I2C_READ_1 0/69 Ram=3 |
³ ÃÄ@I2C_READ_1 0/69 Ram=3 |
³ ÀÄ@I2C_READ_1 0/69 Ram=3 |
ÃÄ@PRINTF_LD_9600_62_63 0/118 Ram=9 |
ÃÄ@PRINTF_LD_9600_62_63 0/118 Ram=9 |
ÃÄ@PRINTF_LD_9600_62_63 0/118 Ram=9 |
ÀÄ@delay_ms1 0/22 Ram=1 |
/Modules/Sensors/MAG01A/SW/PIC16F887/HMC5883L.c |
---|
0,0 → 1,75 |
//------------------------------ |
// Low level routines |
//------------------------------ |
void hmc5883l_write_reg(int8 reg, int8 data) |
{ |
i2c_start(); |
i2c_write(HMC5883L_WRT_ADDR); |
i2c_write(reg); |
i2c_write(data); |
i2c_stop(); |
} |
//------------------------------ |
int8 hmc5883l_read_reg(int8 reg) |
{ |
int8 retval; |
i2c_start(); |
i2c_write(HMC5883L_WRT_ADDR); |
i2c_write(reg); |
i2c_start(); |
i2c_write(HMC5883L_READ_ADDR); |
retval = i2c_read(0); |
i2c_stop(); |
return(retval); |
} |
//------------------------------ |
typedef struct |
{ |
signed int16 x; |
signed int16 y; |
signed int16 z; |
}hmc5883l_result; |
// This global structure holds the values read |
// from the HMC5883L x,y,z registers. |
hmc5883l_result compass = {0,0,0}; |
//------------------------------ |
void hmc5883l_read_data(void) |
{ |
unsigned int8 x_lsb; |
unsigned int8 x_msb; |
unsigned int8 y_lsb; |
unsigned int8 y_msb; |
unsigned int8 z_lsb; |
unsigned int8 z_msb; |
i2c_start(); |
i2c_write(HMC5883L_WRT_ADDR); |
i2c_write(HMC5883L_X_MSB_REG); // Point to X-msb register |
i2c_start(); |
i2c_write(HMC5883L_READ_ADDR); |
x_msb = i2c_read(); |
x_lsb = i2c_read(); |
z_msb = i2c_read(); |
z_lsb = i2c_read(); |
y_msb = i2c_read(); |
y_lsb = i2c_read(0); // do a NACK on last read |
i2c_stop(); |
// Combine high and low bytes into 16-bit values. |
compass.x = make16(x_msb, x_lsb); |
compass.y = make16(y_msb, y_lsb); |
compass.z = make16(z_msb, z_lsb); |
} |
/Modules/Sensors/MAG01A/SW/PIC16F887/HMC5883L.h |
---|
0,0 → 1,23 |
// i2c slave addresses |
#define HMC5883L_WRT_ADDR 0x3C |
#define HMC5883L_READ_ADDR 0x3D |
// Register addresses |
#define HMC5883L_CFG_A_REG 0x00 |
#define HMC5883L_CFG_B_REG 0x01 |
#define HMC5883L_MODE_REG 0x02 |
#define HMC5883L_X_MSB_REG 0x03 |
//Konstanty nastavujici rozsah |
//pro void set_mag_roz (unsigned int8 h) |
#define MAG_ROZ088 0x00 |
#define MAG_ROZ130 0x20 |
#define MAG_ROZ190 0x40 |
#define MAG_ROZ250 0x60 |
#define MAG_ROZ400 0x80 |
#define MAG_ROZ470 0xA0 |
#define MAG_ROZ560 0xC0 |
#define MAG_ROZ810 0xE0 |
#include "HMC5883L.c" |
/Modules/Sensors/MAG01A/SW/PIC16F887/main.bak |
---|
0,0 → 1,32 |
#include "main.h" |
#include "HMC5883L.h" |
void main() |
{ |
setup_adc_ports(NO_ANALOGS|VSS_VDD); |
setup_adc(ADC_CLOCK_DIV_2); |
setup_spi(SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_ccp1(CCP_OFF); |
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard |
printf("Magnetometr: \r\n",); |
printf("(c)mlab JACHO 2013: \r\n",); |
printf("Vysledky z jednotlivych os:\r\n",); |
signed int16 X,Y,Z; |
while(true) |
{ |
printf("Vysledky z jednotlivych os:\r\n",); |
X = mag_readX(); |
Y = mag_readY(); |
Z = mag_readZ(); |
printf("X: %Ld \r\n", X); |
printf("Y %Ld \r\n", Y); |
printf("Z: %Ld \r\n", Z); |
Delay_ms(500); |
} |
} |
/Modules/Sensors/MAG01A/DOC/SRC/img/MAG01A_Top_Big.jpg |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/DOC/SRC/img/MAG01A_QRcode.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/DOC/SRC/MAG01A.doc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/DOC/MAG01A.cs.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/DOC/HTML/Pictures/MAG01A_1.jpg |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/DOC/HTML/Pictures/MAG01A_2.jpg |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/MAG01A_Top_Small.jpg |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/TODO.txt |
---|
0,0 → 1,3 |
Neni vyvedeny DRDY pin, takze maximalni rychrlost cteni vzorku je: 75 Hz. |
/Modules/Sensors/MAG01A/SCH_PCB/MAG01A_PCB3.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/SCH_PCB/MAG01A_PCB4.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/SCH_PCB/MAG01A_SCH.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/SCH_PCB/untitled.brd |
---|
0,0 → 1,631 |
<?xml version="1.0" encoding="utf-8"?> |
<!DOCTYPE eagle SYSTEM "eagle.dtd"> |
<eagle version="6.1"> |
<drawing> |
<settings> |
<setting alwaysvectorfont="no"/> |
<setting verticaltext="up"/> |
</settings> |
<grid distance="0.01" unitdist="mm" unit="mm" style="lines" multiple="1" display="no" altdistance="0.025" altunitdist="inch" altunit="inch"/> |
<layers> |
<layer number="1" name="Top" color="4" fill="1" visible="no" active="yes"/> |
<layer number="16" name="Bottom" color="1" fill="1" visible="no" active="yes"/> |
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/> |
<layer number="18" name="Vias" color="2" fill="1" visible="no" active="yes"/> |
<layer number="19" name="Unrouted" color="6" fill="1" visible="no" active="yes"/> |
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/> |
<layer number="21" name="tPlace" color="7" fill="1" visible="no" active="yes"/> |
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="23" name="tOrigins" color="15" fill="1" visible="no" active="yes"/> |
<layer number="24" name="bOrigins" color="15" fill="1" visible="no" active="yes"/> |
<layer number="25" name="tNames" color="7" fill="1" visible="no" active="yes"/> |
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="27" name="tValues" color="7" fill="1" visible="no" active="yes"/> |
<layer number="28" name="bValues" color="7" fill="1" visible="no" active="yes"/> |
<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/> |
<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/> |
<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/> |
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/> |
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/> |
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/> |
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/> |
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/> |
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/> |
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/> |
<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="yes"/> |
<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="yes"/> |
<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="yes"/> |
<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="yes"/> |
<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="yes"/> |
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/> |
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/> |
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/> |
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/> |
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="49" name="Reference" color="7" fill="1" visible="no" active="yes"/> |
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/> |
<layer number="51" name="tDocu" color="7" fill="1" visible="no" active="yes"/> |
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/> |
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/> |
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/> |
<layer number="91" name="Nets" color="2" fill="1" visible="no" active="no"/> |
<layer number="92" name="Busses" color="1" fill="1" visible="no" active="no"/> |
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="no"/> |
<layer number="94" name="Symbols" color="4" fill="1" visible="no" active="no"/> |
<layer number="95" name="Names" color="7" fill="1" visible="no" active="no"/> |
<layer number="96" name="Values" color="7" fill="1" visible="no" active="no"/> |
<layer number="97" name="Info" color="7" fill="1" visible="no" active="no"/> |
<layer number="98" name="Guide" color="6" fill="1" visible="no" active="no"/> |
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/> |
<layer number="101" name="Patch_Top" color="12" fill="4" visible="no" active="yes"/> |
<layer number="102" name="Vscore" color="7" fill="1" visible="no" active="yes"/> |
<layer number="103" name="tMap" color="7" fill="1" visible="no" active="yes"/> |
<layer number="104" name="Name" color="16" fill="1" visible="no" active="yes"/> |
<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/> |
<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/> |
<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/> |
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="no" active="yes"/> |
<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/> |
<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/> |
<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/> |
<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/> |
<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/> |
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="yes"/> |
<layer number="201" name="201bmp" color="2" fill="10" visible="no" active="yes"/> |
<layer number="202" name="202bmp" color="3" fill="10" visible="no" active="yes"/> |
<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/> |
<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/> |
<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/> |
<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/> |
<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/> |
<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/> |
<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/> |
<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/> |
<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/> |
<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/> |
<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/> |
<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/> |
<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/> |
<layer number="216" name="216bmp" color="7" fill="1" visible="no" active="yes"/> |
<layer number="231" name="Eagle3D_PG1" color="14" fill="1" visible="no" active="yes"/> |
<layer number="232" name="Eagle3D_PG2" color="14" fill="2" visible="no" active="yes"/> |
<layer number="233" name="Eagle3D_PG3" color="14" fill="4" visible="no" active="yes"/> |
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/> |
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/> |
<layer number="254" name="cooling" color="7" fill="1" visible="no" active="yes"/> |
</layers> |
<board> |
<plain> |
<wire x1="0.1" y1="0.1" x2="20.22" y2="0.1" width="0" layer="20"/> |
<wire x1="20.22" y1="0.1" x2="20.22" y2="21.72" width="0" layer="20"/> |
<wire x1="20.22" y1="21.72" x2="20.22" y2="30.38" width="0" layer="20"/> |
<wire x1="20.22" y1="30.38" x2="0.1" y2="30.38" width="0" layer="20"/> |
<wire x1="0.1" y1="30.38" x2="0.1" y2="21.72" width="0" layer="20"/> |
<dimension x1="20.22" y1="0.1" x2="20.22" y2="30.38" x3="34" y3="15.24" layer="48"/> |
<dimension x1="0.1" y1="0.1" x2="20.22" y2="0.1" x3="10.16" y3="-7" layer="48"/> |
<wire x1="0.1" y1="21.72" x2="0.1" y2="0.1" width="0" layer="20"/> |
<wire x1="0.1" y1="21.72" x2="20.22" y2="21.72" width="0" layer="20"/> |
<dimension x1="0.1" y1="21.72" x2="0.1" y2="0.1" x3="-6.5" y3="10.91" layer="48"/> |
<circle x="15.7" y="14.82" radius="0.01" width="0.1" layer="16"/> |
<text x="1.98" y="11.04" size="1.4224" layer="21" rot="R90">MAG01A</text> |
<text x="19.32" y="10.67" size="1.4224" layer="21" rot="R180">MLAB</text> |
<text x="8.7" y="19.4" size="1.4224" layer="21">GND</text> |
<text x="8.7" y="9.24" size="1.4224" layer="21">GND</text> |
<text x="8.7" y="14.32" size="1.4224" layer="21">VDD</text> |
<text x="8.7" y="16.86" size="1.4224" layer="21">SCL</text> |
<text x="8.7" y="11.78" size="1.4224" layer="21">SDA</text> |
<text x="7.14" y="0.87" size="1.27" layer="21">JACHO</text> |
<text x="18.24" y="16.52" size="1.27" layer="16" rot="MR90">MLAB</text> |
<wire x1="17.25" y1="15.75" x2="15.75" y2="15.75" width="0.1" layer="21"/> |
<wire x1="15.75" y1="15.75" x2="16.25" y2="16.25" width="0.1" layer="21"/> |
<wire x1="15.75" y1="15.75" x2="16.25" y2="15.25" width="0.1" layer="21"/> |
<text x="13.23" y="14.98" size="1.4224" layer="21">+X</text> |
<text x="16.6" y="18.88" size="1.4224" layer="21">+Y</text> |
<text x="17.75" y="15" size="1.4224" layer="21">Z-</text> |
<wire x1="18.4" y1="16.97" x2="18.4" y2="18.47" width="0.1" layer="21"/> |
<wire x1="18.4" y1="18.47" x2="18.9" y2="17.97" width="0.1" layer="21"/> |
<wire x1="18.4" y1="18.47" x2="17.9" y2="17.97" width="0.1" layer="21"/> |
<circle x="14.48" y="17.4" radius="0.01" width="0.1" layer="16"/> |
</plain> |
<libraries> |
<library name="SparkFun"> |
<packages> |
<package name="16LPCC"> |
<wire x1="-1.7" y1="-1.7" x2="-1.7" y2="-1.1" width="0.2032" layer="21"/> |
<wire x1="-1.7" y1="-1.7" x2="-1.1" y2="-1.7" width="0.2032" layer="21"/> |
<wire x1="1.1" y1="-1.7" x2="1.7" y2="-1.7" width="0.2032" layer="21"/> |
<wire x1="1.7" y1="-1.7" x2="1.7" y2="-1.1" width="0.2032" layer="21"/> |
<wire x1="1.7" y1="1.1" x2="1.7" y2="1.7" width="0.2032" layer="21"/> |
<wire x1="1.7" y1="1.7" x2="1.1" y2="1.7" width="0.2032" layer="21"/> |
<wire x1="-1.28" y1="1.635" x2="-1.635" y2="1.26" width="0.2032" layer="21"/> |
<smd name="4" x="-1.37" y="-0.75" dx="0.65" dy="0.28" layer="1"/> |
<smd name="3" x="-1.37" y="-0.25" dx="0.65" dy="0.28" layer="1"/> |
<smd name="2" x="-1.37" y="0.25" dx="0.65" dy="0.28" layer="1"/> |
<smd name="1" x="-1.37" y="0.75" dx="0.65" dy="0.28" layer="1"/> |
<smd name="5" x="-0.75" y="-1.37" dx="0.65" dy="0.28" layer="1" rot="R270"/> |
<smd name="15" x="-0.25" y="1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="14" x="0.25" y="1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="13" x="0.75" y="1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="12" x="1.37" y="0.75" dx="0.65" dy="0.28" layer="1"/> |
<smd name="11" x="1.37" y="0.25" dx="0.65" dy="0.28" layer="1"/> |
<smd name="10" x="1.37" y="-0.25" dx="0.65" dy="0.28" layer="1"/> |
<smd name="9" x="1.37" y="-0.75" dx="0.65" dy="0.28" layer="1"/> |
<smd name="6" x="-0.25" y="-1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="8" x="0.75" y="-1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="16" x="-0.75" y="1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="7" x="0.25" y="-1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<text x="-1.27" y="1.905" size="0.6096" layer="25">>NAME</text> |
<text x="-1.905" y="-2.54" size="0.6096" layer="27">>VALUE</text> |
</package> |
</packages> |
</library> |
<library name="moje_C"> |
<packages> |
<package name="C0805"> |
<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/> |
<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/> |
<smd name="1" x="-0.95" y="0" dx="1.3" dy="1.5" layer="1"/> |
<smd name="2" x="0.95" y="0" dx="1.3" dy="1.5" layer="1"/> |
<text x="-1.27" y="1.27" size="1.27" layer="25">>NAME</text> |
<text x="-1.27" y="-2.54" size="1.27" layer="27">>VALUE</text> |
<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/> |
<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/> |
</package> |
</packages> |
</library> |
<library name="moje_R"> |
<packages> |
<package name="0805"> |
<wire x1="-0.41" y1="0.635" x2="0.41" y2="0.635" width="0.1524" layer="51"/> |
<wire x1="-0.41" y1="-0.635" x2="0.41" y2="-0.635" width="0.1524" layer="51"/> |
<smd name="1" x="-0.95" y="0" dx="1.3" dy="1.5" layer="1"/> |
<smd name="2" x="0.95" y="0" dx="1.3" dy="1.5" layer="1"/> |
<text x="-0.635" y="1.27" size="1.27" layer="25">>NAME</text> |
<text x="-0.635" y="-2.54" size="1.27" layer="27">>VALUE</text> |
<rectangle x1="0.4064" y1="-0.6985" x2="1.0564" y2="0.7015" layer="51"/> |
<rectangle x1="-1.0668" y1="-0.6985" x2="-0.4168" y2="0.7015" layer="51"/> |
</package> |
<package name="1206"> |
<wire x1="0.9525" y1="-0.8128" x2="-0.9652" y2="-0.8128" width="0.1524" layer="51"/> |
<wire x1="0.9525" y1="0.8128" x2="-0.9652" y2="0.8128" width="0.1524" layer="51"/> |
<smd name="2" x="1.422" y="0" dx="1.6" dy="1.803" layer="1"/> |
<smd name="1" x="-1.422" y="0" dx="1.6" dy="1.803" layer="1"/> |
<text x="-1.27" y="1.27" size="1.27" layer="25">>NAME</text> |
<text x="-1.27" y="-2.54" size="1.27" layer="27">>VALUE</text> |
<rectangle x1="-1.6891" y1="-0.8763" x2="-0.9525" y2="0.8763" layer="51"/> |
<rectangle x1="0.9525" y1="-0.8763" x2="1.6891" y2="0.8763" layer="51"/> |
</package> |
</packages> |
</library> |
<library name="moje_hrebinky"> |
<description><b>Pin Headers</b><p> |
Naming:<p> |
MA = male<p> |
# contacts - # rows<p> |
W = angled<p> |
<author>Created by librarian@cadsoft.de</author></description> |
<packages> |
<package name="MA05-2"> |
<description><b>PIN HEADER</b></description> |
<wire x1="-5.715" y1="2.54" x2="-4.445" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="-4.445" y1="2.54" x2="-3.81" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="-3.81" y1="1.905" x2="-3.175" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="-3.175" y1="2.54" x2="-1.905" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="-1.905" y1="2.54" x2="-1.27" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="-5.715" y1="2.54" x2="-6.35" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="-1.27" y1="1.905" x2="-0.635" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="-0.635" y1="2.54" x2="0.635" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="0.635" y1="2.54" x2="1.27" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="1.905" y1="2.54" x2="3.175" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="3.175" y1="2.54" x2="3.81" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="3.81" y1="1.905" x2="4.445" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="4.445" y1="2.54" x2="5.715" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="1.905" y1="2.54" x2="1.27" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="-3.81" y1="-1.905" x2="-4.445" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-1.27" y1="-1.905" x2="-1.905" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-1.905" y1="-2.54" x2="-3.175" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-3.175" y1="-2.54" x2="-3.81" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="-6.35" y1="1.905" x2="-6.35" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="-6.35" y1="-1.905" x2="-5.715" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-4.445" y1="-2.54" x2="-5.715" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="1.27" y1="-1.905" x2="0.635" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="0.635" y1="-2.54" x2="-0.635" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-0.635" y1="-2.54" x2="-1.27" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="3.81" y1="-1.905" x2="3.175" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="5.715" y1="-2.54" x2="4.445" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="4.445" y1="-2.54" x2="3.81" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="1.27" y1="-1.905" x2="1.905" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="3.175" y1="-2.54" x2="1.905" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="6.35" y1="1.905" x2="6.35" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="5.715" y1="2.54" x2="6.35" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="6.35" y1="-1.905" x2="5.715" y2="-2.54" width="0.1524" layer="21"/> |
<pad name="1" x="-5.08" y="-1.27" drill="0.9144" diameter="1.651" shape="square"/> |
<pad name="3" x="-2.54" y="-1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="5" x="0" y="-1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="7" x="2.54" y="-1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="9" x="5.08" y="-1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="2" x="-5.08" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="4" x="-2.54" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="6" x="0" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="8" x="2.54" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="10" x="5.08" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<text x="-6.35" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text> |
<text x="0" y="-4.191" size="1.27" layer="27" ratio="10">>VALUE</text> |
<rectangle x1="-2.794" y1="-1.524" x2="-2.286" y2="-1.016" layer="51"/> |
<rectangle x1="-5.334" y1="-1.524" x2="-4.826" y2="-1.016" layer="51"/> |
<rectangle x1="-0.254" y1="-1.524" x2="0.254" y2="-1.016" layer="51"/> |
<rectangle x1="4.826" y1="-1.524" x2="5.334" y2="-1.016" layer="51"/> |
<rectangle x1="2.286" y1="-1.524" x2="2.794" y2="-1.016" layer="51"/> |
<rectangle x1="-5.334" y1="1.016" x2="-4.826" y2="1.524" layer="51"/> |
<rectangle x1="-2.794" y1="1.016" x2="-2.286" y2="1.524" layer="51"/> |
<rectangle x1="-0.254" y1="1.016" x2="0.254" y2="1.524" layer="51"/> |
<rectangle x1="2.286" y1="1.016" x2="2.794" y2="1.524" layer="51"/> |
<rectangle x1="4.826" y1="1.016" x2="5.334" y2="1.524" layer="51"/> |
<circle x="-6.35" y="-2.54" radius="0.127" width="0.127" layer="21"/> |
</package> |
</packages> |
</library> |
<library name="moje"> |
<packages> |
<package name="SROUB3M"> |
<pad name="P$1" x="0" y="0" drill="3.2" diameter="6.4516"/> |
</package> |
</packages> |
</library> |
</libraries> |
<attributes> |
</attributes> |
<variantdefs> |
</variantdefs> |
<classes> |
<class number="0" name="default" width="0" drill="0"> |
</class> |
</classes> |
<designrules> |
<description language="de"><b>EAGLE Design Rules</b> |
<p> |
Die Standard-Design-Rules sind so gewählt, dass sie für |
die meisten Anwendungen passen. Sollte ihre Platine |
besondere Anforderungen haben, treffen Sie die erforderlichen |
Einstellungen hier und speichern die Design Rules unter |
einem neuen Namen ab.</description> |
<description language="en"><b>EAGLE Design Rules</b> |
<p> |
The default Design Rules have been set to cover |
a wide range of applications. Your particular design |
may have different requirements, so please make the |
necessary adjustments and save your customized |
design rules under a new name.</description> |
<param name="layerSetup" value="(1*16)"/> |
<param name="mtCopper" value="0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm"/> |
<param name="mtIsolate" value="1.5mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm"/> |
<param name="mdWireWire" value="8mil"/> |
<param name="mdWirePad" value="8mil"/> |
<param name="mdWireVia" value="8mil"/> |
<param name="mdPadPad" value="8mil"/> |
<param name="mdPadVia" value="8mil"/> |
<param name="mdViaVia" value="8mil"/> |
<param name="mdSmdPad" value="8mil"/> |
<param name="mdSmdVia" value="8mil"/> |
<param name="mdSmdSmd" value="8mil"/> |
<param name="mdViaViaSameLayer" value="8mil"/> |
<param name="mnLayersViaInSmd" value="2"/> |
<param name="mdCopperDimension" value="40mil"/> |
<param name="mdDrill" value="8mil"/> |
<param name="mdSmdStop" value="0mil"/> |
<param name="msWidth" value="10mil"/> |
<param name="msDrill" value="24mil"/> |
<param name="msMicroVia" value="9.99mm"/> |
<param name="msBlindViaRatio" value="0.5"/> |
<param name="rvPadTop" value="0.25"/> |
<param name="rvPadInner" value="0.25"/> |
<param name="rvPadBottom" value="0.25"/> |
<param name="rvViaOuter" value="0.25"/> |
<param name="rvViaInner" value="0.25"/> |
<param name="rvMicroViaOuter" value="0.25"/> |
<param name="rvMicroViaInner" value="0.25"/> |
<param name="rlMinPadTop" value="10mil"/> |
<param name="rlMaxPadTop" value="20mil"/> |
<param name="rlMinPadInner" value="10mil"/> |
<param name="rlMaxPadInner" value="20mil"/> |
<param name="rlMinPadBottom" value="10mil"/> |
<param name="rlMaxPadBottom" value="20mil"/> |
<param name="rlMinViaOuter" value="8mil"/> |
<param name="rlMaxViaOuter" value="20mil"/> |
<param name="rlMinViaInner" value="8mil"/> |
<param name="rlMaxViaInner" value="20mil"/> |
<param name="rlMinMicroViaOuter" value="4mil"/> |
<param name="rlMaxMicroViaOuter" value="20mil"/> |
<param name="rlMinMicroViaInner" value="4mil"/> |
<param name="rlMaxMicroViaInner" value="20mil"/> |
<param name="psTop" value="-1"/> |
<param name="psBottom" value="-1"/> |
<param name="psFirst" value="-1"/> |
<param name="psElongationLong" value="100"/> |
<param name="psElongationOffset" value="100"/> |
<param name="mvStopFrame" value="1"/> |
<param name="mvCreamFrame" value="0"/> |
<param name="mlMinStopFrame" value="4mil"/> |
<param name="mlMaxStopFrame" value="4mil"/> |
<param name="mlMinCreamFrame" value="0mil"/> |
<param name="mlMaxCreamFrame" value="0mil"/> |
<param name="mlViaStopLimit" value="0mil"/> |
<param name="srRoundness" value="0"/> |
<param name="srMinRoundness" value="0mil"/> |
<param name="srMaxRoundness" value="0mil"/> |
<param name="slThermalIsolate" value="10mil"/> |
<param name="slThermalsForVias" value="0"/> |
<param name="dpMaxLengthDifference" value="10mm"/> |
<param name="dpGapFactor" value="2.5"/> |
<param name="checkGrid" value="0"/> |
<param name="checkAngle" value="0"/> |
<param name="checkFont" value="1"/> |
<param name="checkRestrict" value="1"/> |
<param name="useDiameter" value="13"/> |
<param name="maxErrors" value="50"/> |
</designrules> |
<autorouter> |
<pass name="Default"> |
<param name="RoutingGrid" value="50mil"/> |
<param name="tpViaShape" value="round"/> |
<param name="PrefDir.1" value="|"/> |
<param name="PrefDir.2" value="0"/> |
<param name="PrefDir.3" value="0"/> |
<param name="PrefDir.4" value="0"/> |
<param name="PrefDir.5" value="0"/> |
<param name="PrefDir.6" value="0"/> |
<param name="PrefDir.7" value="0"/> |
<param name="PrefDir.8" value="0"/> |
<param name="PrefDir.9" value="0"/> |
<param name="PrefDir.10" value="0"/> |
<param name="PrefDir.11" value="0"/> |
<param name="PrefDir.12" value="0"/> |
<param name="PrefDir.13" value="0"/> |
<param name="PrefDir.14" value="0"/> |
<param name="PrefDir.15" value="0"/> |
<param name="PrefDir.16" value="-"/> |
<param name="cfVia" value="8"/> |
<param name="cfNonPref" value="5"/> |
<param name="cfChangeDir" value="2"/> |
<param name="cfOrthStep" value="2"/> |
<param name="cfDiagStep" value="3"/> |
<param name="cfExtdStep" value="0"/> |
<param name="cfBonusStep" value="1"/> |
<param name="cfMalusStep" value="1"/> |
<param name="cfPadImpact" value="4"/> |
<param name="cfSmdImpact" value="4"/> |
<param name="cfBusImpact" value="0"/> |
<param name="cfHugging" value="3"/> |
<param name="cfAvoid" value="4"/> |
<param name="cfPolygon" value="10"/> |
<param name="cfBase.1" value="0"/> |
<param name="cfBase.2" value="1"/> |
<param name="cfBase.3" value="1"/> |
<param name="cfBase.4" value="1"/> |
<param name="cfBase.5" value="1"/> |
<param name="cfBase.6" value="1"/> |
<param name="cfBase.7" value="1"/> |
<param name="cfBase.8" value="1"/> |
<param name="cfBase.9" value="1"/> |
<param name="cfBase.10" value="1"/> |
<param name="cfBase.11" value="1"/> |
<param name="cfBase.12" value="1"/> |
<param name="cfBase.13" value="1"/> |
<param name="cfBase.14" value="1"/> |
<param name="cfBase.15" value="1"/> |
<param name="cfBase.16" value="0"/> |
<param name="mnVias" value="20"/> |
<param name="mnSegments" value="9999"/> |
<param name="mnExtdSteps" value="9999"/> |
<param name="mnRipupLevel" value="10"/> |
<param name="mnRipupSteps" value="100"/> |
<param name="mnRipupTotal" value="100"/> |
</pass> |
<pass name="Follow-me" refer="Default" active="yes"> |
</pass> |
<pass name="Busses" refer="Default" active="yes"> |
<param name="cfNonPref" value="4"/> |
<param name="cfBusImpact" value="4"/> |
<param name="cfHugging" value="0"/> |
<param name="mnVias" value="0"/> |
</pass> |
<pass name="Route" refer="Default" active="yes"> |
</pass> |
<pass name="Optimize1" refer="Default" active="yes"> |
<param name="cfVia" value="99"/> |
<param name="cfExtdStep" value="10"/> |
<param name="cfHugging" value="1"/> |
<param name="mnExtdSteps" value="1"/> |
<param name="mnRipupLevel" value="0"/> |
</pass> |
<pass name="Optimize2" refer="Optimize1" active="yes"> |
<param name="cfNonPref" value="0"/> |
<param name="cfChangeDir" value="6"/> |
<param name="cfExtdStep" value="0"/> |
<param name="cfBonusStep" value="2"/> |
<param name="cfMalusStep" value="2"/> |
<param name="cfPadImpact" value="2"/> |
<param name="cfSmdImpact" value="2"/> |
<param name="cfHugging" value="0"/> |
</pass> |
<pass name="Optimize3" refer="Optimize2" active="yes"> |
<param name="cfChangeDir" value="8"/> |
<param name="cfPadImpact" value="0"/> |
<param name="cfSmdImpact" value="0"/> |
</pass> |
<pass name="Optimize4" refer="Optimize3" active="yes"> |
<param name="cfChangeDir" value="25"/> |
</pass> |
</autorouter> |
<elements> |
<element name="U1" library="SparkFun" package="16LPCC" value="HMC5883LSMD" x="14.24" y="16.24" smashed="yes" rot="MR90"> |
<attribute name="NAME" x="16.145" y="14.97" size="0.6096" layer="26" rot="MR90"/> |
</element> |
<element name="C1" library="moje_C" package="C0805" value="4.7uF" x="12.2" y="19.22" smashed="yes" rot="MR0"> |
<attribute name="NAME" x="13.37" y="20.19" size="1.27" layer="26" rot="MR0"/> |
</element> |
<element name="C3" library="moje_C" package="C0805" value="0.1uF" x="10.24" y="14.66" smashed="yes" rot="MR0"> |
<attribute name="NAME" x="12.56" y="12.43" size="1.27" layer="26" rot="MR0"/> |
</element> |
<element name="C2" library="moje_C" package="C0805" value="0.22uF" x="10.24" y="16.43" smashed="yes" rot="MR0"> |
<attribute name="NAME" x="10.71" y="17.35" size="1.27" layer="26" rot="MR0"/> |
</element> |
<element name="R2" library="moje_R" package="0805" value="2k7" x="14.49" y="12.43" smashed="yes" rot="MR0"> |
<attribute name="NAME" x="18.125" y="11.85" size="1.27" layer="26" rot="MR0"/> |
</element> |
<element name="R3" library="moje_R" package="0805" value="2k7" x="9.39" y="11.74" smashed="yes" rot="MR90"> |
<attribute name="NAME" x="8.76" y="8.315" size="1.27" layer="26" rot="MR90"/> |
</element> |
<element name="SV1" library="moje_hrebinky" package="MA05-2" value="" x="5.08" y="14.99" smashed="yes" rot="R270"> |
<attribute name="OC_NEWARK" value="unknown" x="1.27" y="-5.33" size="1.778" layer="27" rot="R270" display="off"/> |
<attribute name="MPN" value="" x="1.27" y="-5.33" size="1.778" layer="27" rot="R270" display="off"/> |
<attribute name="MF" value="" x="1.27" y="-5.33" size="1.778" layer="27" rot="R270" display="off"/> |
<attribute name="OC_FARNELL" value="unknown" x="1.27" y="-5.33" size="1.778" layer="27" rot="R270" display="off"/> |
<attribute name="VALUE" x="0.889" y="14.99" size="1.27" layer="27" ratio="10" rot="R270"/> |
</element> |
<element name="X1" library="moje" package="SROUB3M" value="SROUB3M" x="5.08" y="5.08"/> |
<element name="X2" library="moje" package="SROUB3M" value="SROUB3M" x="5.08" y="25.4"/> |
<element name="X3" library="moje" package="SROUB3M" value="SROUB3M" x="15.24" y="5.08"/> |
<element name="X4" library="moje" package="SROUB3M" value="SROUB3M" x="15.24" y="25.4"/> |
<element name="R1" library="moje_R" package="1206" value="0R" x="11.75" y="10" smashed="yes" rot="MR90"> |
<attribute name="NAME" x="12.92" y="8.98" size="1.27" layer="26" rot="MR90"/> |
</element> |
</elements> |
<signals> |
<signal name="SCL"> |
<contactref element="U1" pad="1"/> |
<contactref element="R2" pad="1"/> |
<contactref element="SV1" pad="3"/> |
<contactref element="SV1" pad="4"/> |
<wire x1="14.99" y1="14.87" x2="14.99" y2="12.43" width="0.254" layer="16"/> |
<wire x1="14.99" y1="12.43" x2="15.44" y2="12.43" width="0.254" layer="16"/> |
<wire x1="3" y1="13.75" x2="2.5" y2="14.25" width="0.254" layer="16"/> |
<wire x1="2.5" y1="14.25" x2="2.5" y2="16.25" width="0.254" layer="16"/> |
<wire x1="2.5" y1="16.25" x2="3.75" y2="17.5" width="0.254" layer="16"/> |
<wire x1="14.99" y1="12.43" x2="14.99" y2="10.99" width="0.254" layer="16"/> |
<wire x1="14.99" y1="10.99" x2="14.25" y2="10.25" width="0.254" layer="16"/> |
<wire x1="3" y1="13.75" x2="7.25" y2="13.75" width="0.254" layer="16"/> |
<wire x1="3.75" y1="17.5" x2="6.32" y2="17.5" width="0.254" layer="16"/> |
<wire x1="6.32" y1="17.5" x2="6.35" y2="17.53" width="0.254" layer="16"/> |
<wire x1="14.25" y1="10.25" x2="10.68" y2="10.25" width="0.254" layer="16"/> |
<wire x1="8.5" y1="11.75" x2="8" y2="12.25" width="0.254" layer="16"/> |
<wire x1="8" y1="12.25" x2="8" y2="13" width="0.254" layer="16"/> |
<wire x1="8" y1="13" x2="7.25" y2="13.75" width="0.254" layer="16"/> |
<wire x1="8.5" y1="11.75" x2="10.25" y2="11.75" width="0.254" layer="16"/> |
<wire x1="10.25" y1="11.75" x2="10.5" y2="11.5" width="0.254" layer="16"/> |
<wire x1="10.5" y1="11.5" x2="10.5" y2="10.43" width="0.254" layer="16"/> |
<wire x1="10.5" y1="10.43" x2="10.68" y2="10.25" width="0.254" layer="16"/> |
<wire x1="3.75" y1="17.5" x2="3.81" y2="17.53" width="0" layer="19" extent="16-16"/> |
</signal> |
<signal name="SDA"> |
<contactref element="U1" pad="16"/> |
<contactref element="R3" pad="1"/> |
<contactref element="SV1" pad="7"/> |
<contactref element="SV1" pad="8"/> |
<wire x1="6.35" y1="12.45" x2="3.81" y2="12.45" width="0.254" layer="16"/> |
<wire x1="15.61" y1="15.49" x2="16.26" y2="15.49" width="0.254" layer="16"/> |
<wire x1="16.26" y1="15.49" x2="16.5" y2="15.25" width="0.254" layer="16"/> |
<wire x1="16.5" y1="15.25" x2="16.5" y2="11.25" width="0.254" layer="16"/> |
<wire x1="16.5" y1="11.25" x2="15" y2="9.75" width="0.254" layer="16"/> |
<wire x1="15" y1="9.75" x2="10.43" y2="9.75" width="0.254" layer="16"/> |
<wire x1="10.43" y1="9.75" x2="9.39" y2="10.79" width="0.254" layer="16"/> |
<wire x1="9.39" y1="10.79" x2="8.01" y2="10.79" width="0.254" layer="16"/> |
<wire x1="8.01" y1="10.79" x2="6.35" y2="12.45" width="0.254" layer="16"/> |
</signal> |
<signal name="N$4"> |
<contactref element="U1" pad="8"/> |
<contactref element="C2" pad="1"/> |
<wire x1="12.87" y1="16.99" x2="11.5" y2="16.99" width="0.254" layer="16"/> |
<wire x1="11.5" y1="16.99" x2="11.5" y2="15.99" width="0.254" layer="16"/> |
<wire x1="11.5" y1="15.99" x2="11.19" y2="16.43" width="0.254" layer="16"/> |
</signal> |
<signal name="N$5"> |
<contactref element="U1" pad="12"/> |
<contactref element="C2" pad="2"/> |
<wire x1="14.99" y1="17.61" x2="14.99" y2="20.26" width="0.254" layer="16"/> |
<wire x1="14.99" y1="20.26" x2="14.25" y2="21" width="0.254" layer="16"/> |
<wire x1="14.25" y1="21" x2="10.25" y2="21" width="0.254" layer="16"/> |
<wire x1="10.25" y1="21" x2="9.5" y2="20.25" width="0.254" layer="16"/> |
<wire x1="9.5" y1="20.25" x2="9.5" y2="15.89" width="0.254" layer="16"/> |
<wire x1="9.5" y1="15.89" x2="9.29" y2="16.43" width="0.254" layer="16"/> |
</signal> |
<signal name="GND"> |
<contactref element="C1" pad="2"/> |
<contactref element="C3" pad="2"/> |
<contactref element="U1" pad="9"/> |
<contactref element="U1" pad="11"/> |
<contactref element="SV1" pad="1"/> |
<contactref element="SV1" pad="2"/> |
<contactref element="SV1" pad="9"/> |
<contactref element="SV1" pad="10"/> |
<polygon width="0.254" layer="16"> |
<vertex x="0" y="0"/> |
<vertex x="0" y="22"/> |
<vertex x="20.25" y="22"/> |
<vertex x="20.25" y="0"/> |
</polygon> |
<wire x1="11.25" y1="19.22" x2="10.03" y2="19.22" width="0.3048" layer="16"/> |
<wire x1="10.03" y1="19.22" x2="10" y2="19.25" width="0.3048" layer="16"/> |
<wire x1="10" y1="19.25" x2="10" y2="18" width="0.3048" layer="16"/> |
<wire x1="10" y1="18" x2="10.25" y2="17.75" width="0.3048" layer="16"/> |
<wire x1="10.25" y1="17.75" x2="10.25" y2="15.5" width="0.3048" layer="16"/> |
<wire x1="10.25" y1="15.5" x2="9.25" y2="14.5" width="0.3048" layer="16"/> |
<wire x1="9.25" y1="14.5" x2="9.25" y2="14.75" width="0.3048" layer="16"/> |
</signal> |
<signal name="N$1"> |
<contactref element="U1" pad="10"/> |
<contactref element="C1" pad="1"/> |
<wire x1="13.99" y1="17.61" x2="13.99" y2="18.76" width="0.254" layer="16"/> |
<wire x1="13.99" y1="18.76" x2="13" y2="19.75" width="0.254" layer="16"/> |
<wire x1="13" y1="19.75" x2="13.12" y2="19.75" width="0.254" layer="16"/> |
<wire x1="13.12" y1="19.75" x2="13.15" y2="19.22" width="0.254" layer="16"/> |
</signal> |
<signal name="VDD"> |
<contactref element="SV1" pad="5"/> |
<contactref element="SV1" pad="6"/> |
<contactref element="U1" pad="4"/> |
<contactref element="U1" pad="2"/> |
<contactref element="C3" pad="1"/> |
<contactref element="R2" pad="2"/> |
<contactref element="R3" pad="2"/> |
<wire x1="3.81" y1="14.99" x2="6.35" y2="14.99" width="0.4064" layer="16"/> |
<wire x1="14.49" y1="14.87" x2="14.49" y2="13.74" width="0.254" layer="16"/> |
<wire x1="14.49" y1="13.74" x2="14.25" y2="13.5" width="0.254" layer="16"/> |
<wire x1="14.25" y1="13.5" x2="13.5" y2="13.5" width="0.254" layer="16"/> |
<wire x1="13.5" y1="13.5" x2="11.75" y2="13.5" width="0.4064" layer="16"/> |
<wire x1="11.75" y1="13.5" x2="11.25" y2="13.5" width="0.4064" layer="16"/> |
<wire x1="11.25" y1="13.5" x2="10.75" y2="13.5" width="0.4064" layer="16"/> |
<wire x1="13.49" y1="14.87" x2="13.49" y2="13.51" width="0.254" layer="16"/> |
<wire x1="13.49" y1="13.51" x2="13.5" y2="13.5" width="0.254" layer="16"/> |
<wire x1="13.49" y1="13.51" x2="13.49" y2="12.63" width="0.4064" layer="16"/> |
<wire x1="13.49" y1="12.63" x2="13.54" y2="12.43" width="0.254" layer="16"/> |
<wire x1="11.19" y1="14.66" x2="11.19" y2="13.56" width="0.4064" layer="16"/> |
<wire x1="11.19" y1="13.56" x2="11.25" y2="13.5" width="0.254" layer="16"/> |
<wire x1="10.69" y1="13.44" x2="10.75" y2="13.5" width="0.254" layer="16"/> |
<wire x1="10.75" y1="13.5" x2="9.5" y2="13.5" width="0.4064" layer="16"/> |
<wire x1="9.5" y1="13.5" x2="8.5" y2="13.5" width="0.4064" layer="16"/> |
<wire x1="8.5" y1="13.5" x2="7" y2="15" width="0.4064" layer="16"/> |
<wire x1="7" y1="15" x2="6.25" y2="15" width="0.4064" layer="16"/> |
<wire x1="9.39" y1="12.69" x2="9.5" y2="12.69" width="0.4064" layer="16"/> |
<wire x1="9.5" y1="12.69" x2="9.5" y2="13.5" width="0.4064" layer="16"/> |
<contactref element="R1" pad="2"/> |
<wire x1="11.75" y1="11.422" x2="11.75" y2="13.5" width="0.4064" layer="16"/> |
<wire x1="6.35" y1="14.99" x2="6.25" y2="15" width="0" layer="19" extent="16-16"/> |
</signal> |
<signal name="N$2"> |
<contactref element="U1" pad="13"/> |
<contactref element="R1" pad="1"/> |
<wire x1="15.61" y1="16.99" x2="16.26" y2="16.99" width="0.254" layer="16"/> |
<wire x1="16.26" y1="16.99" x2="17" y2="16.25" width="0.254" layer="16"/> |
<wire x1="17" y1="16.25" x2="17" y2="11" width="0.254" layer="16"/> |
<wire x1="17" y1="11" x2="15.25" y2="9.25" width="0.254" layer="16"/> |
<wire x1="15.25" y1="9.25" x2="12.5" y2="9.25" width="0.254" layer="16"/> |
<wire x1="12.5" y1="9.25" x2="12.25" y2="9" width="0.254" layer="16"/> |
<wire x1="12.25" y1="9" x2="12.172" y2="9" width="0.254" layer="16"/> |
<wire x1="12.172" y1="9" x2="11.75" y2="8.578" width="0.254" layer="16"/> |
</signal> |
</signals> |
</board> |
</drawing> |
</eagle> |
/Modules/Sensors/MAG01A/SCH_PCB/untitled.sch |
---|
0,0 → 1,655 |
<?xml version="1.0" encoding="utf-8"?> |
<!DOCTYPE eagle SYSTEM "eagle.dtd"> |
<eagle version="6.1"> |
<drawing> |
<settings> |
<setting alwaysvectorfont="no"/> |
<setting verticaltext="up"/> |
</settings> |
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/> |
<layers> |
<layer number="1" name="Top" color="4" fill="1" visible="no" active="no"/> |
<layer number="16" name="Bottom" color="1" fill="1" visible="no" active="no"/> |
<layer number="17" name="Pads" color="2" fill="1" visible="no" active="no"/> |
<layer number="18" name="Vias" color="2" fill="1" visible="no" active="no"/> |
<layer number="19" name="Unrouted" color="6" fill="1" visible="no" active="no"/> |
<layer number="20" name="Dimension" color="7" fill="1" visible="no" active="no"/> |
<layer number="21" name="tPlace" color="16" fill="1" visible="no" active="no"/> |
<layer number="22" name="bPlace" color="14" fill="1" visible="no" active="no"/> |
<layer number="23" name="tOrigins" color="15" fill="1" visible="no" active="no"/> |
<layer number="24" name="bOrigins" color="15" fill="1" visible="no" active="no"/> |
<layer number="25" name="tNames" color="7" fill="1" visible="no" active="no"/> |
<layer number="26" name="bNames" color="7" fill="1" visible="no" active="no"/> |
<layer number="27" name="tValues" color="7" fill="1" visible="no" active="no"/> |
<layer number="28" name="bValues" color="7" fill="1" visible="no" active="no"/> |
<layer number="29" name="tStop" color="7" fill="3" visible="no" active="no"/> |
<layer number="30" name="bStop" color="7" fill="6" visible="no" active="no"/> |
<layer number="31" name="tCream" color="11" fill="4" visible="no" active="no"/> |
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="no"/> |
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="no"/> |
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="no"/> |
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="no"/> |
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="no"/> |
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="no"/> |
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="no"/> |
<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="no"/> |
<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="no"/> |
<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="no"/> |
<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="no"/> |
<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="no"/> |
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="no"/> |
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="no"/> |
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="no"/> |
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="no"/> |
<layer number="48" name="Document" color="7" fill="1" visible="no" active="no"/> |
<layer number="49" name="Reference" color="13" fill="1" visible="no" active="no"/> |
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/> |
<layer number="51" name="tDocu" color="14" fill="1" visible="no" active="no"/> |
<layer number="52" name="bDocu" color="7" fill="1" visible="no" active="no"/> |
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/> |
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/> |
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/> |
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/> |
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/> |
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/> |
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/> |
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/> |
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/> |
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/> |
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="104" name="Name" color="16" fill="1" visible="yes" active="yes"/> |
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/> |
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="200" name="200bmp" color="1" fill="10" visible="yes" active="yes"/> |
<layer number="201" name="201bmp" color="2" fill="10" visible="yes" active="yes"/> |
<layer number="202" name="202bmp" color="3" fill="10" visible="yes" active="yes"/> |
<layer number="203" name="203bmp" color="4" fill="10" visible="yes" active="yes"/> |
<layer number="204" name="204bmp" color="5" fill="10" visible="yes" active="yes"/> |
<layer number="205" name="205bmp" color="6" fill="10" visible="yes" active="yes"/> |
<layer number="206" name="206bmp" color="7" fill="10" visible="yes" active="yes"/> |
<layer number="207" name="207bmp" color="8" fill="10" visible="yes" active="yes"/> |
<layer number="208" name="208bmp" color="9" fill="10" visible="yes" active="yes"/> |
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/> |
<layer number="231" name="Eagle3D_PG1" color="14" fill="1" visible="yes" active="yes"/> |
<layer number="232" name="Eagle3D_PG2" color="14" fill="2" visible="yes" active="yes"/> |
<layer number="233" name="Eagle3D_PG3" color="14" fill="4" visible="yes" active="yes"/> |
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/> |
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/> |
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/> |
</layers> |
<schematic xreflabel="%F%N/%S.%C%R" xrefpart="/%S.%C%R"> |
<libraries> |
<library name="SparkFun"> |
<packages> |
<package name="16LPCC"> |
<wire x1="-1.7" y1="-1.7" x2="-1.7" y2="-1.1" width="0.2032" layer="21"/> |
<wire x1="-1.7" y1="-1.7" x2="-1.1" y2="-1.7" width="0.2032" layer="21"/> |
<wire x1="1.1" y1="-1.7" x2="1.7" y2="-1.7" width="0.2032" layer="21"/> |
<wire x1="1.7" y1="-1.7" x2="1.7" y2="-1.1" width="0.2032" layer="21"/> |
<wire x1="1.7" y1="1.1" x2="1.7" y2="1.7" width="0.2032" layer="21"/> |
<wire x1="1.7" y1="1.7" x2="1.1" y2="1.7" width="0.2032" layer="21"/> |
<wire x1="-1.28" y1="1.635" x2="-1.635" y2="1.26" width="0.2032" layer="21"/> |
<smd name="4" x="-1.37" y="-0.75" dx="0.65" dy="0.28" layer="1"/> |
<smd name="3" x="-1.37" y="-0.25" dx="0.65" dy="0.28" layer="1"/> |
<smd name="2" x="-1.37" y="0.25" dx="0.65" dy="0.28" layer="1"/> |
<smd name="1" x="-1.37" y="0.75" dx="0.65" dy="0.28" layer="1"/> |
<smd name="5" x="-0.75" y="-1.37" dx="0.65" dy="0.28" layer="1" rot="R270"/> |
<smd name="15" x="-0.25" y="1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="14" x="0.25" y="1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="13" x="0.75" y="1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="12" x="1.37" y="0.75" dx="0.65" dy="0.28" layer="1"/> |
<smd name="11" x="1.37" y="0.25" dx="0.65" dy="0.28" layer="1"/> |
<smd name="10" x="1.37" y="-0.25" dx="0.65" dy="0.28" layer="1"/> |
<smd name="9" x="1.37" y="-0.75" dx="0.65" dy="0.28" layer="1"/> |
<smd name="6" x="-0.25" y="-1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="8" x="0.75" y="-1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="16" x="-0.75" y="1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<smd name="7" x="0.25" y="-1.37" dx="0.65" dy="0.28" layer="1" rot="R90"/> |
<text x="-1.27" y="1.905" size="0.6096" layer="25">>NAME</text> |
<text x="-1.905" y="-2.54" size="0.6096" layer="27">>VALUE</text> |
</package> |
</packages> |
<symbols> |
<symbol name="HMC5883L"> |
<wire x1="10.16" y1="15.24" x2="10.16" y2="-15.24" width="0.254" layer="94"/> |
<wire x1="10.16" y1="-15.24" x2="-10.16" y2="-15.24" width="0.254" layer="94"/> |
<wire x1="-10.16" y1="-15.24" x2="-10.16" y2="15.24" width="0.254" layer="94"/> |
<wire x1="-10.16" y1="15.24" x2="10.16" y2="15.24" width="0.254" layer="94"/> |
<text x="-10.16" y="15.24" size="1.778" layer="95">>NAME</text> |
<text x="-10.16" y="-17.78" size="1.778" layer="96">>VALUE</text> |
<pin name="SCL" x="15.24" y="2.54" length="middle" rot="R180"/> |
<pin name="VDD" x="15.24" y="12.7" length="middle" rot="R180"/> |
<pin name="NC@1" x="-15.24" y="12.7" length="middle"/> |
<pin name="S1" x="15.24" y="7.62" length="middle" rot="R180"/> |
<pin name="NC@2" x="-15.24" y="10.16" length="middle"/> |
<pin name="NC@3" x="-15.24" y="7.62" length="middle"/> |
<pin name="NC@4" x="-15.24" y="5.08" length="middle"/> |
<pin name="SETP" x="15.24" y="-5.08" length="middle" rot="R180"/> |
<pin name="GND@1" x="-15.24" y="-7.62" length="middle"/> |
<pin name="C1" x="-15.24" y="-2.54" length="middle"/> |
<pin name="GND@2" x="-15.24" y="-10.16" length="middle"/> |
<pin name="SETC" x="15.24" y="-7.62" length="middle" rot="R180"/> |
<pin name="VDDIO" x="15.24" y="10.16" length="middle" rot="R180"/> |
<pin name="NC@5" x="-15.24" y="2.54" length="middle"/> |
<pin name="DRDY" x="15.24" y="-12.7" length="middle" rot="R180"/> |
<pin name="SDA" x="15.24" y="0" length="middle" rot="R180"/> |
</symbol> |
<symbol name="GND"> |
<wire x1="-1.905" y1="0" x2="1.905" y2="0" width="0.254" layer="94"/> |
<text x="-2.54" y="-2.54" size="1.778" layer="96">>VALUE</text> |
<pin name="GND" x="0" y="2.54" visible="off" length="short" direction="sup" rot="R270"/> |
</symbol> |
</symbols> |
<devicesets> |
<deviceset name="HMC5883L"> |
<description>3 Axis Digital Compass IC</description> |
<gates> |
<gate name="G$1" symbol="HMC5883L" x="0" y="0"/> |
</gates> |
<devices> |
<device name="SMD" package="16LPCC"> |
<connects> |
<connect gate="G$1" pin="C1" pad="10"/> |
<connect gate="G$1" pin="DRDY" pad="15"/> |
<connect gate="G$1" pin="GND@1" pad="9"/> |
<connect gate="G$1" pin="GND@2" pad="11"/> |
<connect gate="G$1" pin="NC@1" pad="3"/> |
<connect gate="G$1" pin="NC@2" pad="5"/> |
<connect gate="G$1" pin="NC@3" pad="6"/> |
<connect gate="G$1" pin="NC@4" pad="7"/> |
<connect gate="G$1" pin="NC@5" pad="14"/> |
<connect gate="G$1" pin="S1" pad="4"/> |
<connect gate="G$1" pin="SCL" pad="1"/> |
<connect gate="G$1" pin="SDA" pad="16"/> |
<connect gate="G$1" pin="SETC" pad="12"/> |
<connect gate="G$1" pin="SETP" pad="8"/> |
<connect gate="G$1" pin="VDD" pad="2"/> |
<connect gate="G$1" pin="VDDIO" pad="13"/> |
</connects> |
<technologies> |
<technology name=""/> |
</technologies> |
</device> |
</devices> |
</deviceset> |
<deviceset name="GND" prefix="GND"> |
<description><b>SUPPLY SYMBOL</b></description> |
<gates> |
<gate name="1" symbol="GND" x="0" y="0"/> |
</gates> |
<devices> |
<device name=""> |
<technologies> |
<technology name=""/> |
</technologies> |
</device> |
</devices> |
</deviceset> |
</devicesets> |
</library> |
<library name="moje_C"> |
<packages> |
<package name="C0805"> |
<wire x1="-0.381" y1="0.66" x2="0.381" y2="0.66" width="0.1016" layer="51"/> |
<wire x1="-0.356" y1="-0.66" x2="0.381" y2="-0.66" width="0.1016" layer="51"/> |
<smd name="1" x="-0.95" y="0" dx="1.3" dy="1.5" layer="1"/> |
<smd name="2" x="0.95" y="0" dx="1.3" dy="1.5" layer="1"/> |
<text x="-1.27" y="1.27" size="1.27" layer="25">>NAME</text> |
<text x="-1.27" y="-2.54" size="1.27" layer="27">>VALUE</text> |
<rectangle x1="-1.0922" y1="-0.7239" x2="-0.3421" y2="0.7262" layer="51"/> |
<rectangle x1="0.3556" y1="-0.7239" x2="1.1057" y2="0.7262" layer="51"/> |
</package> |
</packages> |
<symbols> |
<symbol name="C"> |
<wire x1="0" y1="2.54" x2="0" y2="2.032" width="0.1524" layer="94"/> |
<wire x1="0" y1="0" x2="0" y2="0.508" width="0.1524" layer="94"/> |
<text x="1.524" y="2.921" size="1.778" layer="95">>NAME</text> |
<text x="1.524" y="-2.159" size="1.778" layer="96">>VALUE</text> |
<rectangle x1="-2.032" y1="0.508" x2="2.032" y2="1.016" layer="94"/> |
<rectangle x1="-2.032" y1="1.524" x2="2.032" y2="2.032" layer="94"/> |
<pin name="1" x="0" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/> |
<pin name="2" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/> |
</symbol> |
</symbols> |
<devicesets> |
<deviceset name="C0805" prefix="C" uservalue="yes"> |
<gates> |
<gate name="G$1" symbol="C" x="0" y="0"/> |
</gates> |
<devices> |
<device name="" package="C0805"> |
<connects> |
<connect gate="G$1" pin="1" pad="1"/> |
<connect gate="G$1" pin="2" pad="2"/> |
</connects> |
<technologies> |
<technology name=""/> |
</technologies> |
</device> |
</devices> |
</deviceset> |
</devicesets> |
</library> |
<library name="moje_R"> |
<packages> |
<package name="0805"> |
<wire x1="-0.41" y1="0.635" x2="0.41" y2="0.635" width="0.1524" layer="51"/> |
<wire x1="-0.41" y1="-0.635" x2="0.41" y2="-0.635" width="0.1524" layer="51"/> |
<smd name="1" x="-0.95" y="0" dx="1.3" dy="1.5" layer="1"/> |
<smd name="2" x="0.95" y="0" dx="1.3" dy="1.5" layer="1"/> |
<text x="-0.635" y="1.27" size="1.27" layer="25">>NAME</text> |
<text x="-0.635" y="-2.54" size="1.27" layer="27">>VALUE</text> |
<rectangle x1="0.4064" y1="-0.6985" x2="1.0564" y2="0.7015" layer="51"/> |
<rectangle x1="-1.0668" y1="-0.6985" x2="-0.4168" y2="0.7015" layer="51"/> |
</package> |
<package name="1206"> |
<wire x1="0.9525" y1="-0.8128" x2="-0.9652" y2="-0.8128" width="0.1524" layer="51"/> |
<wire x1="0.9525" y1="0.8128" x2="-0.9652" y2="0.8128" width="0.1524" layer="51"/> |
<smd name="2" x="1.422" y="0" dx="1.6" dy="1.803" layer="1"/> |
<smd name="1" x="-1.422" y="0" dx="1.6" dy="1.803" layer="1"/> |
<text x="-1.27" y="1.27" size="1.27" layer="25">>NAME</text> |
<text x="-1.27" y="-2.54" size="1.27" layer="27">>VALUE</text> |
<rectangle x1="-1.6891" y1="-0.8763" x2="-0.9525" y2="0.8763" layer="51"/> |
<rectangle x1="0.9525" y1="-0.8763" x2="1.6891" y2="0.8763" layer="51"/> |
</package> |
</packages> |
<symbols> |
<symbol name="1206"> |
<wire x1="-2.54" y1="-0.889" x2="2.54" y2="-0.889" width="0.254" layer="94"/> |
<wire x1="2.54" y1="0.889" x2="-2.54" y2="0.889" width="0.254" layer="94"/> |
<wire x1="2.54" y1="-0.889" x2="2.54" y2="0.889" width="0.254" layer="94"/> |
<wire x1="-2.54" y1="-0.889" x2="-2.54" y2="0.889" width="0.254" layer="94"/> |
<text x="-3.81" y="1.4986" size="1.778" layer="95">>NAME</text> |
<text x="-3.81" y="-3.302" size="1.778" layer="96">>VALUE</text> |
<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/> |
<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/> |
</symbol> |
</symbols> |
<devicesets> |
<deviceset name="R0805" prefix="R" uservalue="yes"> |
<gates> |
<gate name="G$1" symbol="1206" x="0" y="0"/> |
</gates> |
<devices> |
<device name="" package="0805"> |
<connects> |
<connect gate="G$1" pin="1" pad="1"/> |
<connect gate="G$1" pin="2" pad="2"/> |
</connects> |
<technologies> |
<technology name=""/> |
</technologies> |
</device> |
</devices> |
</deviceset> |
<deviceset name="R1206" prefix="R" uservalue="yes"> |
<gates> |
<gate name="G$1" symbol="1206" x="0" y="0"/> |
</gates> |
<devices> |
<device name="" package="1206"> |
<connects> |
<connect gate="G$1" pin="1" pad="1"/> |
<connect gate="G$1" pin="2" pad="2"/> |
</connects> |
<technologies> |
<technology name=""/> |
</technologies> |
</device> |
</devices> |
</deviceset> |
</devicesets> |
</library> |
<library name="moje_hrebinky"> |
<description><b>Pin Headers</b><p> |
Naming:<p> |
MA = male<p> |
# contacts - # rows<p> |
W = angled<p> |
<author>Created by librarian@cadsoft.de</author></description> |
<packages> |
<package name="MA05-2"> |
<description><b>PIN HEADER</b></description> |
<wire x1="-5.715" y1="2.54" x2="-4.445" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="-4.445" y1="2.54" x2="-3.81" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="-3.81" y1="1.905" x2="-3.175" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="-3.175" y1="2.54" x2="-1.905" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="-1.905" y1="2.54" x2="-1.27" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="-5.715" y1="2.54" x2="-6.35" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="-1.27" y1="1.905" x2="-0.635" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="-0.635" y1="2.54" x2="0.635" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="0.635" y1="2.54" x2="1.27" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="1.905" y1="2.54" x2="3.175" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="3.175" y1="2.54" x2="3.81" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="3.81" y1="1.905" x2="4.445" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="4.445" y1="2.54" x2="5.715" y2="2.54" width="0.1524" layer="21"/> |
<wire x1="1.905" y1="2.54" x2="1.27" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="-3.81" y1="-1.905" x2="-4.445" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-1.27" y1="-1.905" x2="-1.905" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-1.905" y1="-2.54" x2="-3.175" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-3.175" y1="-2.54" x2="-3.81" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="-6.35" y1="1.905" x2="-6.35" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="-6.35" y1="-1.905" x2="-5.715" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-4.445" y1="-2.54" x2="-5.715" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="1.27" y1="-1.905" x2="0.635" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="0.635" y1="-2.54" x2="-0.635" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="-0.635" y1="-2.54" x2="-1.27" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="3.81" y1="-1.905" x2="3.175" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="5.715" y1="-2.54" x2="4.445" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="4.445" y1="-2.54" x2="3.81" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="1.27" y1="-1.905" x2="1.905" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="3.175" y1="-2.54" x2="1.905" y2="-2.54" width="0.1524" layer="21"/> |
<wire x1="6.35" y1="1.905" x2="6.35" y2="-1.905" width="0.1524" layer="21"/> |
<wire x1="5.715" y1="2.54" x2="6.35" y2="1.905" width="0.1524" layer="21"/> |
<wire x1="6.35" y1="-1.905" x2="5.715" y2="-2.54" width="0.1524" layer="21"/> |
<pad name="1" x="-5.08" y="-1.27" drill="0.9144" diameter="1.651" shape="square"/> |
<pad name="3" x="-2.54" y="-1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="5" x="0" y="-1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="7" x="2.54" y="-1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="9" x="5.08" y="-1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="2" x="-5.08" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="4" x="-2.54" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="6" x="0" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="8" x="2.54" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<pad name="10" x="5.08" y="1.27" drill="0.889" diameter="1.651" shape="square"/> |
<text x="-6.35" y="2.921" size="1.27" layer="25" ratio="10">>NAME</text> |
<text x="0" y="-4.191" size="1.27" layer="27" ratio="10">>VALUE</text> |
<rectangle x1="-2.794" y1="-1.524" x2="-2.286" y2="-1.016" layer="51"/> |
<rectangle x1="-5.334" y1="-1.524" x2="-4.826" y2="-1.016" layer="51"/> |
<rectangle x1="-0.254" y1="-1.524" x2="0.254" y2="-1.016" layer="51"/> |
<rectangle x1="4.826" y1="-1.524" x2="5.334" y2="-1.016" layer="51"/> |
<rectangle x1="2.286" y1="-1.524" x2="2.794" y2="-1.016" layer="51"/> |
<rectangle x1="-5.334" y1="1.016" x2="-4.826" y2="1.524" layer="51"/> |
<rectangle x1="-2.794" y1="1.016" x2="-2.286" y2="1.524" layer="51"/> |
<rectangle x1="-0.254" y1="1.016" x2="0.254" y2="1.524" layer="51"/> |
<rectangle x1="2.286" y1="1.016" x2="2.794" y2="1.524" layer="51"/> |
<rectangle x1="4.826" y1="1.016" x2="5.334" y2="1.524" layer="51"/> |
<circle x="-6.35" y="-2.54" radius="0.127" width="0.127" layer="21"/> |
</package> |
</packages> |
<symbols> |
<symbol name="MA04-2"> |
<wire x1="1.27" y1="0" x2="2.54" y2="0" width="0.6096" layer="94"/> |
<wire x1="-2.54" y1="0" x2="-1.27" y2="0" width="0.6096" layer="94"/> |
<text x="-3.81" y="-5.08" size="1.778" layer="96">>VALUE</text> |
<text x="-3.81" y="3.302" size="1.778" layer="95">>NAME</text> |
<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/> |
<pin name="K" x="-5.08" y="0" visible="off" length="middle" direction="pas"/> |
</symbol> |
</symbols> |
<devicesets> |
<deviceset name="MA05-2" prefix="SV" uservalue="yes"> |
<description><b>PIN HEADER</b></description> |
<gates> |
<gate name="-1" symbol="MA04-2" x="0" y="7.62"/> |
<gate name="-2" symbol="MA04-2" x="0" y="2.54"/> |
<gate name="-3" symbol="MA04-2" x="0" y="-2.54"/> |
<gate name="-4" symbol="MA04-2" x="10.16" y="7.62"/> |
<gate name="-5" symbol="MA04-2" x="10.16" y="2.54"/> |
</gates> |
<devices> |
<device name="" package="MA05-2"> |
<connects> |
<connect gate="-1" pin="K" pad="1 2"/> |
<connect gate="-2" pin="K" pad="3 4"/> |
<connect gate="-3" pin="K" pad="5 6"/> |
<connect gate="-4" pin="K" pad="7 8"/> |
<connect gate="-5" pin="K" pad="9 10"/> |
</connects> |
<technologies> |
<technology name=""> |
<attribute name="MF" value="" constant="no"/> |
<attribute name="MPN" value="" constant="no"/> |
<attribute name="OC_FARNELL" value="unknown" constant="no"/> |
<attribute name="OC_NEWARK" value="unknown" constant="no"/> |
</technology> |
</technologies> |
</device> |
</devices> |
</deviceset> |
</devicesets> |
</library> |
<library name="moje"> |
<packages> |
<package name="SROUB3M"> |
<pad name="P$1" x="0" y="0" drill="3.2" diameter="6.4516"/> |
</package> |
</packages> |
<symbols> |
<symbol name="SROUB"> |
<circle x="0" y="0" radius="2" width="0.254" layer="94"/> |
<wire x1="-2.54" y1="0" x2="-2.032" y2="0" width="0.1778" layer="94"/> |
<text x="-2.54" y="2.54" size="1.778" layer="95">>name</text> |
<pin name="P$1" x="-7.62" y="0" visible="off" length="middle"/> |
</symbol> |
</symbols> |
<devicesets> |
<deviceset name="SROUB3M" prefix="X"> |
<gates> |
<gate name="P4" symbol="SROUB" x="0" y="0"/> |
</gates> |
<devices> |
<device name="" package="SROUB3M"> |
<connects> |
<connect gate="P4" pin="P$1" pad="P$1"/> |
</connects> |
<technologies> |
<technology name=""/> |
</technologies> |
</device> |
</devices> |
</deviceset> |
</devicesets> |
</library> |
</libraries> |
<attributes> |
</attributes> |
<variantdefs> |
</variantdefs> |
<classes> |
<class number="0" name="default" width="0" drill="0"> |
</class> |
</classes> |
<parts> |
<part name="U1" library="SparkFun" deviceset="HMC5883L" device="SMD"/> |
<part name="GND1" library="SparkFun" deviceset="GND" device=""/> |
<part name="GND2" library="SparkFun" deviceset="GND" device=""/> |
<part name="GND3" library="SparkFun" deviceset="GND" device=""/> |
<part name="C1" library="moje_C" deviceset="C0805" device="" value="4.7uF"/> |
<part name="C3" library="moje_C" deviceset="C0805" device="" value="0.1uF"/> |
<part name="C2" library="moje_C" deviceset="C0805" device="" value="0.22uF"/> |
<part name="R2" library="moje_R" deviceset="R0805" device="" value="2k7"/> |
<part name="R3" library="moje_R" deviceset="R0805" device="" value="2k7"/> |
<part name="SV1" library="moje_hrebinky" deviceset="MA05-2" device=""/> |
<part name="X1" library="moje" deviceset="SROUB3M" device=""/> |
<part name="X2" library="moje" deviceset="SROUB3M" device=""/> |
<part name="X3" library="moje" deviceset="SROUB3M" device=""/> |
<part name="X4" library="moje" deviceset="SROUB3M" device=""/> |
<part name="R1" library="moje_R" deviceset="R1206" device="" value="0R"/> |
</parts> |
<sheets> |
<sheet> |
<plain> |
<text x="0" y="-17.78" size="1.778" layer="95">GND</text> |
<text x="0" y="-48.26" size="1.778" layer="95">GND</text> |
<text x="0" y="-25.4" size="1.778" layer="95">SCL</text> |
<text x="0" y="-33.02" size="1.778" layer="95">VDD</text> |
<text x="0" y="-40.64" size="1.778" layer="95">SDA</text> |
<text x="55.88" y="27.94" size="1.778" layer="95">VDD</text> |
<text x="25.4" y="38.1" size="1.778" layer="95">VDD</text> |
</plain> |
<instances> |
<instance part="U1" gate="G$1" x="5.08" y="10.16"/> |
<instance part="GND1" gate="1" x="-22.86" y="-7.62"/> |
<instance part="GND2" gate="1" x="-12.7" y="-7.62"/> |
<instance part="GND3" gate="1" x="50.8" y="12.7"/> |
<instance part="C1" gate="G$1" x="-22.86" y="0"/> |
<instance part="C3" gate="G$1" x="50.8" y="20.32"/> |
<instance part="C2" gate="G$1" x="30.48" y="0"/> |
<instance part="R2" gate="G$1" x="30.48" y="20.32" rot="R90"/> |
<instance part="R3" gate="G$1" x="38.1" y="20.32" rot="R90"/> |
<instance part="SV1" gate="-1" x="-12.7" y="-17.78" rot="R180"/> |
<instance part="SV1" gate="-2" x="-12.7" y="-25.4" rot="R180"/> |
<instance part="SV1" gate="-3" x="-12.7" y="-33.02" rot="R180"/> |
<instance part="SV1" gate="-4" x="-12.7" y="-40.64" rot="R180"/> |
<instance part="SV1" gate="-5" x="-12.7" y="-48.26" rot="R180"/> |
<instance part="X1" gate="P4" x="22.86" y="-19.05"/> |
<instance part="X2" gate="P4" x="22.86" y="-29.21"/> |
<instance part="X3" gate="P4" x="35.56" y="-19.05"/> |
<instance part="X4" gate="P4" x="35.56" y="-29.21"/> |
<instance part="R1" gate="G$1" x="22.86" y="33.02" rot="R90"/> |
</instances> |
<busses> |
</busses> |
<nets> |
<net name="SCL" class="0"> |
<segment> |
<wire x1="20.32" y1="12.7" x2="30.48" y2="12.7" width="0.1524" layer="91"/> |
<wire x1="30.48" y1="15.24" x2="30.48" y2="12.7" width="0.1524" layer="91"/> |
<wire x1="30.48" y1="12.7" x2="40.64" y2="12.7" width="0.1524" layer="91"/> |
<junction x="30.48" y="12.7"/> |
<label x="41.91" y="12.7" size="1.778" layer="95"/> |
<pinref part="U1" gate="G$1" pin="SCL"/> |
<pinref part="R2" gate="G$1" pin="1"/> |
</segment> |
<segment> |
<pinref part="SV1" gate="-2" pin="K"/> |
<wire x1="-7.62" y1="-25.4" x2="-2.54" y2="-25.4" width="0.1524" layer="91"/> |
</segment> |
</net> |
<net name="SDA" class="0"> |
<segment> |
<wire x1="20.32" y1="10.16" x2="38.1" y2="10.16" width="0.1524" layer="91"/> |
<wire x1="38.1" y1="10.16" x2="38.1" y2="15.24" width="0.1524" layer="91"/> |
<wire x1="38.1" y1="10.16" x2="40.64" y2="10.16" width="0.1524" layer="91"/> |
<junction x="38.1" y="10.16"/> |
<label x="41.91" y="10.16" size="1.778" layer="95"/> |
<pinref part="U1" gate="G$1" pin="SDA"/> |
<pinref part="R3" gate="G$1" pin="1"/> |
</segment> |
<segment> |
<pinref part="SV1" gate="-4" pin="K"/> |
<wire x1="-7.62" y1="-40.64" x2="-2.54" y2="-40.64" width="0.1524" layer="91"/> |
</segment> |
</net> |
<net name="N$4" class="0"> |
<segment> |
<wire x1="20.32" y1="5.08" x2="22.86" y2="5.08" width="0.1524" layer="91"/> |
<wire x1="22.86" y1="5.08" x2="22.86" y2="7.62" width="0.1524" layer="91"/> |
<wire x1="22.86" y1="7.62" x2="30.48" y2="7.62" width="0.1524" layer="91"/> |
<wire x1="30.48" y1="7.62" x2="30.48" y2="5.08" width="0.1524" layer="91"/> |
<pinref part="U1" gate="G$1" pin="SETP"/> |
<pinref part="C2" gate="G$1" pin="1"/> |
</segment> |
</net> |
<net name="N$5" class="0"> |
<segment> |
<wire x1="20.32" y1="2.54" x2="22.86" y2="2.54" width="0.1524" layer="91"/> |
<wire x1="22.86" y1="2.54" x2="22.86" y2="-5.08" width="0.1524" layer="91"/> |
<wire x1="22.86" y1="-5.08" x2="30.48" y2="-5.08" width="0.1524" layer="91"/> |
<wire x1="30.48" y1="-5.08" x2="30.48" y2="-2.54" width="0.1524" layer="91"/> |
<pinref part="U1" gate="G$1" pin="SETC"/> |
<pinref part="C2" gate="G$1" pin="2"/> |
</segment> |
</net> |
<net name="GND" class="0"> |
<segment> |
<wire x1="-22.86" y1="-5.08" x2="-22.86" y2="-2.54" width="0.1524" layer="91"/> |
<pinref part="GND1" gate="1" pin="GND"/> |
<pinref part="C1" gate="G$1" pin="2"/> |
</segment> |
<segment> |
<wire x1="50.8" y1="17.78" x2="50.8" y2="15.24" width="0.1524" layer="91"/> |
<pinref part="GND3" gate="1" pin="GND"/> |
<pinref part="C3" gate="G$1" pin="2"/> |
</segment> |
<segment> |
<wire x1="-12.7" y1="-5.08" x2="-12.7" y2="0" width="0.1524" layer="91"/> |
<wire x1="-12.7" y1="0" x2="-12.7" y2="2.54" width="0.1524" layer="91"/> |
<wire x1="-12.7" y1="2.54" x2="-10.16" y2="2.54" width="0.1524" layer="91"/> |
<wire x1="-10.16" y1="0" x2="-12.7" y2="0" width="0.1524" layer="91"/> |
<junction x="-12.7" y="0"/> |
<pinref part="GND2" gate="1" pin="GND"/> |
<pinref part="U1" gate="G$1" pin="GND@1"/> |
<pinref part="U1" gate="G$1" pin="GND@2"/> |
</segment> |
<segment> |
<pinref part="SV1" gate="-1" pin="K"/> |
<wire x1="-7.62" y1="-17.78" x2="-2.54" y2="-17.78" width="0.1524" layer="91"/> |
</segment> |
<segment> |
<pinref part="SV1" gate="-5" pin="K"/> |
<wire x1="-7.62" y1="-48.26" x2="-2.54" y2="-48.26" width="0.1524" layer="91"/> |
</segment> |
</net> |
<net name="N$1" class="0"> |
<segment> |
<wire x1="-22.86" y1="7.62" x2="-10.16" y2="7.62" width="0.1524" layer="91"/> |
<pinref part="U1" gate="G$1" pin="C1"/> |
<pinref part="C1" gate="G$1" pin="1"/> |
<wire x1="-22.86" y1="5.08" x2="-22.86" y2="7.62" width="0.1524" layer="91"/> |
</segment> |
</net> |
<net name="VDD" class="0"> |
<segment> |
<pinref part="SV1" gate="-3" pin="K"/> |
<wire x1="-2.54" y1="-33.02" x2="-7.62" y2="-33.02" width="0.1524" layer="91"/> |
</segment> |
<segment> |
<wire x1="20.32" y1="17.78" x2="25.4" y2="17.78" width="0.1524" layer="91"/> |
<wire x1="25.4" y1="17.78" x2="25.4" y2="22.86" width="0.1524" layer="91"/> |
<wire x1="20.32" y1="22.86" x2="25.4" y2="22.86" width="0.1524" layer="91"/> |
<wire x1="25.4" y1="22.86" x2="25.4" y2="27.94" width="0.1524" layer="91"/> |
<wire x1="25.4" y1="27.94" x2="30.48" y2="27.94" width="0.1524" layer="91"/> |
<wire x1="30.48" y1="27.94" x2="30.48" y2="25.4" width="0.1524" layer="91"/> |
<wire x1="30.48" y1="27.94" x2="38.1" y2="27.94" width="0.1524" layer="91"/> |
<wire x1="38.1" y1="27.94" x2="38.1" y2="25.4" width="0.1524" layer="91"/> |
<wire x1="38.1" y1="27.94" x2="50.8" y2="27.94" width="0.1524" layer="91"/> |
<wire x1="50.8" y1="27.94" x2="50.8" y2="25.4" width="0.1524" layer="91"/> |
<wire x1="50.8" y1="27.94" x2="55.88" y2="27.94" width="0.1524" layer="91"/> |
<junction x="25.4" y="22.86"/> |
<junction x="30.48" y="27.94"/> |
<junction x="38.1" y="27.94"/> |
<junction x="50.8" y="27.94"/> |
<pinref part="U1" gate="G$1" pin="S1"/> |
<pinref part="U1" gate="G$1" pin="VDD"/> |
<pinref part="C3" gate="G$1" pin="1"/> |
<pinref part="R2" gate="G$1" pin="2"/> |
<pinref part="R3" gate="G$1" pin="2"/> |
<wire x1="22.86" y1="38.1" x2="22.86" y2="40.64" width="0.1524" layer="91"/> |
<pinref part="R1" gate="G$1" pin="2"/> |
</segment> |
</net> |
<net name="N$2" class="0"> |
<segment> |
<pinref part="U1" gate="G$1" pin="VDDIO"/> |
<pinref part="R1" gate="G$1" pin="1"/> |
<wire x1="20.32" y1="20.32" x2="22.86" y2="20.32" width="0.1524" layer="91"/> |
<wire x1="22.86" y1="20.32" x2="22.86" y2="27.94" width="0.1524" layer="91"/> |
</segment> |
</net> |
</nets> |
</sheet> |
</sheets> |
</schematic> |
</drawing> |
</eagle> |
/Modules/Sensors/MAG01A/SCH_PCB/MAG01A_PCB1.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/SCH_PCB/MAG01A_PCB2.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/SCH_PCB/eagle.epf |
---|
0,0 → 1,376 |
[Eagle] |
Version="06 01 00" |
Platform="Windows" |
Serial="62191E841E-LSR-WLM-1EL" |
Globals="Globals" |
Desktop="Desktop" |
[Globals] |
AutoSaveProject=1 |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/19inch.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/40xx.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/41xx.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/45xx.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/74ac-logic.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/74ttl-din.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/74xx-eu.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/74xx-little-de.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/74xx-little-us.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/74xx-us.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/751xx.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/Dip8.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/PaJa_22.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/advanced-test-technologies.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/agilent-technologies.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/allegro.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/altera-cyclone-II.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/altera-cyclone-III.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/altera-stratix-iv.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/altera.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/am29-memory.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/amd-mach.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/amd.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/amis.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/analog-devices.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/ase.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/atmel.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/austriamicrosystems.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/avago.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/axis.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/bananky.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/battery.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/burr-brown.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/busbar.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/buzzer.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/c-trimm.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/california-micro-devices.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/capacitor-wima.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/chipcard-siemens.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/cirrus-logic.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-3m.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-4ucon.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-amp-champ.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-amp-micromatch.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-amp-mt.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-amp-mt6.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-amp-quick.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-amp.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-amphenol.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-avx.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-berg.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-bosch.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-chipcard-iso7816.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-coax.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-commcon.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-conrad.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-cpci.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-cui.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-cypressindustries.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-deutsch.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-dil.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-ebyelectro.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-elco.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-erni.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-faston.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-fci.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-friwo.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-harting-h.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-harting-ml.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-harting-v.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-harting.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-hirose.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-hirschmann.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-jack.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-jae.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-jst.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-kycon.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-kyocera-elco.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-lemo.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-leotronics.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-lsta.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-lstb.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-lumberg.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-ml.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-molex.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-neutrik_ag.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-omron.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-panasonic.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-panduit.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-pc.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-pc104.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-254.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-3.81.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-350.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-500.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-508.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-762.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-me_max.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-mkds_5.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-phoenix-smkdsp.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-ptr500.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-pulse.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-rib.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-samtec.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-shiua-chyuan.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-stewart.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-stocko.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-subd.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-sullinselectronics.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-thomas-betts.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-tyco.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-tycoelectronics.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-vg.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-wago-500.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-wago-508.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-wago.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-wago255.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-weidmueller-sl35.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-wenzhou-yihua.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-xmultiple.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/con-yamaichi.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/crystal.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/csr.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/cypress.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/davicom.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/dc-dc-converter.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/dimensions.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/diode.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/discrete.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/display-hp.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/display-kingbright.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/display-lcd.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/docu-dummy.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/ecl.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/em-microelectronic.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/etx-board.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/exar.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/fairchild-semic.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/farnell.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/fiber-optic-hp.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/fiber-optic-siemens.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/fifo.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/flexipanel.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/fox-electronics.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/frames.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/freescale.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/ftdichip.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/fujitsu.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/fuse.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/gennum.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/halo-electronics.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/heatsink.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/holes.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/holtek.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/ic-package.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/inductor-coilcraft.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/inductor-neosid.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/inductor-nkl.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/inductors.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/infineon-tricore.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/infineon.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/intersil.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/ir.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/isd.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/jump-0r-smd.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/jumper.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/l63xx.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/lantronix.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/lattice.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/lc-filter.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/led-7-segment.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/led-citizen-electronics.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/led-lumiled.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/led.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/lem.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/linear-technology.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/linear.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/linx.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/logo.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/lprs.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/lsi-computer-systems.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/lumiled.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/marks.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/maxim.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/maxstream.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/melexis.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/memory-hitachi.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/memory-idt.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/memory-micron.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/memory-motorola-dram.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/memory-nec.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/memory-samsung.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/memory-sram.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/memory.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/mems.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micrel.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-cyrod.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-fujitsu.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-harris.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-hitachi.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-infineon.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-intel.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-mc68000.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-motorola.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-philips.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-renesas.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-samsung.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micro-siemens.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/microchip.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micron.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/micronas.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/microphon.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/microwave.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/midori-sensor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/minicircuits.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/mitsubishi-semiconductor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/motor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/motorola-sensor-driver.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/murata-filter.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/murata-sensor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/nanotec.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/national-instruments.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/national-semiconductor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/nec-lqfp100-pack.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/nec.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/nrj-semiconductor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/omnivision.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/on-semiconductor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/opto-honeywell-3000.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/opto-honeywell-4000.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/opto-honeywell.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/opto-micro-linear.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/opto-trans-siemens.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/opto-transmittter-hp.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/opto-vishay.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/optocoupler.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/pal.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/panel_moje.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/philips-semiconductors.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/photo-elements.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/piher.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/pinhead.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/plcc-socket.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/pld-intel.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/plxtech.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/pot-vitrohm.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/pot-xicor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/pot.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/ptc-ntc.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/quantum-research-group.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/rcl.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/recom-international.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/rectifier.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/ref-packages-longpad.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/ref-packages.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/relay.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/renesas.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/resistor-bourns.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/resistor-dil.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/resistor-net.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/resistor-power.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/resistor-ruf.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/resistor-shunt.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/resistor-sil.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/resistor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/rf-micro-devices.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/rf-solutions.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/rohm.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/semicon-smd-ipc.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/sensor-comus-group.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/sensor-heraeus.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/sensor-infratec.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/sharp.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/silabs.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/sim-technology.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/sipex.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/smd-ipc.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/smd-special.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/solomon-systech.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/solpad.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/special-drill.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/special.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/st-microelectronics.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/supertex.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/supply1.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/supply2.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/switch-alps.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/switch-coto.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/switch-dil.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/switch-misc.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/switch-omron.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/switch-raychem.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/switch.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/telcom.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/telecontrolli.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/telefunken.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/testpad.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/texas.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/toshiba.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/traco-electronic.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/trafo-bei.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/trafo-siemens.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/trafo-xicon.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/trafo.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/transformator_ja.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/transistor-fet.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/transistor-neu-to92.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/transistor-npn.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/transistor-pnp.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/transistor-power.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/transistor-small-signal.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/transistor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/triac.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/tripas.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/u-blox.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/uln-udn.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/v-reg-micrel.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/v-reg.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/varistor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/wafer-scale-psd.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/wirepad.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/wuerth-elektronik.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/xicor.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/xilinx-virtex-v5.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/xilinx-xc18v.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/xilinx-xc9.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/xilinx-xcv.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/zetex.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/zilog.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-elektromechanische-antriebe.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-elektro-zeichnungsrahmen.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-halbleiter.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/eib-busch-jaeger.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-klemmen.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-kondensatoren.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-lampen-signalisation.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-messfuehler.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-messinstrumente.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-motoren.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-motorschutzschalter.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-schalter.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-schuetze-relais.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-sicherungen.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-sps.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-spulen-transformatoren.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-steckverbinder.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-stromversorgungselemente.lbr" |
UsedLibrary="C:/Program Files (x86)/EAGLE-5.11.0/lbr/elektro/e-symbole.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje_cidla.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje_diody.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje_hrebinky.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje_io.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje_R.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje_C.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje_tlacitka.lbr" |
UsedLibrary="D:/Honza/MLAB_E/libraries/jacho/moje_pot.lbr" |
[Win_1] |
Type="Control Panel" |
Loc="610 129 1209 528" |
State=1 |
Number=0 |
[Desktop] |
Screen="1366 768" |
Window="Win_1" |
/Modules/Sensors/MAG01A/PrjInfo.txt |
---|
0,0 → 1,15 |
[InfoShortDescription.cs] |
Tříosý digitální magnetometr |
[InfoShortDescription.en] |
Tri axis digital magnetometer |
[InfoLongDescription.en] |
Precision I2C magnetometer for compass and navigation applications in robotics. |
[InfoLongDescription.cs] |
Modul magnetometru s integrovaným obvodem čidla HMC5883L a I2C rozhraním. Je v hodný pro navigaci robotů. |
[InfoBuyUST] |
http://www.ust.cz/shop/product_info.php?cPath=22_28&products_id=186 |
[End] |
/Modules/Sensors/MAG01A/CAM_PROFI/BOARD.gpi |
---|
0,0 → 1,39 |
Generated by EAGLE CAM Processor 6.1.0 |
Photoplotter Info File: D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/BOARD.gpi |
Date : 3.10.2012 12:59:57 |
Plotfile : D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/BOARD.PHO |
Apertures : generated: |
Device : Gerber RS-274-X photoplotter, coordinate format 2.4 inch |
Parameter settings: |
Emulate Apertures : no |
Tolerance Draw + : 0.00 % |
Tolerance Draw - : 0.00 % |
Tolerance Flash + : 0.00 % |
Tolerance Flash - : 0.00 % |
Rotate : no |
Mirror : no |
Optimize : no |
Auto fit : yes |
OffsetX : 0inch |
OffsetY : 0inch |
Plotfile Info: |
Coordinate Format : 2.4 |
Coordinate Units : Inch |
Data Mode : Absolute |
Zero Suppression : None |
End Of Block : * |
Apertures used: |
Code Shape Size used |
D10 draw 0.0000inch 7 |
D11 draw 0.0051inch 51 |
D12 draw 0.0110inch 101 |
/Modules/Sensors/MAG01A/CAM_PROFI/DRILL.dri |
---|
0,0 → 1,38 |
Generated by EAGLE CAM Processor 6.1.0 |
Drill Station Info File: D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/DRILL.dri |
Date : 3.10.2012 12:59:57 |
Drills : generated |
Device : Excellon drill station |
Parameter settings: |
Tolerance Drill + : 0.00 % |
Tolerance Drill - : 0.00 % |
Rotate : no |
Mirror : no |
Optimize : yes |
Auto fit : yes |
OffsetX : 0inch |
OffsetY : 0inch |
Layers : Drills Holes |
Drill File Info: |
Data Mode : Absolute |
Units : 1/10000 Inch |
Drills used: |
Code Size used |
T01 0.0350inch 9 |
T02 0.0360inch 1 |
T03 0.1260inch 4 |
Total number of drills: 14 |
Plotfiles: |
D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/DRILL |
/Modules/Sensors/MAG01A/CAM_PROFI/M2.gpi |
---|
0,0 → 1,43 |
Generated by EAGLE CAM Processor 6.1.0 |
Photoplotter Info File: D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/M2.gpi |
Date : 3.10.2012 12:59:57 |
Plotfile : D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/M2.PHO |
Apertures : generated: |
Device : Gerber RS-274-X photoplotter, coordinate format 2.4 inch |
Parameter settings: |
Emulate Apertures : no |
Tolerance Draw + : 0.00 % |
Tolerance Draw - : 0.00 % |
Tolerance Flash + : 0.00 % |
Tolerance Flash - : 0.00 % |
Rotate : no |
Mirror : no |
Optimize : yes |
Auto fit : yes |
OffsetX : 0inch |
OffsetY : 0inch |
Plotfile Info: |
Coordinate Format : 2.4 |
Coordinate Units : Inch |
Data Mode : Absolute |
Zero Suppression : None |
End Of Block : * |
Apertures used: |
Code Shape Size used |
D10 rectangle 0.0190inch x 0.0336inch 8 |
D11 rectangle 0.0336inch x 0.0190inch 8 |
D12 rectangle 0.0592inch x 0.0671inch 8 |
D13 rectangle 0.0671inch x 0.0592inch 2 |
D14 square 0.0730inch 10 |
D15 round 0.2620inch 4 |
D16 rectangle 0.0790inch x 0.0710inch 2 |
/Modules/Sensors/MAG01A/CAM_PROFI/T1.PHO |
---|
0,0 → 1,565 |
G75* |
G70* |
%OFA0B0*% |
%FSLAX24Y24*% |
%IPPOS*% |
%LPD*% |
%AMOC8* |
5,1,8,0,0,1.08239X$1,22.5* |
% |
%ADD10C,0.0000*% |
%ADD11C,0.0051*% |
%ADD12C,0.0110*% |
%ADD13C,0.0040*% |
%ADD14C,0.0039*% |
%ADD15C,0.0060*% |
%ADD16R,0.0200X0.0200*% |
%ADD17C,0.0050*% |
D10* |
X004929Y003708D02* |
X012851Y003708D01* |
X012851Y012220D01* |
X012851Y015630D01* |
X004929Y015630D01* |
X004929Y012220D01* |
X004929Y003708D01* |
X004929Y012220D02* |
X012851Y012220D01* |
D11* |
X017741Y007377D02* |
X023953Y007377D01* |
X023953Y019298D02* |
X017741Y019298D01* |
X023166Y019298D02* |
X023166Y007377D01* |
X023040Y008401D01* |
X023292Y008401D01* |
X023166Y007377D01* |
X023115Y008401D01* |
X023217Y008401D02* |
X023166Y007377D01* |
X023064Y008401D01* |
X023268Y008401D02* |
X023166Y007377D01* |
X023166Y019298D02* |
X023040Y018275D01* |
X023292Y018275D01* |
X023166Y019298D01* |
X023115Y018275D01* |
X023217Y018275D02* |
X023166Y019298D01* |
X023064Y018275D01* |
X023268Y018275D02* |
X023166Y019298D01* |
X009819Y007377D02* |
X009819Y003794D01* |
X017741Y003794D02* |
X017741Y007377D01* |
X017741Y004582D02* |
X009819Y004582D01* |
X010843Y004708D01* |
X010843Y004456D01* |
X009819Y004582D01* |
X010843Y004633D01* |
X010843Y004531D02* |
X009819Y004582D01* |
X010843Y004684D01* |
X010843Y004480D02* |
X009819Y004582D01* |
X017741Y004582D02* |
X016717Y004708D01* |
X016717Y004456D01* |
X017741Y004582D01* |
X016717Y004633D01* |
X016717Y004531D02* |
X017741Y004582D01* |
X016717Y004684D01* |
X016717Y004480D02* |
X017741Y004582D01* |
X009819Y015889D02* |
X006434Y015889D01* |
X006434Y007377D02* |
X009819Y007377D01* |
X007221Y007377D02* |
X007221Y015889D01* |
X007095Y014865D01* |
X007347Y014865D01* |
X007221Y015889D01* |
X007170Y014865D01* |
X007272Y014865D02* |
X007221Y015889D01* |
X007119Y014865D01* |
X007323Y014865D02* |
X007221Y015889D01* |
X007221Y007377D02* |
X007095Y008401D01* |
X007347Y008401D01* |
X007221Y007377D01* |
X007170Y008401D01* |
X007272Y008401D02* |
X007221Y007377D01* |
X007119Y008401D01* |
X007323Y008401D02* |
X007221Y007377D01* |
D12* |
X021660Y010926D02* |
X021448Y011137D01* |
X021448Y011560D01* |
X021660Y011772D01* |
X021871Y011772D01* |
X022083Y011560D01* |
X022083Y011349D01* |
X022083Y011560D02* |
X022294Y011772D01* |
X022506Y011772D01* |
X022717Y011560D01* |
X022717Y011137D01* |
X022506Y010926D01* |
X022506Y012195D02* |
X021660Y012195D01* |
X021448Y012406D01* |
X021448Y012829D01* |
X021660Y013041D01* |
X022506Y013041D01* |
X022717Y012829D01* |
X022717Y012406D01* |
X022506Y012195D01* |
X021660Y013041D01* |
X022717Y013463D02* |
X022506Y013463D01* |
X022506Y013675D01* |
X022717Y013675D01* |
X022717Y013463D01* |
X022717Y014944D02* |
X022717Y014098D01* |
X021871Y014944D01* |
X021660Y014944D01* |
X021448Y014732D01* |
X021448Y014309D01* |
X021660Y014098D01* |
X021660Y015367D02* |
X021448Y015578D01* |
X021448Y016001D01* |
X021660Y016213D01* |
X021871Y016213D01* |
X022083Y016001D01* |
X022294Y016213D01* |
X022506Y016213D01* |
X022717Y016001D01* |
X022717Y015578D01* |
X022506Y015367D01* |
X022294Y015367D01* |
X022083Y015578D01* |
X021871Y015367D01* |
X021660Y015367D01* |
X022083Y015578D02* |
X022083Y016001D01* |
X012214Y005031D02* |
X011368Y005031D01* |
X012214Y005877D01* |
X012214Y006088D01* |
X012003Y006300D01* |
X011580Y006300D01* |
X011368Y006088D01* |
X012637Y005242D02* |
X012637Y006088D01* |
X012848Y006300D01* |
X013271Y006300D01* |
X013483Y006088D01* |
X013483Y005242D01* |
X013271Y005031D01* |
X012848Y005031D01* |
X012637Y005242D01* |
X013483Y006088D01* |
X013906Y005031D02* |
X013906Y005242D01* |
X014117Y005242D01* |
X014117Y005031D01* |
X013906Y005031D01* |
X014540Y005877D02* |
X014963Y006300D01* |
X014963Y005031D01* |
X014540Y005031D02* |
X015386Y005031D01* |
X016655Y005031D02* |
X015809Y005031D01* |
X016655Y005877D01* |
X016655Y006088D01* |
X016443Y006300D01* |
X016020Y006300D01* |
X015809Y006088D01* |
X006772Y010067D02* |
X006772Y009221D01* |
X005926Y010067D01* |
X005715Y010067D01* |
X005503Y009856D01* |
X005503Y009433D01* |
X005715Y009221D01* |
X005926Y010490D02* |
X005503Y010913D01* |
X006772Y010913D01* |
X006772Y010490D02* |
X006772Y011336D01* |
X006772Y011759D02* |
X006561Y011759D01* |
X006561Y011970D01* |
X006772Y011970D01* |
X006772Y011759D01* |
X005503Y013239D02* |
X005715Y012816D01* |
X006138Y012393D01* |
X006561Y012393D01* |
X006772Y012605D01* |
X006772Y013028D01* |
X006561Y013239D01* |
X006349Y013239D01* |
X006138Y013028D01* |
X006138Y012393D01* |
X006772Y014508D02* |
X006772Y013662D01* |
X005926Y014508D01* |
X005715Y014508D01* |
X005503Y014296D01* |
X005503Y013873D01* |
X005715Y013662D01* |
D13* |
X005650Y008035D02* |
X005129Y008035D01* |
X005303Y008209D01* |
X005129Y008382D01* |
X005650Y008382D01* |
X005650Y008551D02* |
X005303Y008551D01* |
X005129Y008724D01* |
X005303Y008898D01* |
X005650Y008898D01* |
X005389Y008898D02* |
X005389Y008551D01* |
X005216Y009414D02* |
X005129Y009327D01* |
X005129Y009153D01* |
X005216Y009067D01* |
X005563Y009067D01* |
X005650Y009153D01* |
X005650Y009327D01* |
X005563Y009414D01* |
X005389Y009414D01* |
X005389Y009240D01* |
X005563Y009582D02* |
X005216Y009582D01* |
X005129Y009669D01* |
X005129Y009842D01* |
X005216Y009929D01* |
X005563Y009929D01* |
X005650Y009842D01* |
X005650Y009669D01* |
X005563Y009582D01* |
X005216Y009929D01* |
X005303Y010098D02* |
X005129Y010271D01* |
X005650Y010271D01* |
X005650Y010098D02* |
X005650Y010445D01* |
X005650Y010614D02* |
X005303Y010614D01* |
X005129Y010787D01* |
X005303Y010961D01* |
X005650Y010961D01* |
X005389Y010961D02* |
X005389Y010614D01* |
X010454Y007330D02* |
X010454Y007850D01* |
X010627Y007677D01* |
X010801Y007850D01* |
X010801Y007330D01* |
X010969Y007850D02* |
X010969Y007330D01* |
X011316Y007330D01* |
X011485Y007330D02* |
X011485Y007677D01* |
X011659Y007850D01* |
X011832Y007677D01* |
X011832Y007330D01* |
X011832Y007590D02* |
X011485Y007590D01* |
X012001Y007330D02* |
X012001Y007850D01* |
X012261Y007850D01* |
X012348Y007763D01* |
X012348Y007677D01* |
X012261Y007590D01* |
X012348Y007503D01* |
X012348Y007416D01* |
X012261Y007330D01* |
X012001Y007330D01* |
X012001Y007590D02* |
X012261Y007590D01* |
X008682Y011760D02* |
X008595Y011847D01* |
X008422Y011847D01* |
X008335Y011760D01* |
X008335Y011413D01* |
X008422Y011327D01* |
X008595Y011327D01* |
X008682Y011413D01* |
X008682Y011587D01* |
X008509Y011587D01* |
X008851Y011327D02* |
X008851Y011847D01* |
X009198Y011327D01* |
X009198Y011847D01* |
X009367Y011847D02* |
X009367Y011327D01* |
X009627Y011327D01* |
X009713Y011413D01* |
X009713Y011760D01* |
X009627Y011847D01* |
X009367Y011847D01* |
X008682Y007760D02* |
X008595Y007847D01* |
X008422Y007847D01* |
X008335Y007760D01* |
X008335Y007413D01* |
X008422Y007327D01* |
X008595Y007327D01* |
X008682Y007413D01* |
X008682Y007587D01* |
X008509Y007587D01* |
X008851Y007327D02* |
X008851Y007847D01* |
X009198Y007327D01* |
X009198Y007847D01* |
X009367Y007847D02* |
X009367Y007327D01* |
X009627Y007327D01* |
X009713Y007413D01* |
X009713Y007760D01* |
X009627Y007847D01* |
X009367Y007847D01* |
X008335Y009847D02* |
X008335Y009500D01* |
X008509Y009327D01* |
X008682Y009500D01* |
X008682Y009847D01* |
X008851Y009847D02* |
X008851Y009327D01* |
X009111Y009327D01* |
X009198Y009413D01* |
X009198Y009760D01* |
X009111Y009847D01* |
X008851Y009847D01* |
X009367Y009847D02* |
X009367Y009327D01* |
X009627Y009327D01* |
X009713Y009413D01* |
X009713Y009760D01* |
X009627Y009847D01* |
X009367Y009847D01* |
X008682Y010760D02* |
X008595Y010847D01* |
X008422Y010847D01* |
X008335Y010760D01* |
X008335Y010674D01* |
X008422Y010587D01* |
X008595Y010587D01* |
X008682Y010500D01* |
X008682Y010413D01* |
X008595Y010327D01* |
X008422Y010327D01* |
X008335Y010413D01* |
X009198Y010760D02* |
X009111Y010847D01* |
X008938Y010847D01* |
X008851Y010760D01* |
X008851Y010413D01* |
X008938Y010327D01* |
X009111Y010327D01* |
X009198Y010413D01* |
X009367Y010847D02* |
X009367Y010327D01* |
X009713Y010327D01* |
X008682Y008760D02* |
X008595Y008847D01* |
X008422Y008847D01* |
X008335Y008760D01* |
X008335Y008674D01* |
X008422Y008587D01* |
X008595Y008587D01* |
X008682Y008500D01* |
X008682Y008413D01* |
X008595Y008327D01* |
X008422Y008327D01* |
X008335Y008413D01* |
X008851Y008847D02* |
X008851Y008327D01* |
X009111Y008327D01* |
X009198Y008413D01* |
X009198Y008760D01* |
X009111Y008847D01* |
X008851Y008847D01* |
X009367Y008327D02* |
X009367Y008674D01* |
X009540Y008847D01* |
X009713Y008674D01* |
X009713Y008327D01* |
X009713Y008587D02* |
X009367Y008587D01* |
X007721Y004108D02* |
X007798Y004031D01* |
X007875Y004031D01* |
X007951Y004108D01* |
X007951Y004492D01* |
X007875Y004492D02* |
X008028Y004492D01* |
X008181Y004031D02* |
X008181Y004338D01* |
X008335Y004492D01* |
X008488Y004338D01* |
X008488Y004031D01* |
X008488Y004262D02* |
X008181Y004262D01* |
X008949Y004415D02* |
X008872Y004492D01* |
X008719Y004492D01* |
X008642Y004415D01* |
X008642Y004108D01* |
X008719Y004031D01* |
X008872Y004031D01* |
X008949Y004108D01* |
X009102Y004031D02* |
X009102Y004492D01* |
X009102Y004262D02* |
X009409Y004262D01* |
X009409Y004492D02* |
X009409Y004031D01* |
X009793Y004492D02* |
X009639Y004492D01* |
X009563Y004415D01* |
X009563Y004108D01* |
X009639Y004031D01* |
X009793Y004031D01* |
X009870Y004108D01* |
X009870Y004415D01* |
X009793Y004492D01* |
X010119Y009847D02* |
X010466Y009847D01* |
X010292Y010020D02* |
X010292Y009673D01* |
X010634Y010107D02* |
X010981Y009587D01* |
X010634Y009587D02* |
X010981Y010107D01* |
X011445Y011382D02* |
X011792Y011382D01* |
X011619Y011209D02* |
X011619Y011556D01* |
X011961Y011642D02* |
X011961Y011556D01* |
X012135Y011382D01* |
X012308Y011556D01* |
X012308Y011642D01* |
X012135Y011382D02* |
X012135Y011122D01* |
X011898Y010115D02* |
X012245Y010115D01* |
X012245Y010028D01* |
X011898Y009681D01* |
X011898Y009594D01* |
X012245Y009594D01* |
X012414Y009855D02* |
X012761Y009855D01* |
D14* |
X011681Y009870D02* |
X011091Y009870D01* |
X011288Y010067D01* |
X011091Y009870D02* |
X011288Y009673D01* |
X012134Y010350D02* |
X012134Y010941D01* |
X012331Y010744D01* |
X012134Y010941D02* |
X011937Y010744D01* |
D15* |
X007890Y011820D02* |
X007890Y011320D01* |
X007640Y011070D01* |
X007890Y010820D01* |
X007890Y010320D01* |
X007640Y010070D01* |
X007890Y011820D02* |
X007640Y012070D01* |
X007640Y010070D02* |
X007890Y009820D01* |
X007890Y009320D01* |
X007640Y009070D01* |
X007890Y008820D02* |
X007890Y008320D01* |
X007640Y008070D01* |
X007890Y007820D01* |
X007890Y007320D01* |
X007890Y008820D02* |
X007640Y009070D01* |
X006140Y011070D02* |
X005890Y011320D01* |
X006140Y010070D02* |
X005890Y010320D01* |
X005890Y010820D01* |
X006140Y011070D01* |
X007640Y012070D02* |
X006140Y012070D01* |
X005890Y011820D01* |
X005890Y011320D01* |
X006140Y009070D02* |
X005890Y009320D01* |
X005890Y009820D01* |
X006140Y010070D01* |
X005890Y008320D02* |
X006140Y008070D01* |
X005890Y007320D02* |
X005890Y007820D01* |
X006140Y008070D01* |
X006140Y009070D02* |
X005890Y008820D01* |
X005890Y008320D01* |
X006140Y007070D02* |
X007640Y007070D01* |
X007890Y007320D01* |
X006140Y007070D02* |
X005890Y007320D01* |
D16* |
X006390Y010570D03* |
X006390Y011570D03* |
X006390Y009570D03* |
X006390Y007570D03* |
X006390Y008570D03* |
X007390Y011570D03* |
X007390Y010570D03* |
X007390Y009570D03* |
X007390Y008570D03* |
X007390Y007570D03* |
D17* |
X005840Y012070D02* |
X005842Y012083D01* |
X005847Y012096D01* |
X005856Y012107D01* |
X005867Y012114D01* |
X005880Y012119D01* |
X005893Y012120D01* |
X005907Y012117D01* |
X005919Y012111D01* |
X005929Y012102D01* |
X005936Y012090D01* |
X005940Y012077D01* |
X005940Y012063D01* |
X005936Y012050D01* |
X005929Y012038D01* |
X005919Y012029D01* |
X005907Y012023D01* |
X005893Y012020D01* |
X005880Y012021D01* |
X005867Y012026D01* |
X005856Y012033D01* |
X005847Y012044D01* |
X005842Y012057D01* |
X005840Y012070D01* |
M02* |
/Modules/Sensors/MAG01A/CAM_PROFI/T1.gpi |
---|
0,0 → 1,44 |
Generated by EAGLE CAM Processor 6.1.0 |
Photoplotter Info File: D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/T1.gpi |
Date : 3.10.2012 12:59:57 |
Plotfile : D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/T1.PHO |
Apertures : generated: |
Device : Gerber RS-274-X photoplotter, coordinate format 2.4 inch |
Parameter settings: |
Emulate Apertures : no |
Tolerance Draw + : 0.00 % |
Tolerance Draw - : 0.00 % |
Tolerance Flash + : 0.00 % |
Tolerance Flash - : 0.00 % |
Rotate : no |
Mirror : no |
Optimize : no |
Auto fit : yes |
OffsetX : 0inch |
OffsetY : 0inch |
Plotfile Info: |
Coordinate Format : 2.4 |
Coordinate Units : Inch |
Data Mode : Absolute |
Zero Suppression : None |
End Of Block : * |
Apertures used: |
Code Shape Size used |
D10 draw 0.0000inch 7 |
D11 draw 0.0051inch 51 |
D12 draw 0.0110inch 101 |
D13 draw 0.0040inch 195 |
D14 draw 0.0039inch 6 |
D15 draw 0.0060inch 32 |
D16 square 0.0200inch 10 |
D17 draw 0.0050inch 1 |
/Modules/Sensors/MAG01A/CAM_PROFI/V2.gpi |
---|
0,0 → 1,48 |
Generated by EAGLE CAM Processor 6.1.0 |
Photoplotter Info File: D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/V2.gpi |
Date : 3.10.2012 12:59:57 |
Plotfile : D:/Honza/MLAB/Modules/Sensors/MAG01A/CAM_PROFI/V2.PHO |
Apertures : generated: |
Device : Gerber RS-274-X photoplotter, coordinate format 2.4 inch |
Parameter settings: |
Emulate Apertures : no |
Tolerance Draw + : 0.00 % |
Tolerance Draw - : 0.00 % |
Tolerance Flash + : 0.00 % |
Tolerance Flash - : 0.00 % |
Rotate : no |
Mirror : no |
Optimize : yes |
Auto fit : yes |
OffsetX : 0inch |
OffsetY : 0inch |
Plotfile Info: |
Coordinate Format : 2.4 |
Coordinate Units : Inch |
Data Mode : Absolute |
Zero Suppression : None |
End Of Block : * |
Apertures used: |
Code Shape Size used |
D10 draw 0.0039inch 2 |
D11 draw 0.0040inch 21 |
D12 rectangle 0.0110inch x 0.0256inch 8 |
D13 rectangle 0.0256inch x 0.0110inch 8 |
D14 rectangle 0.0512inch x 0.0591inch 8 |
D15 rectangle 0.0591inch x 0.0512inch 2 |
D16 square 0.0650inch 10 |
D17 round 0.2540inch 4 |
D18 rectangle 0.0710inch x 0.0630inch 2 |
D19 draw 0.0100inch 711 |
D20 draw 0.0120inch 7 |
D21 draw 0.0160inch 13 |
/Modules/Sensors/MAG01A/CAM_PROFI/V2.PHO |
---|
0,0 → 1,1191 |
G75* |
G70* |
%OFA0B0*% |
%FSLAX24Y24*% |
%IPPOS*% |
%LPD*% |
%AMOC8* |
5,1,8,0,0,1.08239X$1,22.5* |
% |
%ADD10C,0.0039*% |
%ADD11C,0.0040*% |
%ADD12R,0.0110X0.0256*% |
%ADD13R,0.0256X0.0110*% |
%ADD14R,0.0512X0.0591*% |
%ADD15R,0.0591X0.0512*% |
%ADD16R,0.0650X0.0650*% |
%ADD17C,0.2540*% |
%ADD18R,0.0710X0.0630*% |
%ADD19C,0.0100*% |
%ADD20C,0.0120*% |
%ADD21C,0.0160*% |
D10* |
X011067Y009504D02* |
X011068Y009507D01* |
X011071Y009508D01* |
X011074Y009507D01* |
X011075Y009504D01* |
X011074Y009501D01* |
X011071Y009500D01* |
X011068Y009501D01* |
X011067Y009504D01* |
X010587Y010519D02* |
X010588Y010522D01* |
X010591Y010523D01* |
X010594Y010522D01* |
X010595Y010519D01* |
X010594Y010516D01* |
X010591Y010515D01* |
X010588Y010516D01* |
X010587Y010519D01* |
D11* |
X012091Y010500D02* |
X012552Y010500D01* |
X012398Y010346D01* |
X012552Y010193D01* |
X012091Y010193D01* |
X012091Y010653D02* |
X012091Y010960D01* |
X012091Y011114D02* |
X012398Y011114D01* |
X012552Y011267D01* |
X012398Y011421D01* |
X012091Y011421D01* |
X012091Y011574D02* |
X012091Y011804D01* |
X012168Y011881D01* |
X012245Y011881D01* |
X012321Y011804D01* |
X012321Y011574D01* |
X012321Y011421D02* |
X012321Y011114D01* |
X012091Y011574D02* |
X012552Y011574D01* |
X012552Y011804D01* |
X012475Y011881D01* |
X012398Y011881D01* |
X012321Y011804D01* |
X012552Y010653D02* |
X012091Y010653D01* |
D12* |
X010792Y010602D03* |
X010595Y010602D03* |
X010398Y010602D03* |
X010201Y010602D03* |
X010201Y009523D03* |
X010398Y009523D03* |
X010595Y009523D03* |
X010792Y009523D03* |
D13* |
X011036Y009767D03* |
X011036Y009964D03* |
X011036Y010161D03* |
X011036Y010358D03* |
X009957Y010358D03* |
X009957Y010161D03* |
X009957Y009964D03* |
X009957Y009767D03* |
D14* |
X009296Y009441D03* |
X008548Y009441D03* |
X008548Y010137D03* |
X009296Y010137D03* |
X009319Y011236D03* |
X010067Y011236D03* |
X010221Y008563D03* |
X010969Y008563D03* |
D15* |
X008587Y008665D03* |
X008587Y007917D03* |
D16* |
X007390Y007570D03* |
X006390Y007570D03* |
X006390Y008570D03* |
X007390Y008570D03* |
X007390Y009570D03* |
X006390Y009570D03* |
X006390Y010570D03* |
X007390Y010570D03* |
X007390Y011570D03* |
X006390Y011570D03* |
D17* |
X006890Y013669D03* |
X010890Y013669D03* |
X010890Y005669D03* |
X006890Y005669D03* |
D18* |
X009516Y007046D03* |
X009516Y008166D03* |
D19* |
X005379Y011770D02* |
X005379Y004158D01* |
X012401Y004158D01* |
X012401Y009876D01* |
X011896Y009876D01* |
X011879Y009878D01* |
X011863Y009883D01* |
X011847Y009889D01* |
X011832Y009898D01* |
X011819Y009908D01* |
X011807Y009920D01* |
X011796Y009934D01* |
X011788Y009949D01* |
X011781Y009964D01* |
X011777Y009981D01* |
X011774Y009998D01* |
X011774Y011770D01* |
X010921Y011770D01* |
X010972Y011720D01* |
X010972Y010789D01* |
X010977Y010784D01* |
X010977Y010543D01* |
X011217Y010543D01* |
X011223Y010538D01* |
X011366Y010538D01* |
X011657Y010247D01* |
X011657Y010247D01* |
X011763Y010141D01* |
X011763Y007925D01* |
X011074Y007236D01* |
X010969Y007131D01* |
X010001Y007131D01* |
X010001Y006760D01* |
X010030Y006789D01* |
X010350Y006973D01* |
X010706Y007069D01* |
X011074Y007069D01* |
X011430Y006973D01* |
X011750Y006789D01* |
X012010Y006529D01* |
X012195Y006209D01* |
X012290Y005853D01* |
X012290Y005485D01* |
X012195Y005129D01* |
X012010Y004809D01* |
X011750Y004549D01* |
X011430Y004364D01* |
X011074Y004269D01* |
X010706Y004269D01* |
X010350Y004364D01* |
X010030Y004549D01* |
X009770Y004809D01* |
X009585Y005129D01* |
X009490Y005485D01* |
X009490Y005853D01* |
X009585Y006209D01* |
X009770Y006529D01* |
X009842Y006601D01* |
X009107Y006601D01* |
X009031Y006677D01* |
X009031Y007327D01* |
X008922Y007327D01* |
X008718Y007531D01* |
X008238Y007531D01* |
X008162Y007607D01* |
X008162Y007737D01* |
X007969Y007737D01* |
X007865Y007841D01* |
X007865Y007608D01* |
X007428Y007608D01* |
X007428Y007533D01* |
X007865Y007533D01* |
X007865Y007226D01* |
X007855Y007188D01* |
X007835Y007153D01* |
X007807Y007125D01* |
X007773Y007106D01* |
X007735Y007095D01* |
X007428Y007095D01* |
X007428Y007533D01* |
X007353Y007533D01* |
X007353Y007095D01* |
X007045Y007095D01* |
X007007Y007106D01* |
X006973Y007125D01* |
X006945Y007153D01* |
X006925Y007188D01* |
X006915Y007226D01* |
X006915Y007533D01* |
X007353Y007533D01* |
X007353Y007608D01* |
X007353Y008045D01* |
X007045Y008045D01* |
X007007Y008035D01* |
X006973Y008016D01* |
X006945Y007988D01* |
X006925Y007953D01* |
X006915Y007915D01* |
X006915Y007608D01* |
X007353Y007608D01* |
X007428Y007608D01* |
X007428Y008045D01* |
X007660Y008045D01* |
X007590Y008115D01* |
X007011Y008115D01* |
X006935Y008192D01* |
X006935Y008390D01* |
X006845Y008390D01* |
X006845Y008192D01* |
X006769Y008115D01* |
X006011Y008115D01* |
X005935Y008192D01* |
X005935Y008949D01* |
X005942Y008957D01* |
X005891Y009008D01* |
X005800Y009099D01* |
X005694Y009205D01* |
X005694Y010141D01* |
X005935Y010382D01* |
X005935Y010949D01* |
X006011Y011025D01* |
X006769Y011025D01* |
X006845Y010949D01* |
X006845Y010739D01* |
X006935Y010739D01* |
X006935Y010949D01* |
X007011Y011025D01* |
X007769Y011025D01* |
X007845Y010949D01* |
X007845Y010192D01* |
X007769Y010115D01* |
X007011Y010115D01* |
X006935Y010192D01* |
X006935Y010379D01* |
X006845Y010379D01* |
X006845Y010192D01* |
X006769Y010115D01* |
X006178Y010115D01* |
X006088Y010025D01* |
X006769Y010025D01* |
X006845Y009949D01* |
X006845Y009780D01* |
X006935Y009780D01* |
X006935Y009949D01* |
X007011Y010025D01* |
X007769Y010025D01* |
X007845Y009949D01* |
X007845Y009672D01* |
X007856Y009661D01* |
X008142Y009376D01* |
X008142Y009391D01* |
X008498Y009391D01* |
X008498Y009491D01* |
X008142Y009491D01* |
X008142Y009756D01* |
X008152Y009794D01* |
X008162Y009811D01* |
X008162Y010487D01* |
X008238Y010563D01* |
X008450Y010563D01* |
X008450Y011716D01* |
X008504Y011770D01* |
X007865Y011770D01* |
X007865Y011608D01* |
X007428Y011608D01* |
X007428Y011533D01* |
X007865Y011533D01* |
X007865Y011226D01* |
X007855Y011188D01* |
X007835Y011153D01* |
X007807Y011125D01* |
X007773Y011106D01* |
X007735Y011095D01* |
X007428Y011095D01* |
X007428Y011533D01* |
X007353Y011533D01* |
X007353Y011095D01* |
X007045Y011095D01* |
X007007Y011106D01* |
X006973Y011125D01* |
X006945Y011153D01* |
X006925Y011188D01* |
X006915Y011226D01* |
X006915Y011533D01* |
X007353Y011533D01* |
X007353Y011608D01* |
X006915Y011608D01* |
X006915Y011770D01* |
X006865Y011770D01* |
X006865Y011610D01* |
X006430Y011610D01* |
X006430Y011530D01* |
X006430Y011095D01* |
X006735Y011095D01* |
X006773Y011106D01* |
X006807Y011125D01* |
X006835Y011153D01* |
X006855Y011188D01* |
X006865Y011226D01* |
X006865Y011530D01* |
X006430Y011530D01* |
X006350Y011530D01* |
X006350Y011095D01* |
X006045Y011095D01* |
X006007Y011106D01* |
X005973Y011125D01* |
X005945Y011153D01* |
X005925Y011188D01* |
X005915Y011226D01* |
X005915Y011530D01* |
X006350Y011530D01* |
X006350Y011610D01* |
X005915Y011610D01* |
X005915Y011770D01* |
X005379Y011770D01* |
X005379Y011746D02* |
X005915Y011746D01* |
X005915Y011647D02* |
X005379Y011647D01* |
X005379Y011549D02* |
X006350Y011549D01* |
X006430Y011549D02* |
X007353Y011549D01* |
X007428Y011549D02* |
X008450Y011549D01* |
X008450Y011647D02* |
X007865Y011647D01* |
X007865Y011746D02* |
X008480Y011746D01* |
X008630Y011641D02* |
X008630Y009925D01* |
X008548Y010137D01* |
X008162Y010170D02* |
X007823Y010170D01* |
X007845Y010268D02* |
X008162Y010268D01* |
X008162Y010367D02* |
X007845Y010367D01* |
X007845Y010465D02* |
X008162Y010465D01* |
X008450Y010564D02* |
X007845Y010564D01* |
X007845Y010662D02* |
X008450Y010662D01* |
X008450Y010761D02* |
X007845Y010761D01* |
X007845Y010859D02* |
X008450Y010859D01* |
X008450Y010958D02* |
X007836Y010958D01* |
X007836Y011155D02* |
X008450Y011155D01* |
X008450Y011253D02* |
X007865Y011253D01* |
X007865Y011352D02* |
X008450Y011352D01* |
X008450Y011450D02* |
X007865Y011450D01* |
X007428Y011450D02* |
X007353Y011450D01* |
X007353Y011352D02* |
X007428Y011352D01* |
X007428Y011253D02* |
X007353Y011253D01* |
X007353Y011155D02* |
X007428Y011155D01* |
X006944Y011155D02* |
X006836Y011155D01* |
X006865Y011253D02* |
X006915Y011253D01* |
X006915Y011352D02* |
X006865Y011352D01* |
X006865Y011450D02* |
X006915Y011450D01* |
X006915Y011647D02* |
X006865Y011647D01* |
X006865Y011746D02* |
X006915Y011746D01* |
X006430Y011450D02* |
X006350Y011450D01* |
X006350Y011352D02* |
X006430Y011352D01* |
X006430Y011253D02* |
X006350Y011253D01* |
X006350Y011155D02* |
X006430Y011155D01* |
X006836Y010958D02* |
X006944Y010958D01* |
X006935Y010859D02* |
X006845Y010859D01* |
X006845Y010761D02* |
X006935Y010761D01* |
X007378Y010559D02* |
X007390Y010570D01* |
X007378Y010559D02* |
X006366Y010559D01* |
X005874Y010067D01* |
X005874Y009279D01* |
X006071Y009082D01* |
X007744Y009082D01* |
X008040Y008787D01* |
X008040Y008492D01* |
X008236Y008295D01* |
X008925Y008295D01* |
X009024Y008196D01* |
X009024Y007775D01* |
X009095Y007704D01* |
X010500Y007704D01* |
X010792Y007996D01* |
X010792Y008563D01* |
X010969Y008563D01* |
X010792Y008563D02* |
X010792Y009523D01* |
X010595Y009523D02* |
X010595Y009078D01* |
X010500Y008984D01* |
X010205Y008984D01* |
X010201Y008988D01* |
X010201Y009523D01* |
X011036Y009767D02* |
X011292Y009767D01* |
X011386Y009673D01* |
X011386Y008098D01* |
X010796Y007507D01* |
X008996Y007507D01* |
X008587Y007917D01* |
X008044Y007917D01* |
X007390Y008570D01* |
X006390Y008570D01* |
X006845Y008298D02* |
X006935Y008298D01* |
X006935Y008200D02* |
X006845Y008200D01* |
X006773Y008035D02* |
X006735Y008045D01* |
X006428Y008045D01* |
X006428Y007608D01* |
X006865Y007608D01* |
X006865Y007915D01* |
X006855Y007953D01* |
X006835Y007988D01* |
X006807Y008016D01* |
X006773Y008035D01* |
X006820Y008003D02* |
X006960Y008003D01* |
X006915Y007904D02* |
X006865Y007904D01* |
X006865Y007806D02* |
X006915Y007806D01* |
X006915Y007707D02* |
X006865Y007707D01* |
X006865Y007609D02* |
X006915Y007609D01* |
X006865Y007533D02* |
X006865Y007226D01* |
X006855Y007188D01* |
X006835Y007153D01* |
X006807Y007125D01* |
X006773Y007106D01* |
X006735Y007095D01* |
X006428Y007095D01* |
X006428Y007533D01* |
X006428Y007608D01* |
X006353Y007608D01* |
X006353Y008045D01* |
X006045Y008045D01* |
X006007Y008035D01* |
X005973Y008016D01* |
X005945Y007988D01* |
X005925Y007953D01* |
X005915Y007915D01* |
X005915Y007608D01* |
X006353Y007608D01* |
X006353Y007533D01* |
X006428Y007533D01* |
X006865Y007533D01* |
X006865Y007510D02* |
X006915Y007510D01* |
X006915Y007412D02* |
X006865Y007412D01* |
X006865Y007313D02* |
X006915Y007313D01* |
X006918Y007215D02* |
X006862Y007215D01* |
X006791Y007116D02* |
X006989Y007116D01* |
X007074Y007069D02* |
X006706Y007069D01* |
X006350Y006973D01* |
X006030Y006789D01* |
X005770Y006529D01* |
X005585Y006209D01* |
X005490Y005853D01* |
X005490Y005485D01* |
X005585Y005129D01* |
X005770Y004809D01* |
X006030Y004549D01* |
X006350Y004364D01* |
X006706Y004269D01* |
X007074Y004269D01* |
X007430Y004364D01* |
X007750Y004549D01* |
X008010Y004809D01* |
X008195Y005129D01* |
X008290Y005485D01* |
X008290Y005853D01* |
X008195Y006209D01* |
X008010Y006529D01* |
X007750Y006789D01* |
X007430Y006973D01* |
X007074Y007069D01* |
X007265Y007018D02* |
X009031Y007018D01* |
X009031Y007116D02* |
X007791Y007116D01* |
X007862Y007215D02* |
X009031Y007215D01* |
X009031Y007313D02* |
X007865Y007313D01* |
X007865Y007412D02* |
X008837Y007412D01* |
X008739Y007510D02* |
X007865Y007510D01* |
X007865Y007609D02* |
X008162Y007609D01* |
X008162Y007707D02* |
X007865Y007707D01* |
X007865Y007806D02* |
X007900Y007806D01* |
X007605Y008101D02* |
X005379Y008101D01* |
X005379Y008003D02* |
X005960Y008003D01* |
X005915Y007904D02* |
X005379Y007904D01* |
X005379Y007806D02* |
X005915Y007806D01* |
X005915Y007707D02* |
X005379Y007707D01* |
X005379Y007609D02* |
X005915Y007609D01* |
X005915Y007533D02* |
X005915Y007226D01* |
X005925Y007188D01* |
X005945Y007153D01* |
X005973Y007125D01* |
X006007Y007106D01* |
X006045Y007095D01* |
X006353Y007095D01* |
X006353Y007533D01* |
X005915Y007533D01* |
X005915Y007510D02* |
X005379Y007510D01* |
X005379Y007412D02* |
X005915Y007412D01* |
X005915Y007313D02* |
X005379Y007313D01* |
X005379Y007215D02* |
X005918Y007215D01* |
X005989Y007116D02* |
X005379Y007116D01* |
X005379Y007018D02* |
X006515Y007018D01* |
X006428Y007116D02* |
X006353Y007116D01* |
X006353Y007215D02* |
X006428Y007215D01* |
X006428Y007313D02* |
X006353Y007313D01* |
X006353Y007412D02* |
X006428Y007412D01* |
X006428Y007510D02* |
X006353Y007510D01* |
X006353Y007609D02* |
X006428Y007609D01* |
X006428Y007707D02* |
X006353Y007707D01* |
X006353Y007806D02* |
X006428Y007806D01* |
X006428Y007904D02* |
X006353Y007904D01* |
X006353Y008003D02* |
X006428Y008003D01* |
X005935Y008200D02* |
X005379Y008200D01* |
X005379Y008298D02* |
X005935Y008298D01* |
X005935Y008397D02* |
X005379Y008397D01* |
X005379Y008495D02* |
X005935Y008495D01* |
X005935Y008594D02* |
X005379Y008594D01* |
X005379Y008692D02* |
X005935Y008692D01* |
X005935Y008791D02* |
X005379Y008791D01* |
X005379Y008889D02* |
X005935Y008889D01* |
X005911Y008988D02* |
X005379Y008988D01* |
X005379Y009086D02* |
X005812Y009086D01* |
X005714Y009185D02* |
X005379Y009185D01* |
X005379Y009283D02* |
X005694Y009283D01* |
X005694Y009382D02* |
X005379Y009382D01* |
X005379Y009480D02* |
X005694Y009480D01* |
X005694Y009579D02* |
X005379Y009579D01* |
X005379Y009677D02* |
X005694Y009677D01* |
X005694Y009776D02* |
X005379Y009776D01* |
X005379Y009874D02* |
X005694Y009874D01* |
X005694Y009973D02* |
X005379Y009973D01* |
X005379Y010071D02* |
X005694Y010071D01* |
X005723Y010170D02* |
X005379Y010170D01* |
X005379Y010268D02* |
X005822Y010268D01* |
X005920Y010367D02* |
X005379Y010367D01* |
X005379Y010465D02* |
X005935Y010465D01* |
X005935Y010564D02* |
X005379Y010564D01* |
X005379Y010662D02* |
X005935Y010662D01* |
X005935Y010761D02* |
X005379Y010761D01* |
X005379Y010859D02* |
X005935Y010859D01* |
X005944Y010958D02* |
X005379Y010958D01* |
X005379Y011056D02* |
X008450Y011056D01* |
X008810Y011056D02* |
X008913Y011056D01* |
X008913Y010958D02* |
X008810Y010958D01* |
X008810Y010859D02* |
X008937Y010859D01* |
X008943Y010848D02* |
X008971Y010821D01* |
X009005Y010801D01* |
X009044Y010791D01* |
X009269Y010791D01* |
X009269Y011186D01* |
X008913Y011186D01* |
X008913Y010921D01* |
X008923Y010883D01* |
X008943Y010848D01* |
X008810Y010761D02* |
X009999Y010761D01* |
X009996Y010750D02* |
X009996Y010602D01* |
X010201Y010602D01* |
X010201Y010602D01* |
X009996Y010602D01* |
X009996Y010543D01* |
X009775Y010543D01* |
X009770Y010538D01* |
X009630Y010538D01* |
X009605Y010563D01* |
X008986Y010563D01* |
X008922Y010498D01* |
X008857Y010563D01* |
X008810Y010563D01* |
X008810Y011567D01* |
X009000Y011757D01* |
X010426Y011757D01* |
X010612Y011571D01* |
X010612Y010880D01* |
X010595Y010880D01* |
X010595Y010671D01* |
X010595Y010671D01* |
X010595Y010880D01* |
X010578Y010880D01* |
X010578Y011129D01* |
X010453Y011254D01* |
X010453Y011585D01* |
X010377Y011661D01* |
X009757Y011661D01* |
X009704Y011608D01* |
X009695Y011623D01* |
X009667Y011651D01* |
X009633Y011671D01* |
X009595Y011681D01* |
X009369Y011681D01* |
X009369Y011286D01* |
X009269Y011286D01* |
X009269Y011681D01* |
X009044Y011681D01* |
X009005Y011671D01* |
X008971Y011651D01* |
X008943Y011623D01* |
X008923Y011589D01* |
X008913Y011551D01* |
X008913Y011286D01* |
X009269Y011286D01* |
X009269Y011186D01* |
X009369Y011186D01* |
X009369Y010791D01* |
X009595Y010791D01* |
X009633Y010801D01* |
X009667Y010821D01* |
X009695Y010848D01* |
X009704Y010864D01* |
X009757Y010811D01* |
X010019Y010811D01* |
X010006Y010788D01* |
X009996Y010750D01* |
X009996Y010662D02* |
X008810Y010662D01* |
X008810Y010564D02* |
X009996Y010564D01* |
X009957Y010358D02* |
X009418Y010358D01* |
X009418Y009964D01* |
X009296Y010137D01* |
X009269Y010859D02* |
X009369Y010859D01* |
X009369Y010958D02* |
X009269Y010958D01* |
X009269Y011056D02* |
X009369Y011056D01* |
X009369Y011155D02* |
X009269Y011155D01* |
X009269Y011253D02* |
X008810Y011253D01* |
X008810Y011155D02* |
X008913Y011155D01* |
X008913Y011352D02* |
X008810Y011352D01* |
X008810Y011450D02* |
X008913Y011450D01* |
X008913Y011549D02* |
X008810Y011549D01* |
X008891Y011647D02* |
X008967Y011647D01* |
X008989Y011746D02* |
X010436Y011746D01* |
X010391Y011647D02* |
X010535Y011647D01* |
X010612Y011549D02* |
X010453Y011549D01* |
X010453Y011450D02* |
X010612Y011450D01* |
X010612Y011352D02* |
X010453Y011352D01* |
X010454Y011253D02* |
X010612Y011253D01* |
X010612Y011155D02* |
X010552Y011155D01* |
X010578Y011056D02* |
X010612Y011056D01* |
X010612Y010958D02* |
X010578Y010958D01* |
X010595Y010859D02* |
X010595Y010859D01* |
X010595Y010761D02* |
X010595Y010761D01* |
X010792Y010602D02* |
X010792Y011645D01* |
X010500Y011937D01* |
X008925Y011937D01* |
X008630Y011641D01* |
X009269Y011647D02* |
X009369Y011647D01* |
X009369Y011549D02* |
X009269Y011549D01* |
X009269Y011450D02* |
X009369Y011450D01* |
X009369Y011352D02* |
X009269Y011352D01* |
X009671Y011647D02* |
X009744Y011647D01* |
X010008Y011444D02* |
X010055Y011444D01* |
X010067Y011236D01* |
X010008Y011444D02* |
X010398Y011055D01* |
X010398Y010602D01* |
X010977Y010564D02* |
X011774Y010564D01* |
X011774Y010662D02* |
X010977Y010662D01* |
X010977Y010761D02* |
X011774Y010761D01* |
X011774Y010859D02* |
X010972Y010859D01* |
X010972Y010958D02* |
X011774Y010958D01* |
X011774Y011056D02* |
X010972Y011056D01* |
X010972Y011155D02* |
X011774Y011155D01* |
X011774Y011253D02* |
X010972Y011253D01* |
X010972Y011352D02* |
X011774Y011352D01* |
X011774Y011450D02* |
X010972Y011450D01* |
X010972Y011549D02* |
X011774Y011549D01* |
X011774Y011647D02* |
X010972Y011647D01* |
X010946Y011746D02* |
X011774Y011746D01* |
X011774Y010465D02* |
X011439Y010465D01* |
X011537Y010367D02* |
X011774Y010367D01* |
X011774Y010268D02* |
X011636Y010268D01* |
X011734Y010170D02* |
X011774Y010170D01* |
X011763Y010071D02* |
X011774Y010071D01* |
X011763Y009973D02* |
X011779Y009973D01* |
X011763Y009874D02* |
X012401Y009874D01* |
X012401Y009776D02* |
X011763Y009776D01* |
X011763Y009677D02* |
X012401Y009677D01* |
X012401Y009579D02* |
X011763Y009579D01* |
X011763Y009480D02* |
X012401Y009480D01* |
X012401Y009382D02* |
X011763Y009382D01* |
X011763Y009283D02* |
X012401Y009283D01* |
X012401Y009185D02* |
X011763Y009185D01* |
X011763Y009086D02* |
X012401Y009086D01* |
X012401Y008988D02* |
X011763Y008988D01* |
X011763Y008889D02* |
X012401Y008889D01* |
X012401Y008791D02* |
X011763Y008791D01* |
X011763Y008692D02* |
X012401Y008692D01* |
X012401Y008594D02* |
X011763Y008594D01* |
X011763Y008495D02* |
X012401Y008495D01* |
X012401Y008397D02* |
X011763Y008397D01* |
X011763Y008298D02* |
X012401Y008298D01* |
X012401Y008200D02* |
X011763Y008200D01* |
X011763Y008101D02* |
X012401Y008101D01* |
X012401Y008003D02* |
X011763Y008003D01* |
X011742Y007904D02* |
X012401Y007904D01* |
X012401Y007806D02* |
X011644Y007806D01* |
X011545Y007707D02* |
X012401Y007707D01* |
X012401Y007609D02* |
X011447Y007609D01* |
X011348Y007510D02* |
X012401Y007510D01* |
X012401Y007412D02* |
X011250Y007412D01* |
X011151Y007313D02* |
X012401Y007313D01* |
X012401Y007215D02* |
X011053Y007215D01* |
X010894Y007311D02* |
X009811Y007311D01* |
X009713Y007212D01* |
X009682Y007212D01* |
X009516Y007046D01* |
X009031Y006919D02* |
X007524Y006919D01* |
X007695Y006821D02* |
X009031Y006821D01* |
X009031Y006722D02* |
X007816Y006722D01* |
X007915Y006624D02* |
X009084Y006624D01* |
X009654Y006328D02* |
X008126Y006328D01* |
X008183Y006230D02* |
X009597Y006230D01* |
X009565Y006131D02* |
X008215Y006131D01* |
X008242Y006033D02* |
X009538Y006033D01* |
X009512Y005934D02* |
X008268Y005934D01* |
X008290Y005836D02* |
X009490Y005836D01* |
X009490Y005737D02* |
X008290Y005737D01* |
X008290Y005639D02* |
X009490Y005639D01* |
X009490Y005540D02* |
X008290Y005540D01* |
X008279Y005442D02* |
X009501Y005442D01* |
X009528Y005343D02* |
X008252Y005343D01* |
X008226Y005245D02* |
X009554Y005245D01* |
X009581Y005146D02* |
X008199Y005146D01* |
X008148Y005048D02* |
X009632Y005048D01* |
X009689Y004949D02* |
X008091Y004949D01* |
X008034Y004851D02* |
X009746Y004851D01* |
X009827Y004752D02* |
X007953Y004752D01* |
X007855Y004654D02* |
X009925Y004654D01* |
X010024Y004555D02* |
X007756Y004555D01* |
X007591Y004457D02* |
X010189Y004457D01* |
X010372Y004358D02* |
X007408Y004358D01* |
X006372Y004358D02* |
X005379Y004358D01* |
X005379Y004260D02* |
X012401Y004260D01* |
X012401Y004358D02* |
X011408Y004358D01* |
X011591Y004457D02* |
X012401Y004457D01* |
X012401Y004555D02* |
X011756Y004555D01* |
X011855Y004654D02* |
X012401Y004654D01* |
X012401Y004752D02* |
X011953Y004752D01* |
X012034Y004851D02* |
X012401Y004851D01* |
X012401Y004949D02* |
X012091Y004949D01* |
X012148Y005048D02* |
X012401Y005048D01* |
X012401Y005146D02* |
X012199Y005146D01* |
X012226Y005245D02* |
X012401Y005245D01* |
X012401Y005343D02* |
X012252Y005343D01* |
X012279Y005442D02* |
X012401Y005442D01* |
X012401Y005540D02* |
X012290Y005540D01* |
X012290Y005639D02* |
X012401Y005639D01* |
X012401Y005737D02* |
X012290Y005737D01* |
X012290Y005836D02* |
X012401Y005836D01* |
X012401Y005934D02* |
X012268Y005934D01* |
X012242Y006033D02* |
X012401Y006033D01* |
X012401Y006131D02* |
X012215Y006131D01* |
X012183Y006230D02* |
X012401Y006230D01* |
X012401Y006328D02* |
X012126Y006328D01* |
X012069Y006427D02* |
X012401Y006427D01* |
X012401Y006525D02* |
X012012Y006525D01* |
X011915Y006624D02* |
X012401Y006624D01* |
X012401Y006722D02* |
X011816Y006722D01* |
X011695Y006821D02* |
X012401Y006821D01* |
X012401Y006919D02* |
X011524Y006919D01* |
X011265Y007018D02* |
X012401Y007018D01* |
X012401Y007116D02* |
X010001Y007116D01* |
X010001Y007018D02* |
X010515Y007018D01* |
X010256Y006919D02* |
X010001Y006919D01* |
X010001Y006821D02* |
X010085Y006821D01* |
X009768Y006525D02* |
X008012Y006525D01* |
X008069Y006427D02* |
X009711Y006427D01* |
X010894Y007311D02* |
X011583Y008000D01* |
X011583Y010067D01* |
X011292Y010358D01* |
X011036Y010358D01* |
X009709Y010859D02* |
X009701Y010859D01* |
X008162Y010071D02* |
X006134Y010071D01* |
X006821Y009973D02* |
X006959Y009973D01* |
X006935Y009874D02* |
X006845Y009874D01* |
X006823Y010170D02* |
X006957Y010170D01* |
X006935Y010268D02* |
X006845Y010268D01* |
X006845Y010367D02* |
X006935Y010367D01* |
X007821Y009973D02* |
X008162Y009973D01* |
X008162Y009874D02* |
X007845Y009874D01* |
X007845Y009776D02* |
X008147Y009776D01* |
X008142Y009677D02* |
X007845Y009677D01* |
X007938Y009579D02* |
X008142Y009579D01* |
X008037Y009480D02* |
X008498Y009480D01* |
X008498Y009391D02* |
X008498Y009194D01* |
X008598Y009194D01* |
X008598Y009391D01* |
X008498Y009391D01* |
X008498Y009382D02* |
X008598Y009382D01* |
X008598Y009283D02* |
X008498Y009283D01* |
X008142Y009382D02* |
X008135Y009382D01* |
X009099Y008960D02* |
X009122Y008984D01* |
X009296Y009007D02* |
X009319Y008984D01* |
X010201Y008641D02* |
X010221Y008563D01* |
X007428Y008003D02* |
X007353Y008003D01* |
X007353Y007904D02* |
X007428Y007904D01* |
X007428Y007806D02* |
X007353Y007806D01* |
X007353Y007707D02* |
X007428Y007707D01* |
X007428Y007609D02* |
X007353Y007609D01* |
X007353Y007510D02* |
X007428Y007510D01* |
X007428Y007412D02* |
X007353Y007412D01* |
X007353Y007313D02* |
X007428Y007313D01* |
X007428Y007215D02* |
X007353Y007215D01* |
X007353Y007116D02* |
X007428Y007116D01* |
X006256Y006919D02* |
X005379Y006919D01* |
X005379Y006821D02* |
X006085Y006821D01* |
X005964Y006722D02* |
X005379Y006722D01* |
X005379Y006624D02* |
X005865Y006624D01* |
X005768Y006525D02* |
X005379Y006525D01* |
X005379Y006427D02* |
X005711Y006427D01* |
X005654Y006328D02* |
X005379Y006328D01* |
X005379Y006230D02* |
X005597Y006230D01* |
X005565Y006131D02* |
X005379Y006131D01* |
X005379Y006033D02* |
X005538Y006033D01* |
X005512Y005934D02* |
X005379Y005934D01* |
X005379Y005836D02* |
X005490Y005836D01* |
X005490Y005737D02* |
X005379Y005737D01* |
X005379Y005639D02* |
X005490Y005639D01* |
X005490Y005540D02* |
X005379Y005540D01* |
X005379Y005442D02* |
X005501Y005442D01* |
X005528Y005343D02* |
X005379Y005343D01* |
X005379Y005245D02* |
X005554Y005245D01* |
X005581Y005146D02* |
X005379Y005146D01* |
X005379Y005048D02* |
X005632Y005048D01* |
X005689Y004949D02* |
X005379Y004949D01* |
X005379Y004851D02* |
X005746Y004851D01* |
X005827Y004752D02* |
X005379Y004752D01* |
X005379Y004654D02* |
X005925Y004654D01* |
X006024Y004555D02* |
X005379Y004555D01* |
X005379Y004457D02* |
X006189Y004457D01* |
X005379Y004161D02* |
X012401Y004161D01* |
X005944Y011155D02* |
X005379Y011155D01* |
X005379Y011253D02* |
X005915Y011253D01* |
X005915Y011352D02* |
X005379Y011352D01* |
X005379Y011450D02* |
X005915Y011450D01* |
D20* |
X008532Y009476D02* |
X008532Y009378D01* |
X008925Y009771D01* |
X008925Y010657D01* |
X008827Y010756D01* |
X008827Y011248D01* |
X008839Y011236D01* |
X009319Y011236D01* |
D21* |
X007646Y009574D02* |
X007351Y009574D01* |
X007390Y009570D02* |
X006390Y009570D01* |
X007646Y009574D02* |
X008236Y008984D01* |
X008630Y008984D01* |
X008630Y008665D01* |
X008587Y008665D01* |
X008630Y008984D02* |
X009122Y008984D01* |
X009319Y008984D01* |
X009516Y008984D01* |
X009516Y008166D01* |
X010201Y008641D02* |
X010201Y008988D01* |
X010205Y008984D02* |
X009516Y008984D01* |
X009296Y009007D02* |
X009296Y009441D01* |
M02* |
/Modules/Sensors/MAG01A/CAM_PROFI/BOARD.PHO |
---|
0,0 → 1,220 |
G75* |
G70* |
%OFA0B0*% |
%FSLAX24Y24*% |
%IPPOS*% |
%LPD*% |
%AMOC8* |
5,1,8,0,0,1.08239X$1,22.5* |
% |
%ADD10C,0.0000*% |
%ADD11C,0.0051*% |
%ADD12C,0.0110*% |
D10* |
X004929Y003708D02* |
X012851Y003708D01* |
X012851Y012220D01* |
X012851Y015630D01* |
X004929Y015630D01* |
X004929Y012220D01* |
X004929Y003708D01* |
X004929Y012220D02* |
X012851Y012220D01* |
D11* |
X017741Y007377D02* |
X023953Y007377D01* |
X023953Y019298D02* |
X017741Y019298D01* |
X023166Y019298D02* |
X023166Y007377D01* |
X023040Y008401D01* |
X023292Y008401D01* |
X023166Y007377D01* |
X023115Y008401D01* |
X023217Y008401D02* |
X023166Y007377D01* |
X023064Y008401D01* |
X023268Y008401D02* |
X023166Y007377D01* |
X023166Y019298D02* |
X023040Y018275D01* |
X023292Y018275D01* |
X023166Y019298D01* |
X023115Y018275D01* |
X023217Y018275D02* |
X023166Y019298D01* |
X023064Y018275D01* |
X023268Y018275D02* |
X023166Y019298D01* |
X009819Y007377D02* |
X009819Y003794D01* |
X017741Y003794D02* |
X017741Y007377D01* |
X017741Y004582D02* |
X009819Y004582D01* |
X010843Y004708D01* |
X010843Y004456D01* |
X009819Y004582D01* |
X010843Y004633D01* |
X010843Y004531D02* |
X009819Y004582D01* |
X010843Y004684D01* |
X010843Y004480D02* |
X009819Y004582D01* |
X017741Y004582D02* |
X016717Y004708D01* |
X016717Y004456D01* |
X017741Y004582D01* |
X016717Y004633D01* |
X016717Y004531D02* |
X017741Y004582D01* |
X016717Y004684D01* |
X016717Y004480D02* |
X017741Y004582D01* |
X009819Y015889D02* |
X006434Y015889D01* |
X006434Y007377D02* |
X009819Y007377D01* |
X007221Y007377D02* |
X007221Y015889D01* |
X007095Y014865D01* |
X007347Y014865D01* |
X007221Y015889D01* |
X007170Y014865D01* |
X007272Y014865D02* |
X007221Y015889D01* |
X007119Y014865D01* |
X007323Y014865D02* |
X007221Y015889D01* |
X007221Y007377D02* |
X007095Y008401D01* |
X007347Y008401D01* |
X007221Y007377D01* |
X007170Y008401D01* |
X007272Y008401D02* |
X007221Y007377D01* |
X007119Y008401D01* |
X007323Y008401D02* |
X007221Y007377D01* |
D12* |
X021660Y010926D02* |
X021448Y011137D01* |
X021448Y011560D01* |
X021660Y011772D01* |
X021871Y011772D01* |
X022083Y011560D01* |
X022083Y011349D01* |
X022083Y011560D02* |
X022294Y011772D01* |
X022506Y011772D01* |
X022717Y011560D01* |
X022717Y011137D01* |
X022506Y010926D01* |
X022506Y012195D02* |
X021660Y012195D01* |
X021448Y012406D01* |
X021448Y012829D01* |
X021660Y013041D01* |
X022506Y013041D01* |
X022717Y012829D01* |
X022717Y012406D01* |
X022506Y012195D01* |
X021660Y013041D01* |
X022717Y013463D02* |
X022506Y013463D01* |
X022506Y013675D01* |
X022717Y013675D01* |
X022717Y013463D01* |
X022717Y014944D02* |
X022717Y014098D01* |
X021871Y014944D01* |
X021660Y014944D01* |
X021448Y014732D01* |
X021448Y014309D01* |
X021660Y014098D01* |
X021660Y015367D02* |
X021448Y015578D01* |
X021448Y016001D01* |
X021660Y016213D01* |
X021871Y016213D01* |
X022083Y016001D01* |
X022294Y016213D01* |
X022506Y016213D01* |
X022717Y016001D01* |
X022717Y015578D01* |
X022506Y015367D01* |
X022294Y015367D01* |
X022083Y015578D01* |
X021871Y015367D01* |
X021660Y015367D01* |
X022083Y015578D02* |
X022083Y016001D01* |
X012214Y005031D02* |
X011368Y005031D01* |
X012214Y005877D01* |
X012214Y006088D01* |
X012003Y006300D01* |
X011580Y006300D01* |
X011368Y006088D01* |
X012637Y005242D02* |
X012637Y006088D01* |
X012848Y006300D01* |
X013271Y006300D01* |
X013483Y006088D01* |
X013483Y005242D01* |
X013271Y005031D01* |
X012848Y005031D01* |
X012637Y005242D01* |
X013483Y006088D01* |
X013906Y005031D02* |
X013906Y005242D01* |
X014117Y005242D01* |
X014117Y005031D01* |
X013906Y005031D01* |
X014540Y005877D02* |
X014963Y006300D01* |
X014963Y005031D01* |
X014540Y005031D02* |
X015386Y005031D01* |
X016655Y005031D02* |
X015809Y005031D01* |
X016655Y005877D01* |
X016655Y006088D01* |
X016443Y006300D01* |
X016020Y006300D01* |
X015809Y006088D01* |
X006772Y010067D02* |
X006772Y009221D01* |
X005926Y010067D01* |
X005715Y010067D01* |
X005503Y009856D01* |
X005503Y009433D01* |
X005715Y009221D01* |
X005926Y010490D02* |
X005503Y010913D01* |
X006772Y010913D01* |
X006772Y010490D02* |
X006772Y011336D01* |
X006772Y011759D02* |
X006561Y011759D01* |
X006561Y011970D01* |
X006772Y011970D01* |
X006772Y011759D01* |
X005503Y013239D02* |
X005715Y012816D01* |
X006138Y012393D01* |
X006561Y012393D01* |
X006772Y012605D01* |
X006772Y013028D01* |
X006561Y013239D01* |
X006349Y013239D01* |
X006138Y013028D01* |
X006138Y012393D01* |
X006772Y014508D02* |
X006772Y013662D01* |
X005926Y014508D01* |
X005715Y014508D01* |
X005503Y014296D01* |
X005503Y013873D01* |
X005715Y013662D01* |
M02* |
/Modules/Sensors/MAG01A/CAM_PROFI/DRILL |
---|
0,0 → 1,25 |
% |
M48 |
M72 |
T01C0.0350 |
T02C0.0360 |
T03C0.1260 |
% |
T01 |
X6390Y7570 |
X7390Y7570 |
X7390Y8570 |
X6390Y8570 |
X6390Y9570 |
X7390Y9570 |
X7390Y10570 |
X6390Y10570 |
X7390Y11570 |
T02 |
X6390Y11570 |
T03 |
X6890Y5669 |
X10890Y5669 |
X10890Y13669 |
X6890Y13669 |
M30 |
/Modules/Sensors/MAG01A/CAM_PROFI/M2.PHO |
---|
0,0 → 1,66 |
G75* |
G70* |
%OFA0B0*% |
%FSLAX24Y24*% |
%IPPOS*% |
%LPD*% |
%AMOC8* |
5,1,8,0,0,1.08239X$1,22.5* |
% |
%ADD10R,0.0190X0.0336*% |
%ADD11R,0.0336X0.0190*% |
%ADD12R,0.0592X0.0671*% |
%ADD13R,0.0671X0.0592*% |
%ADD14R,0.0730X0.0730*% |
%ADD15C,0.2620*% |
%ADD16R,0.0790X0.0710*% |
D10* |
X010201Y009523D03* |
X010398Y009523D03* |
X010595Y009523D03* |
X010792Y009523D03* |
X010792Y010602D03* |
X010595Y010602D03* |
X010398Y010602D03* |
X010201Y010602D03* |
D11* |
X009957Y010358D03* |
X009957Y010161D03* |
X009957Y009964D03* |
X009957Y009767D03* |
X011036Y009767D03* |
X011036Y009964D03* |
X011036Y010161D03* |
X011036Y010358D03* |
D12* |
X010067Y011236D03* |
X009319Y011236D03* |
X009296Y010137D03* |
X008548Y010137D03* |
X008548Y009441D03* |
X009296Y009441D03* |
X010221Y008563D03* |
X010969Y008563D03* |
D13* |
X008587Y008665D03* |
X008587Y007917D03* |
D14* |
X007390Y007570D03* |
X006390Y007570D03* |
X006390Y008570D03* |
X007390Y008570D03* |
X007390Y009570D03* |
X006390Y009570D03* |
X006390Y010570D03* |
X007390Y010570D03* |
X007390Y011570D03* |
X006390Y011570D03* |
D15* |
X006890Y005669D03* |
X010890Y005669D03* |
X010890Y013669D03* |
X006890Y013669D03* |
D16* |
X009516Y008166D03* |
X009516Y007046D03* |
M02* |
/Modules/Sensors/MAG01A/pdf/HMC5883L-FDS.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Modules/Sensors/MAG01A/pdf/HMC5883L_3-Axis_Digital_Compass_IC.pdf |
---|
0,0 → 1,5564 |
%PDF-1.5 |
%µµµµ |
1 0 obj |
<</Type/Catalog/Pages 2 0 R/Lang(en-US) /StructTreeRoot 92 0 R/MarkInfo<</Marked true>>>> |
endobj |
2 0 obj |
<</Type/Pages/Count 19/Kids[ 3 0 R 25 0 R 35 0 R 40 0 R 43 0 R 50 0 R 53 0 R 57 0 R 62 0 R 64 0 R 68 0 R 70 0 R 72 0 R 74 0 R 76 0 R 78 0 R 80 0 R 82 0 R 84 0 R] >> |
endobj |
3 0 obj |
<</Type/Page/Parent 2 0 R/Resources<</Font<</F1 5 0 R/F2 7 0 R/F3 9 0 R/F4 11 0 R/F5 14 0 R/F6 19 0 R>>/XObject<</Image13 13 0 R/Image24 24 0 R>>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 4 0 R/Group<</Type/Group/S/Transparency/CS/DeviceRGB>>/Tabs/S/StructParents 0>> |
endobj |
4 0 obj |
<</Filter/FlateDecode/Length 8042>> |
stream |
+Ͼ^Ø>²î;Qwe;¡<e'¯*ÛZ¡* kzQöE«B»ÍÃþ° ¨'2/4£Ä´uu¡:C 7®PÎðeÙh@©Õn7ƬWWLø¨ÄêåöfsrÚ®~?Ýê|Õê3î©Ï'5¿Yª¶Ô2ÀBWö«®Ü |
+?MÑ_¶*dߤéüG¯¯'§µãͶ]Ùë<*Âö% |
+l4m8õ%Ê |
+8!4Ú5`îè×í0V^"ê²îCÎÍÞ%ªWêú«±áÄ&i·èú*°¢Ï[`¥GDCؽ=ìµýËÐv o×nTvk\ERÈðôÇ|Á®ìK@q&7[øs³ß¡ÍÎàêÁVµ!®ÛÇà&K<Ëj |
+´a>Ø\Ð)¥¡S ÉÙ¶³°T:A |
+ÉVäwþiNÕ+ðº -g`õHאּõv÷Rüt²0üÙ³\4¢Á\YR]ÖbF $m?qp-âBàÉØ®Ø1Á¦«ÚÆT4¢AÐ,ÃzÇYOðÑ>üA_®pµQ .¯`z=æXBA¬&Ï4lH!Ò!UþéÝî²&?ËÇ÷5çuñ îJ9¬ÞWe×ä>Kmð,ëþ´õá£ÿúiLÿ,; [*|ÔÄݵõ±E½XPÏ |
+Ý¥å5îvy×,7üû+orE,Kó½Ý}E!°_Þ¢ñ5n*ð'TÀA°Áxp{ìF0Ê" QmEÆêSÞÿ¯ÎLâ ß5ØÀá#S¾__ãànÈp6¯W«B? ¥It*ئÖ0ëÝOo,´ òAYYÓ4pÿÑõßYWCιg0òD/Ѷ%wNüÈAöépÉôÖEÈ=Zxi(Ëç$pÇ¡ë;ôâGt£â¡øÊÍP»aâR$hÃø,©©7+lvºIµõtÉû¡OrÕp¦QyâW,c½*ë:keQ:;9:vÎá:M~î2fÀxÁÆ·}ÂÅø'2$ôËê3R{b³¨Wè³VCma i\vÄQ&q^¿Ó4o¾d@×bÄàþë_²ðÁ²Ü×ß<P8R+n¥«ÎãH |
+°"#)%ºÿ¬ÑdVY ^¼7òp×8³¾_/ÖÆAMbIº«WYµ=úo¯f)3°ª¥îÂt@48¨Öe©~MìrªkÐ~Ù¦Ý9³LSèJ=ç<æÄ/0iªS¥Í.O`IB8 XÆÆBK |
+VY±Æ[MfÍRú0êâ)î¬Ô!L£T=¨+Ò3J_PLÀë |
+cÛ¹þYÈû2 æà%é\R£Cw¢á½º |
+Ó»<AÇ h»²],%3Þ: !P^B_TÔ@Î;cêy"å0|ÀªªîàÿmUé³'§ |
+ÙÐsû(F¦ú¯Òf¤mÀày¼l#ÛVj éC xC 5ÆÚJ3[Ⱦµ¡·.KóÑF©p¬>¹&´ ÃÀ¦;\ð¾Y.DSÚq&AÕã¬S5åcgÇGýÝ |
+ö´©Óºü´ ÿéøÚüÞ«¡ï0FS;ÑVZÏ0w%$5j l&NZ.ÙcB==§uëÕ¾Þì]°Ï¸]a´5d)( |
+¥´³+So°ÅSÙgÿÚy½?ø»uºIlmÀËeeÀ³Tys¥°ç¶ïÝÌ·Imfé×á7»K}¾'É ÷º" Sm¡¨õ`l²Bc]b |
+#66èh¼¿®åÛyuÒa\A¿I Ápuý9Ä¿ÚÄ¢Z`³Y8*4¡ 8#¢x*Ìw©åö,e#ZÔ'àIºFg¥Ïzö|,TYõuK_N9d½ÑEøGF·!JÒUÆ/Ø(_aiãm3 Ás>Ïi:=ðý¬eÎ ó(1æK³GMü̧V4#yë¦LÆmw¬5m×ɹôù3ØPVk¶L|vé¨p¸þ>ÌkWuøìz¬x»ß²XÕX¡pp= |
+3i"|÷ÀiHcÙÆ(ÐÉ]h^ÝOø |
+ |
+·OYÈÖ©+,nÏrímØ %'##'º. |
+JÊMwìÙAõtC¬ï^z£n(yç;8:/»5å&¢Ù>yÏnuVF2Ðj9Û½M2|%I }üô´ó{øí/8w?ãß¡Jd4eýðÿñu><#ÆûÕøGAGwp ïغUUv©ù\ #(XjÁ¤,ªÔü1!SçElæAÕÛÈwå_@º*jh;^ Ò5þôÿöâô«ñYÒpØ0²v¸ô{å»~øà ré(òi£ÿ3ýÏÍîËz¤Ô+Ú±YÐã,äÀ®¤.;d¬Ãè$H¢GäÌåýéñX5%̬XúÍiý¯GÂC@¢¸¬ðeb}³>Q&³g{Bw18 :7Ѹï0Ëå+ÿ£Â<íê3uüJI=í÷<VZõÖÏûÌ÷QhEYëÄï¹ |
+B±Ùñ:JH=aa^7c%w3qÅÜäöãê:ÃBeÒX2P²8Q |
+£ÈzÍDëÍDpÖØ÷èw'îèíÈòɾÂ?ÿ&ÿÕ¿wsÑ<¥èHÀÁËkW¹úÙ_òzeÄusiºà6Dll7oGu] Í2~Å ¤,þ¿ÜÙcZOaæÐàzðæß`ÇKÿ?²ÂÚ®IYèÃÑ*²s5ÚÝøzûl{³æÛÕIL_ñÖi?×ì0÷>bR¨¥µ÷NS ¥W߶ÅsXéßLW9w³výÏF¤ß¼§?gÔTopÚL+µÓÌõáë%ðÖì^Ëå¡óÍWûIÙOÔ0³+`¿Áº¼6Ã_áÓxzÉv©<ÂÈélKö0}ï-fN"GõÓs|àMq¾9Q~^ØÝÃÔ6d_ü¡¦æVV÷0·¾Aæ<pêâ~3 £Øïßü`N=ÿ¥=óûË)úÁÍ»I¹&sM¥ý zç:Å6£"Ä¿½Á¿hÔ]íó0Lý@ßïajºÓ!ÓÎ`¯xÞ{=VêÓ04èlðìÊB+:Å Z"Æű'gþieÐzhy<:_ÄÍDA5÷88;ç%e²gÅDZâcQÏwdgÓîÎ<6IdÓ¡Z6Ò,õD£ÑtÄT]:AOø4Òî(ÎB3÷8ì<Ø?º`'ªüh# ¬>½ò(ð°öt@+Àú̵ / :&äüjÎvn.L¥µ-H×*Môp¥øqëN}5ÍE}Ox'±*5Æ¿o~Ƴêd%RÝO]Ìͯãy×¢&flÇ5ù{æÿ×G³*::zðzüÒÙiÖË{ÀÚb`]ߧÃîiíÚjL4ÿl|¸-:Ô;m:(Lk9h[üïñ£ÃwRîîkE ëñ$d°¬Ä9F_\oL êhm;!h±.»wÈVhÑzŦjî |
+¶"®½Û/À&s&i3I#3É4cÖk°¬×y<^A Ä cÆ©¶Sp¾u>5{¦zj7ínÿa30P 6Æ`<C§ÎñØemÝÿ¹[×¹Î5µRhmÓÿån³!_qç_RcµÝ\0XÖéà£ÅV§^ßûøëNÉÄÐÎÜéºÇBd:ªë§Þt0ÕÙAeú¹H2ªSÕÌÍ&¢ºL¶t3ePÌ59êrÙ³âcȤ£:%ç*6ê2Ù4Ò¤kt'4áõ!crZäBÆ£:êÒ"QG#-íÙè,ÌÜqØGÀ;}wý=çehu)¦4Øà kKÕÈ +:ÌÛþÏÃå46¥lÌúñCÂVkØ©ñ´fp¢_Ìz®XÀ´êL1'/Oª1O[%f®¢ÀKN¿B÷:¿±7&£GG,.è߶ÁVÎ íÆAy»á¡¹ÏXN]ã¶Io; |
+G0êÀ勉DÒL7Óè1ÐÇ£Ón&¢ös-ÅÁ%Lö¬ø2iFÏEQؤǦ&¼ìݹÃR!FÉiy$ |
+w`¤¬&q`<ii·ÈFgaV Ã.80 #SètçÝP%-¶__ãM?ÝnÌelL1 ÁÍhZ¼Ãc,Ëã)´tz0tÑ`iqOP¨~i¦WvÁ®D+sã¯ÁßIBj|2 |
+G§/Ý qgYò¾mçD(ÛmS×(wm&ó>ÄMw&~"òÔdï-ÎÙY±vmÁx÷âñ/ÌêC^RNÎó²×Ð3[}øBÆ|x|7¥N³g¾¡2f¯yg©ï8lÂÏäÒéf; çÉo0åÃç2h èx lÉfþ§|øLFPÕtµXºßLóßQȸo >|ÀÄk÷°¦¥ÜâNìYÆ;»àµK /ðó³Hß;@×öcÛe¸æî|¦AeÈóYq~Z~éítxó{º²18I{4x¯Ú>i¥à$&¾¢ó<`ÚL |
+s©ÿ'ÌN]§3*õÍüHxÉô×Ri/»#`½£²ucÒõìÙÎ|¢J |
+|/\@-ÕVm¢ý¸Æc2w{ |
+|^{Â.¹Þjü¼}ùn¡À÷Ù¾¹Ð½¿N´Îå¡ÔnË>WÌ5¶õ3οjg`ÔÉ;ê27¹%2ÔÎXöæ%hÊåñè$ÖÍDÁ L/´`ìYá1dƲËâB |
+g³!ÑçöycëPùX;ºÐ3Àú÷ÚÜÿûøxü½Ä7ÄøÙâXk<¯`åÎÍæcµ/ʺçÆZ<öâøX¢ðxÃöâ]Òñb</¨a·Oãûh!qʦ½¤ |
+¡Þ« ¦¾I4 T%¬Åea^²àFzdÑÛÀêÚ¸ØØçµ8ðB È[p,bÒÞ2q |
+sYë |
+Ëä´¶ º+ îÿÊ@Ïá)$%ÝÒKüÌÊ'qعծ½WÛ0öúíõóðúP |
+UHaiSMiäd?s V÷®q«±HÿìÑFw£3gOúí»=¾×á»÷Ç^ ËÑeÏÜ6":ä¹Zr¦yLº>©-I!r¦!kKYíeÈx¥X~æå´8ð¬ÎsÎÖhÐ×ÑÜ^Á`SùhU%°$Ø¡ßÞ¤ }뮵uï"uo¥r½¹,õǵy¸Ý¶ëáÖ\ÓsGï3{ âÖð¨lBÞZ|=è-]B|;¼Ï¾ÒÕ÷°ªuUÍFÃlÁ`ky±ø*4D'ÍÑcç°]¢.>ºÇ¯¾¬/7 ÚÏ· oÄ·¿7}GuBT4¦}Ìnöë¯YÐFí WÏ·tm[Q#ðç^ÐEÉëá%[0x ! *ÛÝS\ð.ÛãÃw^·2dYÿKº |
+endstream |
+endobj |
+5 0 obj |
+<</Type/Font/Subtype/TrueType/Name/F1/BaseFont/Arial,Italic/Encoding/WinAnsiEncoding/FontDescriptor 6 0 R/FirstChar 32/LastChar 121/Widths 2301 0 R>> |
+endobj |
+6 0 obj |
+<</Type/FontDescriptor/FontName/Arial,Italic/Flags 32/ItalicAngle -12/Ascent 905/Descent -208/CapHeight 728/AvgWidth 441/MaxWidth 1599/FontWeight 400/XHeight 250/Leading 33/StemV 44/FontBBox[ -517 -208 1082 728] >> |
+endobj |
+7 0 obj |
+<</Type/Font/Subtype/TrueType/Name/F2/BaseFont/Arial/Encoding/WinAnsiEncoding/FontDescriptor 8 0 R/FirstChar 32/LastChar 181/Widths 2302 0 R>> |
+endobj |
+8 0 obj |
+<</Type/FontDescriptor/FontName/Arial/Flags 32/ItalicAngle 0/Ascent 905/Descent -210/CapHeight 728/AvgWidth 441/MaxWidth 2665/FontWeight 400/XHeight 250/Leading 33/StemV 44/FontBBox[ -665 -210 2000 728] >> |
+endobj |
+9 0 obj |
+<</Type/Font/Subtype/TrueType/Name/F3/BaseFont/Arial,Bold/Encoding/WinAnsiEncoding/FontDescriptor 10 0 R/FirstChar 32/LastChar 122/Widths 2303 0 R>> |
+endobj |
+10 0 obj |
+<</Type/FontDescriptor/FontName/Arial,Bold/Flags 32/ItalicAngle 0/Ascent 905/Descent -210/CapHeight 728/AvgWidth 479/MaxWidth 2628/FontWeight 700/XHeight 250/Leading 33/StemV 47/FontBBox[ -628 -210 2000 728] >> |
+endobj |
+11 0 obj |
+<</Type/Font/Subtype/TrueType/Name/F4/BaseFont/Times#20New#20Roman,Bold/Encoding/WinAnsiEncoding/FontDescriptor 12 0 R/FirstChar 32/LastChar 32/Widths 2304 0 R>> |
+endobj |
+12 0 obj |
+<</Type/FontDescriptor/FontName/Times#20New#20Roman,Bold/Flags 32/ItalicAngle 0/Ascent 891/Descent -216/CapHeight 677/AvgWidth 427/MaxWidth 2558/FontWeight 700/XHeight 250/Leading 42/StemV 42/FontBBox[ -558 -216 2000 677] >> |
+endobj |
+13 0 obj |
+<</Type/XObject/Subtype/Image/Width 552/Height 481/ColorSpace/DeviceRGB/BitsPerComponent 8/Filter/DCTDecode/Interpolate true/Length 20639>> |
+stream |
+ÿØÿà JFIF ,, ÿÛ C |
+2!!22222222222222222222222222222222222222222222222222ÿÀ á(" |